Bash rm删除大量文件时报错:Argument list too long
1. 现象
Linux删除或者ls大量文件时报错:
- snippet.bash
[root@test-2 0]# ls tmp/* -bash: /bin/ls: Argument list too long [root@test-2 0]# rm -f tmp/* -bash: /bin/ls: Argument list too long
2. 原因
如果待删除文件中包含的小文件数量过多,通常是由于受到shell参数个数限制所致。
这个是Linux系统存在的限制,可以通过如下指令查看该参数值的配置:
- snippet.bash
[root@test-2 0]# getconf ARG_MAX 2097152
3. 解决办法
使用 awk 删除
可使用 awk 一次删除一个的方式进行删除。但必须先进入该目录下。
cd tmp ls -l | awk '{ print "rm -f ",$9}' | sh
结合 xargs 删除
通过 ls 来配合 xargs 删除 test 目录下的所有文件:
- snippet.bash
ls /usr/local/tests/ | xargs rm -r
结合 find 删除
通过 find 来完成,更加安全智能,支持的参数更多。
可以先使用 ls 命令列出需要删除的文件看是否正确,然后再执行删除命令。例如,通过如下指令,删除 test 目录下的 png 文件:
- snippet.bash
find /usr/local/tests/ -name "*.png" | xargs rm -r
打赏作者以资鼓励: