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