我想将提供的新数据更新中缺少的某些具有特定扩展名的文件移动或复制到另一个保存子目录结构的新目录中。我想用bash命令来做。我正在使用MacBook Pro。
我有这样的结构:
/dir1/a/b/c/file1.json
/dir1/a/b/k/file2.json
/dir1/a/x/z/file3.json
/dir1/a/x/z/file4.zip
我只想将那些以.json结尾的文件移动到另一个保存子目录的目录中。关于其他目录,它可以在子文件夹中包含其他文件。
在新目录中也可以有不同的文件:
/dir2/a/b/c/file9.HTML
/dir2/a/b/k/file1.RAR
/dir2/a/x/z/file3.xls
/dir2/a/x/z/file4.XML
动作将是:
/dir1/a/b/c/file1.json -> /dir2/a/b/c/file1.json
/dir1/a/b/k/file2.json -> /dir2/a/b/k/file2.json
/dir1/a/x/z/file3.json -> /dir2/a/x/z/file3.json
/dir1/a/x/z/file4.zip -> no action as it is not .json
所以结构的最终状态将是这样:
/dir2/a/b/c/file9.HTML
/dir2/a/b/c/file1.json
/dir2/a/b/k/file1.RAR
/dir2/a/b/k/file2.json
/dir2/a/x/z/file3.xls
/dir2/a/x/z/file3.json
/dir2/a/x/z/file4.XML
您可以将此find + gnu-cp
命令与--parents
选项一起使用:
find /dir1 -name '*.json' -exec cp --parents -t /dir2/ {} +
按照man cp
:
--parents use full source file name under DIRECTORY
与/dir2
中的每个*.json
文件基本上将在/dir1
中创建相同的子目录结构。