我有一个文件夹结构,其中有一堆 *.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
答案4
这对我有用:
find -name "*.csv" | xargs cp --parents -t /target
如果文件名中有空格,请添加选项-print0
并-0
按照其中一条评论中的建议进行操作:
find -name "*.csv" -print0 | xargs -0 cp --parents -t /target