Wednesday, March 26, 2008, 05:35 PM - Linux
Posted by Administrator
Quick Linux Tip:Posted by Administrator
If you're trying to delete a very large number of files at one time (I deleted a directory with 485,000+ today), you will probably run into this error:
/bin/rm: Argument list too long.
The problem is that when you type something like "rm -rf *", the "*" is replaced with a list of every matching file, like "rm -rf file1 file2 file3 file4" and so on. There is a reletively small buffer of memory allocated to storing this list of arguments and if it is filled up, the shell will not execute the program.
To get around this problem, a lot of people will use the find command to find every file and pass them one-by-one to the "rm" command like this:
find . -type f -exec rm -v {} \;
My problem is that I needed to delete 500,000 files and it was taking way too long.
I stumbled upon a much faster way of deleting files - the "find" command has a "-delete" flag built right in! Here's what I ended up using:
find . -type f -delete
Using this method, I was deleting files at a rate of about 2000 files/second - much faster!
You can also show the filenames as you're deleting them:
find . -type d -print -delete
...or even show how many files will be deleted, then time how long it takes to delete them:
root@devel# ls -1 | wc -l && time find . -type f -delete
8532
real 0m3.660s
user 0m0.036s
sys 0m0.552s




( 2.9 / 76 )



Calendar



