2013-03-25 138 views
50

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

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

这个命令的问题是:

  • 它复制的目录结构,以及,我只希望这些文件(这样所有文件都应该在结束了/目标目录/)

  • 它不会复制名带有空格的文件(这是不少)

针对这些问题的任何解决方案?

+0

find'exec mv'怎么样? – fedorqui 2013-03-25 14:10:14

回答

86

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

你写这样的方式,find执行,并且输出被放置到命令行这样cp不能空格分开的文件名和空间的文件名进行区分。这是更好地做类似

$ find . -name \*.xls -exec cp {} newDir \; 
其中 cp为每个文件名是 find发现执行,正确传递文件名

Here's more info关于这项技术。

而不是所有上述情况,你可以使用zsh和简单的输入

$ cp **/*.xls target_directory 

zsh可扩展通配符包含子目录,并让这样的事情很容易。

+0

对不起,我的bash文盲,但你是什么意思的“斌”? – Abdel 2013-03-25 14:11:40

+0

投入垃圾桶。 – bmargulies 2013-03-25 14:12:15

+1

是的。 'bin it'意味着把它扔掉。现在修改:-) – 2013-03-25 14:12:45

5

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

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

'{}'";"执行上的每个文件的副本。

11

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

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

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

CP标志是:

  • p - 保存文件的属性
  • 的R - 递归
  • v - 详细(显示你什么 被复制)
+1

这与我在SSH进入Bluehost时所做的相同。 – Plummer 2016-12-01 19:13:30

1

我也有自己做这个。我是通过cp的--parents参数完成的:

find SOURCEPATH -name filename*.txt -exec cp --parents {} DESTPATH \; 
相关问题