Linux 下/bin/rm: Argument list too long 解决方法(最全)

本文将会通过不同方法来解决在Linux命令行下通过rm命令删除大批量文件的时候遇到的“Argument list too long”的问题。 因为linux命令对传入的参数个数有限制,所以超过限制的时候,系统就会输出参数过长的问题。

查看命令行参数允许的长度大小

执行命令如下:

#getconf ARG_MAX

命令输出如下:

root@devops:~# getconf ARG_MAX
2097152

通过AWK命令结合RM命令来删除大批量文件

当通过rm命令直接删除大批量文件的时候,系统会报错,那么可以将rm命令结合AWK命令来进行删除操作,避免“/bin/rm: Argument list too long”的问题。

例如要删除当前目录下所有文件,执行下面命令:

# ls -l |awk '{print "rm -rf" , $9}'| sh

命令输出如下:

root@devops:~/osetc# ls -l
总用量 24
-rw-r--r-- 1 root root 24202 3月  18 23:30 fio1.txt
-rw-r--r-- 1 root root     0 3月  24 23:53 fio.txt

root@devops:~/osetc# ls -l |awk '{print "rm -rf" , $9}'| sh
root@devops:~/osetc# ls -l
总用量 0

通过xargs命令结合rm命令删除大批量文件

我们可以通过执行ls命令将要删除命令列出,并将其输出通过管道符传给xargs命令,然后再调用rm命令来删除传过来的文件,进而解决 “/bin/rm: Argument list too long”的问题。执行命令如下:

# ls | xargs rm -rf

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio.txt
root@devops:~/osetc# ls | xargs rm -rf
root@devops:~/osetc# ls

通过find命令结合xargs命令来删除大批量文件

我们也可以通过find命令查找要删除的文件,然后将查找到的文件传给xargs命令,并通过rm命令删除,这样也可以解决“/bin/rm: Argument list too long”的问题。

执行下面的命令:

# find ./ -name "*.txt" | xargs rm -rf

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio.txt

root@devops:~/osetc# find ./ -name "*.txt" | xargs rm -rf
root@devops:~/osetc# ls
root@devops:~/osetc#

通过自定义shell脚本来删除大批量文件

我们也可以通过自己编写一个shell 脚本来实现大批量文件的删除,比如通过for循环来删除每个文件,这也就可避免““/bin/rm: Argument list too long”的问题。

要执行的脚本如下:

#!/bin/bash

DIR='/root/osetc'  # 指定要删除的文件的目录
cd $DIR   # 切换目录到指定删除文件的目录
for I in `ls`
do      #将ls命令的输出传给for循环
    rm -rf $I
done

命令输出如下:

root@devops:~/osetc# ls
fio1.txt  fio.txt

root@devops:~# vi delF.sh

root@devops:~# chmod u+x delF.sh

root@devops:~# ./delF.sh

root@devops:~# ls /root/osetc/
root@devops:~#

99%的人还阅读了:

Leave a Reply