首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归复制特定文件

递归复制特定文件
EN

Stack Overflow用户
提问于 2014-09-17 03:44:22
回答 1查看 1.7K关注 0票数 1

这个问题已经被广泛讨论过了,但是我找不到一个能帮助我的解决方案。

我试图有选择地将文件从目录树复制到特定的文件夹中。在阅读了一些问答之后,下面是我尝试过的:

代码语言:javascript
复制
cp `find . -name "*.pdf" -type f` ../collect/

我位于正确的父目录中,并且确实有一个collect目录,在上面的一个级别。现在我得到了错误:cp:无效选项- 'o'

出什么问题了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 04:12:39

要处理难以处理的文件名:

代码语言:javascript
复制
find . -name "*.pdf" -type f -exec cp {} ../collect/ \;

默认情况下,find将打印它找到的文件名。如果使用-exec选项,则它将将文件名传递给您选择的命令,在本例中是一个cp命令,它被写入如下:

代码语言:javascript
复制
cp {} ../collect/ \;

{}告诉find在哪里插入文件名。给-exec的命令的末尾用分号标记。通常,贝壳会吃掉分号。因此,我们用反斜杠转义分号,以便将其作为参数传递给find命令。

因为find直接将文件名给cp,而不受shell的干扰,所以这种方法甚至适用于最困难的文件名。

更有效率

上面的代码对找到的每个文件都运行cp。如果有许多文件,就会启动大量的进程。如果您有GNU工具,则可以避免如下所示:

代码语言:javascript
复制
find . -name '*.pdf' -type f -exec cp -t ../collect {} +

在该命令的这个变体中,find将为每次调用cp提供许多文件名,这可能会大大减少需要启动的进程数量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25881926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档