有问题[查找并删除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