I must remove 200 000 files (all of them) from a folder, and I don't want to delete the folder itself.

using rm, I get an "Argument list too long" error. I've tried to do something with xargs, but I'm not a Shell Guy, so it doesn't work:

find -name * | xargs rm -f
  • 5
    Why don't delete the folder and recreate it after deletion?
    – garconcn
    Sep 27, 2011 at 2:28
  • @garconcn Just reading this 9 years later. I don't remember why I had this problem in the first place, but I would guess either I didn't provide the full context to make the question readable, or... that's was a good idea.
    – FMaz008
    Jan 1, 2021 at 15:16

5 Answers 5

$ find /path/to/folder -type f -delete
  • 15
    It's probably worth mentioning that GNU find (as used by most Linux distributions) can delete files on its own using -delete. This also avoids problems with files containing quotes or newline characters (though you could use GNU find's -print0 and GNU xarg's -0 options to fix that).
    – DerfK
    Sep 26, 2011 at 16:22
  • 3
    @DerfK, nice remark! Also, lots of ppl tend to play with xargs meanwhile find has -exec command {} + syntax.
    – poige
    Sep 26, 2011 at 17:16

You are doing everything right. It is the '*' that gives you a problem (the shell is expanding it into list of files instead of the find). The right syntax could be:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(The latter is a bit less efficient since it will pass longer names to xargs, but you will hardly notice :-) )

Alternatively, you could escape your '*' like this (however in that case it will also try also remove "." and ".."; it is not a biggie - you will just get a little warning :-) ):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

If your file names contain spaces then use this:

find . -type f -print0 | xargs -0 rm -f
  • 1
    This doesn't work if you have a filename containing a space.
    – user9517
    Sep 26, 2011 at 16:25
  • @lain: Yes, I was just in a process of editing my answer to include the trick for white spaces :-)
    – dtoubelis
    Sep 26, 2011 at 16:29

The following command will delete all files from the current directory:

find . -type f -exec rm {} \;
  • 2
    -name '*' doesn't mean "all files". Files are said with: -type f
    – poige
    Sep 26, 2011 at 17:09

you can try

find /path/to/folder -type f -print0  | xargs -0 rm -f


find /path/to/folder -type f -exec rm -f "{}" +

Kudos to quantas answer, here are some additions.

If you like to delete files with a particular name pattern you can write it like this. Also added -print so you can see what's happening as the files are being deleted.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

This for instance deletes all jpegs in mydirectory.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.