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

问题描述 投票:0回答:1

我想将提供的新数据更新中缺少的某些具有特定扩展名的文件移动或复制到另一个保存子目录结构的新目录中。我想用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
bash copy move subdirectory
1个回答
0
投票

您可以将此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中创建相同的子目录结构。

© www.soinside.com 2019 - 2024. All rights reserved.