How to remove many (200 000) files?
Solution 1
$ find /path/to/folder -type f -delete
Solution 2
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
Solution 3
The following command will delete all files from the current directory:
find . -type f -exec rm {} \;
Solution 4
you can try
find /path/to/folder -type f -print0 | xargs -0 rm -f
or
find /path/to/folder -type f -exec rm -f "{}" +
Solution 5
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.
Related videos on Youtube
FMaz008
Updated on September 18, 2022Comments
-
FMaz008 almost 2 years
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
-
eatyourpeas over 12 yearsWhy don't delete the folder and recreate it after deletion?
-
FMaz008 over 3 years@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.
-
-
DerfK almost 13 yearsIt'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). -
user9517 almost 13 yearsThis doesn't work if you have a filename containing a space.
-
dtoubelis almost 13 years@lain: Yes, I was just in a process of editing my answer to include the trick for white spaces :-)
-
poige almost 13 years
-name '*'
doesn't mean "all files". Files are said with:-type f
-
poige almost 13 years@DerfK, nice remark! Also, lots of ppl tend to play with
xargs
meanwhilefind
has-exec command {} +
syntax.