Skip to content


How to resolve the '/bin/rm: Argument list too long' error

Linux

root@dwarf /var/spool/clientmqueue # rm spam-*
/bin/rm: Argument list too long.

Ever seen this error in Linux when you have too many files in a directory and you are unable to delete them with a simple rm -rf *? I have run into this problem a number of times. After doing a bit of research online I came across a neat solution to work around this issue.

find . -name 'spam-*' | xargs rm

In the above instance the command will forcefully delete all files in the current directory that begin with spam-. You can replace the spam-* with anything you like. You can also replace it with just a * if you want to remove all files in the folder.

find . -name '*' | xargs rm

We have covered the Linux find command in great detail earlier. Xargs is Linux command that makes passing a number of arguments to a command easier.

Posted in Linux.


Get Simple Help tutorials just like this one in your email inbox every day - for free! Just enter your email address below:

 

You can always opt out of this email subscription at any time.

11 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. Aleš Friedl says

    Safe variant for filenames with spaces, new lines and other whitespace characters:
    find . -name ‘*’ -print0 | xargs -o rm

  2. MikeT says

    Good catch using the print0 option, that’s an important one.

    Most find commands do not require the “-name” predicate. What’s usually more important is to make sure you’re deleting *files* and not something else you might not have intended. For this use “-type f” inplace of the “-name” option….

    find . -type f -print0 | xargs -0 /bin/rm

    A) Use the full path to the ‘rm’ command so your aliases don’t muck with things.
    B) Check your xargs command, you can sometimes, if needed, tell it to use one “result” at a time, such as (if you didn’t use print0 but regular print) “-l1″

  3. myhnet says

    find . -type f -exec rm {} \;

  4. Thomas Hutton says

    Thanks, saved my rear!

  5. Michael says

    Thanks for your help!

    But what if you have a dash (-) in the file names? It causes the output to say rm: missing operand. (there are too many files to delete without using the find command method).

  6. Kevin Polley says

    Big thanks – find . -type f -print0 | xargs -0 /bin/rm saved the day for me with an overflowing pop acct

  7. redesigned says

    ls | xargs rm

    (works even for those shared hosts that block access to find, like nexus)

  8. Компьютерная барахолка says

    из консоли ls -l /usr/local/vpopmail/domains/oldcomp.ru/abuse/Maildir/cur/ | awk ‘{print “rm /usr/local/vpopmail/domains/oldcomp.ru/abuse/Maildir/cur/”$9}’ | /bin/sh

    удаляет все !!!

  9. Francesco says

    After running find . -name ‘*’ -print0 | xargs -o rm

    xargs: invalid option — o

  10. Francesco says

    Sorry for double post.

    Also, I get the same error I was trying to overcome using the plain rm command:

    find . -maxdepth 1 -type f -name ‘cache_*’ -print0 | xargs rm

    result:

    xargs: argument line too long

Continuing the Discussion

  1. Ranjeesh loves to share » Blog Archive » sendmail service queue clearing and ORA-24247 error fix using instructions to add ACL info. linked to this post on January 19, 2011

    [...] limitations of rm command to have a length of arguments as a max of 1024. The alternate command (reference) to delete all the 181k files is “find . -name ‘*’ | xargs rm”. This deletes all [...]



Some HTML is OK

or, reply to this post via trackback.