快速删除大量小文件

由于bash会展开例如 rm aa/* 这样的命令 如果后面的文件太多就会报参数太长, 所以有时候删除大量小文件就不适合用rm了
可以使用find先查找在删除 就不会出现上面那种报错问题, 可是还有一个问题文件太多的话 -exec rm {} ; 完全没有效率, 一两个小时估计也就只能删除几十万的文件
对于需要删除百万为单位的文件数来说 这就等于蜗牛爬
搜索后发现 可以使用另一个find的参数 -delete 网上有人开玩笑说这个比-exec 快1000倍
虽然这个有些夸张了 但是快10-100倍还是有的 删除200W的文件 大概需要40几分钟

网上还有一个方案, (个人觉得不太适合)
建立一个空目录, 利用rsync同步这个空目录到需要删除的目录, 这样就可以删除掉目录下的文件, 感觉这样的操作和直接rm -rf /path 效果差不多
只是后者把目录删了, 前者是否会改变文件存储的inode号待测试.

这里的需求主要是只删除文件夹内部分文件, 而不是清空文件夹/删除文件夹

推荐的命令 find /path/to/delete -type f -name "test-log*" -mtime +10 -delete

先推荐一本书: <<unix痛恨者手册>>
这本书内容不多 几个小时就可以看完, 里面介绍的有些内容现在已经处理过了, 还是可以推荐看下
另外一本 大教堂与小集市 也可以推荐看下

posted @ 2017-06-18 17:52  mikeguan  阅读(3942)  评论(0编辑  收藏  举报