1、前言
Linux下删除一个目录下的文件如果过多的话,就会提示:Argument list too long
2、问题复现
[root@Laifu-Blog ~]#rm -rf laifu*
出现错误:
Argument list too long
3、分析
这是Linux的shell参数个数限制,该错误表示执行命令的参数太长,超过系统允许的最大值
这个值通过ARG_MAX变量获取,命令如下:
[root@Laifu-Blog ~]#getconf ARG_MAX
2097152
这个数值不同机器上的设置可能不同, 和系统也有关系。
4、问题解决
4.1 方案1 内核
修改ARG_MAX的值,这个值是没办法直接修改的,需要重新编译Linux内核,手动调整。
打开kernel source下面的include/linux/binfmts.h文件,找到如下行:
# define MAX_ARG_PAGES 32
将”32“改为更大的值,例如64或128,然后重新编译内核。
此种方法永久有效,可以彻底解决问题,但是比较复杂,推荐给高级用户使用,没有Linux经验的用户不建议用这种方法
4.2 方案2 xargs
ls | grep laifu* | xargs rm -f
为什么 xargs 就能执行成功呢?
因为 xargs 会把参数分批传递给 rm , 这样的话就没有了参数超限的问题了。