这个问题已经被广泛讨论过了,但是我找不到一个能帮助我的解决方案。
我试图有选择地将文件从目录树复制到特定的文件夹中。在阅读了一些问答之后,下面是我尝试过的:
cp `find . -name "*.pdf" -type f` ../collect/我位于正确的父目录中,并且确实有一个collect目录,在上面的一个级别。现在我得到了错误:cp:无效选项- 'o'
出什么问题了?
发布于 2014-09-17 04:12:39
要处理难以处理的文件名:
find . -name "*.pdf" -type f -exec cp {} ../collect/ \;默认情况下,find将打印它找到的文件名。如果使用-exec选项,则它将将文件名传递给您选择的命令,在本例中是一个cp命令,它被写入如下:
cp {} ../collect/ \;{}告诉find在哪里插入文件名。给-exec的命令的末尾用分号标记。通常,贝壳会吃掉分号。因此,我们用反斜杠转义分号,以便将其作为参数传递给find命令。
因为find直接将文件名给cp,而不受shell的干扰,所以这种方法甚至适用于最困难的文件名。
更有效率
上面的代码对找到的每个文件都运行cp。如果有许多文件,就会启动大量的进程。如果您有GNU工具,则可以避免如下所示:
find . -name '*.pdf' -type f -exec cp -t ../collect {} +在该命令的这个变体中,find将为每次调用cp提供许多文件名,这可能会大大减少需要启动的进程数量。
https://stackoverflow.com/questions/25881926
复制相似问题