如何在Linux中同时运行find和cp命令?

时间:2016-11-03 02:22:49

标签: linux shell find xargs

如何同时运行findcp命令?我试过这个:

find -name "*pdf*" | xargs cp $1 ./

但它不起作用。

1 个答案:

答案 0 :(得分:2)

使用-exec选项:

find ./ -name "*pdf*" -exec cp -t . {} \+

{}将替换为正在处理的当前文件名。

来自find的手册页:

  

-exec command {} +

     

...通过在末尾附加每个选定的文件名来构建命令行。   命令行的构建方式与xargs构建命令行的方式大致相同。

请注意使用-t(目标目录)选项(这是一个GNU扩展)。我们不能使用-exec cp {} . +,因为匹配的文件名被附加到命令行的末尾,而目标必须最后指定。另一种解决方法是调用sh

find ./ -name "*pdf*" -exec sh -c 'cp "$@" .' '' {} +

我习惯性地逃脱了+角色。请注意,您应该转义find语法的特殊字符,以防止它们被shell扩展。特别是,在+之前可能不需要反斜杠,因为大多数shell会将其解释为字符串(它不会扩展为不同的东西)。但是,您肯定必须转义/引用;(将命令顺序应用于每个文件):

find -name "*pdf*" -exec cp -f {} . ';'