复制特定文件类型,保留文件夹结构

复制特定文件类型,保留文件夹结构

我有一个文件夹结构,其中有一堆 *.csv 文件分散在文件夹中。现在我想将所有 *.csv 文件复制到另一个目标,保持文件夹结构。

它的工作原理是:

cp --parents *.csv /target
cp --parents */*.csv" /target
cp --parents */*/*.csv /target
cp --parents */*/*/*.csv /target
...

等等,但我想使用一个命令来完成它。

答案1

find有一个非常方便的-exec选项:

find . -name '*.csv' -exec cp --parents \{\} /target \;

答案2

您也可以用于rsync此目的。

$ rsync -a --prune-empty-dirs --include '*/' --include '*.csv' --exclude '*' source/ target/

如果您想保留源树中的空目录,请跳过该--prune-empty-dirs选项:

$ rsync -a --include '*/' --include '*.csv' --exclude '*' source/ target/

如果你这样做不是如果想要保留符号链接、修改日期、文件权限、所有者等,请替换-a-rlptgoD. ;-)

答案3

您可以使用寻找CPIO在直通模式下

find . -name '*.csv' | cpio -pdm  /target

这将找到当前目录及以下目录中的所有 .csv 文件,并将它们复制到 /target ,维护以 .csv 为根的目录结构.

如果你使用

find /path/to/files -name '*.csv' | cpio -pdm /target

它将找到 和 下面的所有文件/path/to/files并将它们复制到/target/path/to/files和 下面。

答案4

这对我有用:

find -name "*.csv" | xargs cp --parents -t /target

如果文件名中有空格,请添加选项-print0-0按照其中一条评论中的建议进行操作:

find -name "*.csv" -print0 | xargs -0 cp --parents -t /target

相关内容