使用 xargs 比不使用它更快吗?

使用 xargs 比不使用它更快吗?

这是更快吗:

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

等效项是-execfind 中的 a,但用 a+代替\;

find /tmp -name core -type f -exec /bin/rm -f {} +

此版本并不调用/bin/rm每个文件,而是捆绑参数,就像xargs以前一样。

答案2

第一个版本可能比第二个版本更快:xargs一次将多个文件传递给rm,但每个文件find调用一次。rm

因此第一个版本可以减少 fork/exec 调用。

(如果只有一个匹配项或根本没有匹配项,则第二个版本可能会更快:无需自行执行xargs。)

但我认为这不是选择其中之一的好标准。在这种特定情况下,您不必担心奇怪的文件名,但一般来说您应该担心。第二个版本更安全,因此通常应该使用它。

相关内容