假设一个目录下有很多很多".bak"文件,如果我们直接用rm
命令删除:
rm *.bak
会爆出错误:
zsh: argument list too long: rm
这是因为*.bak
会展开为所有实际的文件列表接在rm
后面,这样命令就会超过命令行的最大长度。我们可以采取备选方法:
find . -type f -name '*.bak' | xargs rm
在搜索的过程中,还发现一个更简单的方法:
find . -type f -name '*.bak' --delete
如何查看命令行最大长度:
$ getconf ARG_MAX
2097152
但实际应该到不了 2097152。xargs --show-limits
的 131072 的缓冲区限制看上去更真实一点。
$ xargs --show-limits
Your environment variables take up 3443 bytes
POSIX upper limit on argument length (this system): 2091661
POSIX smallest allowable upper limit on argument length (all systems): 4096
Maximum length of command we could actually use: 2088218
Size of command buffer we are actually using: 131072
Maximum parallelism (--max-procs must be no greater): 2147483647
Q. E. D.