目錄裡面的檔案太多,要砍掉會遇到下述問題:
- rm -f *
-bash: /bin/rm: Argument list too long
這個問題此篇已經有解法:檔案數太多砍不掉該怎麼辦
不過還是要砍很久,要怎麼辦呢?(通常遇到這種時,都要砍個半天以上)
Linux 快速清除「檔案數量太多」的速度比較
此篇文章有把砍大量檔案的方法與花費時間做個測試紀錄,可以參考看看。
先看結論,最快的是這種方法:perl -e 'for(<*>){((stat)[9]<(unlink))}'
下述摘錄自此篇:Which is the fastest method to delete files in Linux
- RM Command Is not capable of deleting large number of files
$ time rm -f *
-bash: /bin/rm: Argument list too long
real 0m11.126s
user 0m9.673s
sys 0m1.278s - Find Command with -exec 14 Minutes for half a million files
$ time find ./ -type f -exec rm {} \;
real 14m51.735s
user 2m24.330s
sys 9m48.743s - Find Command with -delete 5 Minutes for half a million files
$ time find ./ -type f -delete
real 5m11.937s
user 0m1.259s
sys 0m28.441s - Perl 1 Minute for half a million files
$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
real 1m0.488s
user 0m7.023s
sys 0m27.403s - RSYNC with -delete 2 Minute 56 seconds for half a million files
$ time rsync -a --delete blanktest/ test/
real 2m52.502s
user 0m2.772s
sys 0m32.649s - Hank 大大補充:find ./ -type f | xargs rm -f 速度比 "find ./ -type f -exec rm {} \;" 快10倍,跟 perl 那招的速度差不多(比較慢一點),不過可以加上 cmin .. 等等,彈性比較大
- cktsai 補充:xargs -P8 可以用8個處理器來一起平行做事情(看你的機器多大;有的也許20個核心)。 一般來說 可以用 xargs -I {} -P8 rm -f {} 來確保 {} 是放對了檔案的argument位子。
- find . -type f -print0 | xargs -0 -I {} rm -f {}