/bin/rm: Argument list too long
This post was published 5 years 4 months 15 days ago which may make its actuality or expire date not be valid anymore. This site is not responsible for any misunderstanding.While at work, I had a customer ask me how to, one time, delete all the mail in his /home/[account-name]/mail/cur directory.
So, first off, I wanted him to just take a look at that directory, get to know it (figuratively speaking). So I had him run the du command on it; wow, you wouldn’t imaging how much mail was in there!
The actual command I had him run was:
cd /home/[account-name]/mail/cur du -h ./ |
The output was 1.3GB. Yes, that’s right, he had 1.3GB of mail files. Some people are unaware of what exactly the difference is between the /new directory and the /cur. The difference is simply that the /cur directory is full of email messages that the user has already viewed somehow, whether by webmail, Outlook, Thunderbird, etc, they have viewed it, and the mail is now officially not exactly new. The /new directory is a directory that has mail that has not yet been opened by the user yet.
So, the customer asked me a simple question, “How do I go about just deleting this data?”. From a user’s point of view, the command would be:
cd /home/[account-name]/mail/cur rm -r ./* |
Then the customer would have received the error: /bin/rm: Argument list too long. I have found a workaround though. I have asked a few people around what they use the find command for. All of there answers where pretty much the same, “They help you find files”. That’s all they could really tell me what find does. This isn’t all true. find can help us defeat the /bin/rm: Argument list too long error. So, I had the customer run the following:
cd /home/[account-name]/mail/cur find . -name '11*' -exec rm "{}" ; |
It worked for him, and it can work for you. Let me dissect this command real quick for you, so that you aren’t completely lost. find is the actual command, followed by a period; this means you are going to be searching the current directory (at this time /home/[account-name]/mail/cur). Next you supply the -name switch to tell the find command that you want the pattern (coming next) to match the name of the file. You then give it a search pattern, and in this case all his files started with eleven (11) and everything after that was different, so the pattern would be 11*; make sure the search pattern is in single quotes. Next you supply the -exec command, which will execute any Linux command you want (as long as it is installed on your system). In this case we used the rm command. The quoted curly braces tell it to run rm on each file that matches the pattern supplied. That’s it. Simple command turns to be a very helpful utility.
Hope this helps someone in the future, as I had to figure it out on my own.
January 11, 2007
Just commenting that I just removed 2.6 gigs from my own personal cur/ directory using the following command:
for f in *; do rm -rf $f; done
Just as an alternative to what you’ve posted.