cp:从所有子目录复制所有具有特定扩展名的文件

在unix下,我想从所有子目录复制所有具有特定扩展名(所有excel文件)的文件到另一个目录。 我有以下命令:

cp --parents `find -name \*.xls*` /target_directory/ 

这个命令的问题是:

  • 它也复制目录结构,我只想要这些文件(因此所有文件都应该在/ target_directory /中)

  • 它不会复制文件中的空格(这是很多)

任何解决这些问题的方法? 非常感谢!!

--parents正在复制目录结构,所以你应该摆脱这一点。

你写这个的方法, find执行,输出放到命令行中,这样cp就不能区分分隔文件名的空格和文件名中的空格。 最好做一些类似的事情

 $ find . -name \*.xls -exec cp {} newDir \; 

在其中为每个find查找的文件名执行cp ,并正确传递文件名。 这里有更多关于这种技术的信息 。

而不是所有上面的,你可以使用zsh ,只需input

 $ cp **/*.xls target_directory 

zsh可以扩展通配符以包含子目录,并使这种事情变得非常简单。

从以上所有,我想出了这个版本。 这个版本也适用于我在mac恢复terminal。

 find ./ -name '*.xsl' -exec cp -prv '{}' '/path/to/targetDir/' ';' 

它将在当前目录中recursion地查看所有子目录中带有xsl扩展名的文件。 它会将它们全部复制到目标目录。

CP标志是:

  • p – 保留文件的属性
  • r – recursion
  • v – 详细(显示你正在复制什么)

我有一个类似的问题。 我解决了它使用:

 find dir_name '*.mp3' -exec cp -vuni '{}' "../dest_dir" ";" 

'{}'";" 在每个文件上执行复制。