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

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

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

但它不起作用。

使用-exec选项:

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

用正在处理的当前文件名替换{}

从手册页find

-exec command {} +

…命令行是通过在每个选定的文件名后面添加命令来构建的。命令行的构建方式与xargs构建其命令行的方式大致相同。

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

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

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

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