I have a folder with 266778 subfolders. How can I delete it?
I have tried
cd ~/.local/share/Trash/ sudo rm -rf *
but it takes much time. After 1 minute 25 seconds real time and 0.072 seconds user time it only deleted 2500 folders. This way, it will take over two hours to delete this folder.
Is there a faster way to delete this folder? Why is there such a big difference between user time and real time?
real 1m25.474s user 0m0.072s sys 0m28.142s
I use Linux 2.6.32 (Ubuntu 10.04.4 LTS).
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
It depends on your definition of fast. The answers already here give a good solution for actually removing the directories from the filesystem, but if what you really need is to free the directory name as fast as possible, a rename on the same filesystem is instantaneous:
{ mv directory directory.gone && rm -rf directory.gone; } &
Technically this is cheating since I haven’t sped up the actual deletion, but practically it’s very useful: I use this trick all the time so I don’t have to wait for slow deletion operations.
Method 2
If your version of “find” implements the -delete sub-command, then you can try
find directory -delete
In this case:
find ~/.local/share/Trash/ -delete
Some commands, like rm, perform most of their work in the kernel. In the file-system routines, to be exact. Time spent performing system calls are accounted for in that way, so whilst your “rm” command runs for a long time, it doesn’t do much work in user-land – the system calls performs most of the work.
Method 3
rm -rf directory or rm -rf * of course is the fastest method unless your local rm implementation is broken.
Using find gives no advantages.
Whether this is fast or slow mainly depends on the filesystem and OS implementation. So the question seems to be inappropriate.
UFS and ZFS on Solaris are known to be very fast with this kind of task as both filesystem implementations include delayed background delete code that causes the unlink() and rmdir() calls to return fast even when the related object will take more time in total.
With the delayed background delete in the kernel, the directory updates can be done fast as well and this help to speed up the whole operation.
Method 4
This is only a partial answer, sheding light on the three values the command returns; quoted from the time(1) manpage:
(i) the elapsed real time between invocation and termination, (ii) the user CPU time (the sum of the
tms_utimeandtms_cutimevalues in astruct tmsas returned bytimes(2)), and (iii) the system CPU time (the sum of thetms_stimeandtms_cstimevalues in astruct tmsas returned bytimes(2)).”
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0