Answers:
尝试:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
grep远远超过了-name参数to中使用的简单外壳模式find。 xargs还比的-exec参数强大find。
我尝试了Mike建议的命令:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
但最终将所有文件转储到目录中dst,而它们的相对路径也丢失了。
为了保持相对路径,需要将此命令修改为:
find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
dst。如果不是这样,请使用cp --parents。另外,请务必引用文件名。因此:(... | xargs -i cp --parents "{}" dst请注意,到的最后一个参数cp现在“仅”是目标目录)。使用-t标志:可以使命令更短(并且可能更快)... | xargs cp --parents -t dst。
... | xargs cp {} --parents -t dst.
这样做的另一种方式是这样的:
find src/ -type f -name "*.so" -exec cp {} dst/ \;
cp过程:... -exec cp -t dst/ {} +。
-exec时;,一次{}替换为一条路径。cp每个文件都有一个单独的名称。使用+语法find替换{}多个结果(最多由系统定义的命令行长度限制;限制:{}必须是之前的最后一件事+,因此cp -t)。创建和终止过程是相对昂贵的事情。因此,+每当您期望获得许多结果时,最好使用它。在这种情况下,复制大量文件可能会花费大量时间,因此差异可能会被忽略。不过,这是个好习惯。
find可以进行模式匹配并执行命令。有没有必要管其输出:find src/ -type f -name '*.so' -exec cp '{}' dst/ ';'