将具有扩展名的文件从目录的子目录移动到与另一个目录同名的另一个子目录

move files with extension from a subdirectory of directory to another subdirectory with the same name of another directory

我想移动或复制一些具有特定扩展名的文件,这些文件在提供的新数据更新中丢失到另一个保留子目录结构的新目录中。我想用 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.

中相同的子目录结构