这是更快吗:
find /tmp -name core -type f | xargs /bin/rm -f
比这样做:
find /tmp -name core -type f -exec /bin/rm -f {} \;
那么使用会xargs
提高整体速度吗?
(我从 的手册页中获取了示例xargs
。)
答案1
正如马特已经说过的,在一般情况下,你应该意识到这样一个事实:每一个byte 可以出现在文件名中,但NUL
字符(因为它分隔字符串的结尾)和 the /
(因为它分隔路径元素)除外。所以你的xargs
例子应该是(在GNU系统上)
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
等效项是-exec
find 中的 a,但用 a+
代替\;
。
find /tmp -name core -type f -exec /bin/rm -f {} +
此版本并不调用/bin/rm
每个文件,而是捆绑参数,就像xargs
以前一样。
答案2
第一个版本可能比第二个版本更快:xargs
一次将多个文件传递给rm
,但每个文件find
调用一次。rm
因此第一个版本可以减少 fork/exec 调用。
(如果只有一个匹配项或根本没有匹配项,则第二个版本可能会更快:无需自行执行xargs
。)
但我认为这不是选择其中之一的好标准。在这种特定情况下,您不必担心奇怪的文件名,但一般来说您应该担心。第二个版本更安全,因此通常应该使用它。