如何按文件类型递归查找文件并在ssh中将它们复制到目录?

lor*_*ess 46 linux bash centos

我想找到pdf一个文件夹中的所有文件.它包含pdf内部文件和更多包含更多内容的目录.该文件夹位于我有ssh访问权限的远程服务器上.我正在使用mac终端,但我相信我连接的服务器是Centos.

我需要找到所有的pdfs并将它们全部复制到远程服务器上的一个目录中.我已经尝试了大约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
Run Code Online (Sandbox Code Playgroud)

这是我尝试的最后一个,我想我现在可以忽略权限被拒绝的错误,但我不确定其余的.

Pau*_*eau 121

试试这个:

find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \;
Run Code Online (Sandbox Code Playgroud)

  • 作为exec命令的一部分,`\;`是做什么的? (3认同)
  • @user3728501 它终止 exec 表达式 (2认同)
  • 我会默认使用 `-iname` 而不是 `-name`,因为文件扩展名可能有大写字母。 (2认同)

小智 6

Paul Dardeau 的回答是完美的,唯一的问题是,如果这些文件夹中的所有文件都不是 PDF 文件,并且无论扩展名如何,您都想全部获取怎么办。那么只需将其更改为

find . -name "*.*" -type f -exec cp {} ./pdfsfolder \;
Run Code Online (Sandbox Code Playgroud)

简单总结一下!


pti*_*rno 5

像这样的事情应该有效。

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

  • @user3728501 http://stackoverflow.com/questions/20913198/why-are-the-backslash-and-semicolon-required-with-the-find-commands-exec-optio (3认同)