【优创比拼】Linux如何删除包含千万个文件的大目录
测试目录:/home/test
模拟写入3000万个空文件:
echo test{01..30000000} | xargs touch
结果把inode都给占满了:http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3OAZKrUAACYx2tvXMw914.jpg
耗时8分钟,就只创建了2200多万个空文件:http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3OAL3iRAAA2mdhgXNM877.jpg
接下来先说错误的删除方法
rm -rf *.*http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3OAUXuMAAA8H60_QIc124.jpg
可以看到压根就没删掉
ls | xargs rm -rfhttp://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3SARQolAAA0qN2-4JI819.jpg
提示内存已被耗尽
正确的删除方式:
1.直接删除父目录(速度:很慢)
# rm -rf test/http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3WAEKPDAABFEimS3k8511.jpg
耗时39分钟
2.使用find命令配合 -delete 选项(速度:最慢!)http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3WAKMThAAA0WzbipZU211.jpg
由于是空文件,这里使用-empty选项,实际应用场景应该使用-size 选项来指定文件大小进行删除
最快最推荐的方法(速度:极快):
创建一个空文件夹,使用rsync -a --delete选项,将空文件夹内容与目标文件夹进行同步http://cdn.u1.huluxia.com/g4/M03/15/23/rBAAdl8_Q3WAVCG3AABRAHy4R30417.jpg
总结
rsync是最快的方法,当然如果会使用Perl的话,还可以更快,但是并不是所有人都会,所以介绍一个最容易上手的方法。
本不想介绍rm 和 find 这两种方法(即慢又不实用),但是为了严谨的告诉大家rsync比较好,所以就都贴上测试图片啦。
页:
[1]