如何递归查找指定类型的文件并将它们复制到一个目录中?

65

我想在一个文件夹中找到所有的 pdf 文件。其中包含有 pdf 文件以及更多包含文件夹的目录。该文件夹位于我可以通过ssh访问的远程服务器上。我正在使用mac终端,但我相信我连接到的服务器是Centos。

我需要找到所有的pdf并将它们复制到远程服务器上的一个目录中。我已经尝试了大约10种变化但没有成功。我的系统和远程系统似乎都不认识-exec作为一个命令,尽管exec是可以的,所以这是个问题。

我不确定问题出在哪里,但这个命令并没有失败,它只是一直停在那里,所以我没有任何有用的错误信息可以发布。

cp $(find -name "*.pdf" -type f; exec ./pdfsfolder {} \; | sed 1q)

find: ./tcs/u25: Permission denied
find: ./tcs/u68: Permission denied
-bash: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: is a directory
-bash: exec: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: cannot execute: Success
cp: target `./runaways_parents_guide_2013_final.pdf' is not a directory

这是我尝试的最后一个,我认为现在可以忽略权限被拒绝的错误,但我对其他部分不确定。

3个回答

152

试试这个:

find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \;

1
谢谢,它在那里放了一段时间,但我认为这可能与权限错误有关。 - lorless
2
@user3728501 它终止了执行表达式。 - Paul Dardeau
4
我会选择使用-iname而不是-name,因为文件扩展名可能包含大写字母。 - Martin R.

8
保罗·达多的回答非常完美,唯一的问题是,如果这些文件夹中的所有文件都不是PDF文件,而您希望获取所有文件,无论扩展名如何。那么只需将其更改为:
find . -name "*.*" -type f -exec cp {} ./pdfsfolder \;

只是简单概括一下!

5

以下内容应该能够解决问题。

ssh user@ip.addr 'find -type f -name "*.pdf" -exec cp {} ./pdfsfolder \;'

这个命令可以在远程服务器上查找所有扩展名为.pdf的文件,并将它们复制到本地的pdfsfolder目录中。

3
为什么在使用find命令的-exec选项时需要反斜杠和分号? - ptierno

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接