我如何同时运行find
和cp
命令? 我试过这个:
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 {} . ';'