On Oct 18, 2008, at 8:13 PM, mouss wrote:
Jussi Hirvi a écrit :
Since when is there a limit in how long directory listings CentOS can show (ls), or how large directories can be removed (rm). It is really annoying to say, for example
rm -rf /var/amavis/tmp
and get only "argument list too long" as feedback.
I doubt this. "argument list too long" is a shell error, and in your command the shell doesn't see many arguments.
I guess you want to remove amavisd-new temp files and you did rm -rf /var/amavis/tmp/*
In this case, the shell would need to replace that with rm -rf /var/amavis/tmp/foo1 /var/amavis/tmp/foo2 .... in which case, it needs to store these arguments in memory. so it would need to allocate enough memory for all these before passing them to the rm command. so a limitation is necessary to avoid consuming all your memory. This limitation exists on all unix systems that I have seen.
Is there a way to go round this problem?
Since amavisd-new temp files have no spaces in them, you can do for f in in /var/amavis/tmp/*; do rm -rf $f; done (Here, the shell does the loop, so doesn't need to expand the list at once).
alternatively, you could remove the whole directory (rm -rf /var/amavis/tmp) and recreate it (don't forget to reset the owner and permisions).
I have CentOS 5.2.
Possible to learn something new every day. I would have expected the for loop to fail too, thinking it would attempt to expand the wildcard before starting it's iteration.