![如何将所有匹配模式的文件复制到匹配相同结构的新文件夹树中](https://linux22.com/image/1525046/%E5%A6%82%E4%BD%95%E5%B0%86%E6%89%80%E6%9C%89%E5%8C%B9%E9%85%8D%E6%A8%A1%E5%BC%8F%E7%9A%84%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%8C%B9%E9%85%8D%E7%9B%B8%E5%90%8C%E7%BB%93%E6%9E%84%E7%9A%84%E6%96%B0%E6%96%87%E4%BB%B6%E5%A4%B9%E6%A0%91%E4%B8%AD.png)
我有一个文件夹全部
AllFolders
F1
some_file_20170315_xyz.txt
some_file_20170314_xyz.txt
....
F2
some_other_file_20170315_abc.txt
some_other_file_20170314_abc.txt
...
...
Fn
我如何才能将所有与特定日期匹配的文件复制到另一个空文件夹,以便文件夹结构也被复制,看起来像
Folder_20170315
F1
some_file_20170315_xyz.txt
F2
some_other_file_20170315_abc.txt
答案1
一种方法是使用find
and cp
:
find . -iname '*20170315*' -exec cp --parents {} /tmp/Folder_20170315 \;
目标文件夹必须已经存在。如果您愿意,也可以编写创建脚本。
看起来您想检查文件名,但find
也可以用它来检查文件日期。
答案2
由于cp --parents
在 Mac 上不可用,我使用了两个命令来解决类似的问题:
find . -name '*.example' | xargs -I FOO dirname FOO | xargs -I FOO mkdir -p /new/root/directory/FOO
find . -name '*.example' | xargs -I FOO cp FOO /new/root/directory/FOO
第一个命令创建目录树。第二个命令复制文件。
这假设速度find
很快。如果find
是性能瓶颈,您将需要进一步优化。例如,您可以将操作移到一个函数中。