从 find 到 xargs 或使用 find -exec + 传输的文件长度是否有限制

从 find 到 xargs 或使用 find -exec + 传输的文件长度是否有限制

有问题[查找并删除linux中所有名为“test”的目录] 在此站点上,最好的答案谈论的是使用这两个命令:

find . -name test -type d -print0|xargs -0 rm -r --
find . -name test -type d -exec rm -r {} +

因为他们会用列表目录,而不是单独调用它多次。

由于声誉较低,我无法在那里发表评论,因此我在这里提出一个新问题:

使用这些技术可以传递给 rm 的文件数量是否有任何限制(除了实际的系统资源界限)?

从 shell 中,像 'rm *' 这样的命令可以超出 shell 的最大命令行长度,但是这样的限制是否适用于 find + 的这种用法或通过管道到 xargs 的用法?

答案1

简而言之,不是的。

长答案: - Find 将针对每个匹配运行 exec 指定的命令,因此,如果您的 find 找到 20 个文件,它将运行 20 个单独的 rm 实例。 - xargs 将确定您的 shell 的最大命令长度,并在这些限制内添加参数,正如您在输出中看到的那样xargs --show-limits mtak@frisbee:~$ xargs --show-limits Your environment variables take up 4050 bytes POSIX upper limit on argument length (this system): 2091054 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2087004 Size of command buffer we are actually using: 131072

相关内容