Argument list too long问题的解决方法

rm、cp、mv是unix下面常用到的档案处理指令,譬如我们需要移除不必要的档案通常会使用rm xxx来删除,如果档案数目眾多且命名具有规则,eg. file1.log、file2.log、file3.log等,為求方便则会利用万用字元来处理,eg. rm -f *.log,但是当这些指令后面所处理档案数量多到某种程度时,就会出现/bin/rm: Argument list too long这个错误讯息。

往往在我们执行一些程式时,系统会產生大量的log或者是不必要的暂存档(有时候是程式出错的悲剧@@),但是如果在删除时遇到这种错误,往往会很呕,这表示又要写一些code来处理这些garbage,所以在网路上面查了一下,目前最常看到的解决方法是用xargs来处理,方式如下:

1
find . -name '*.log' | xargs rm

另外,在对岸的同胞上的网誌上面也看到不用xargs的解法:

1
find /var/spool/mqueue -type f -exec rm {} \;

/var/spool/mqueue是要删除档案的存放资料夹,type -f指的是一般档案,{}的后方可以接其他参数,所以如果指令后方要加入多个参数的话,例如copy 档案 到B资料夹的时候,就可以透过以下指令来做:

1
find /var/spool/mqueue -type f -exec cp {} ../backup \;