linuxunixcommand-line-arguments

Argument list too long error for rm, cp, mv commands


I have several hundred PDFs under a directory in UNIX. The names of the PDFs are really long (approx. 60 chars).

When I try to delete all PDFs together using the following command:

rm -f *.pdf

I get the following error:

/bin/rm: cannot execute [Argument list too long]

What is the solution to this error? Does this error occur for mv and cp commands as well? If yes, how to solve for these commands?


Solution

  • The reason this occurs is because bash actually expands the asterisk to every matching file, producing a very long command line.

    Try this:

    find . -name "*.pdf" -print0 | xargs -0 rm
    

    Warning: this is a recursive search and will find (and delete) files in subdirectories as well. Tack on -f to the rm command only if you are sure you don't want confirmation.

    You can do the following to make the command non-recursive:

    find . -maxdepth 1 -name "*.pdf" -print0 | xargs -0 rm
    

    Another option is to use find's -delete flag:

    find . -name "*.pdf" -delete