如何将所有匹配模式的文件复制到匹配相同结构的新文件夹树中

如何将所有匹配模式的文件复制到匹配相同结构的新文件夹树中

我有一个文件夹全部

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

一种方法是使用findand 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是性能瓶颈,您将需要进一步优化。例如,您可以将操作移到一个函数中。

相关内容