这里说的 "海量" 并不是指体积大, 而是指数量, 比如一个目录下有数百万个小文件.
最近在优化服务器时发现 postfix 下的 maildrop 目录和 clientmqueue 目录下发现有大量的文件, 进入这些目录里使用 ls 命令是愚蠢的做法, 而直接执行 rm *, 没有任何反应, 文件数量也没有减少, 也就是说, 在海量文件目录里直接使用 rm 命令进行删除是无效的.
那么正确的方法是什么呢? 有两种方法可选:
第一种:
find /path/to/directory -type f -exec rm {} \;
第二种:
ls -1 /path/to/directory | xargs -I{} rm {}
上面这两种方法可以成功的删除海量文件, 速度也很快. 但还有一种更好的方法, 比如要删除上面提到的 clientmqueue 目录, 里面全部是一个一个的邮件, 用下面的方法:
- service sendmail stop
- cd /var/spool
- mv clientmqueue clientmqueue-todelete
- mkdir clientmqueue
- chown --reference=clientmqueue-todelete clientmqueue
- chmod --reference=clientmqueue-todelete clientmqueue
- service sendmail start
- rm -rf clientmqueue-todelete
上面的方法是将目录重命名, 然后使用了 --reference 引用参数来重建目录, 然后删除重命名的目录. 直接删除目录的方法速度是十分的快. 也可以留着备份不删. 更安全.
来源: http://www.webhek.com/post/how-to-delete-huge-number-of-files.html