linux下删除大量文件的方法

来源:互联网 发布:macbook下软件好下吗 编辑:程序博客网 时间:2024/05/18 02:15

之前一次对大文件的操作,本想按照行数对文件进行切割,结果参数设置错误导致切割时候按照文件大小split,使得目标目录下面出现了超过700万个文件。

如此多的文件直接用ls或者rm根本就没有反应,而且还会卡死,只能通过关闭终端来终止运行。

在网络上找了许多方法来解决这个问题,结果都是因为文件数量实在太多而无法解决。不过好在当时用split切文件的时候其文件的命名有一定的规律,即都是a-z字母的组合,因此就根据这一特点,有针对性地来删除文件。


首先,因为文件数目过多,ls是没有办法有效得到所有目录的,因为ls会先遍历所有的文件名然后输出结果,这就需要很长的时间。

此时可以用到一下指令: 

ls [directory] -1 -f | head

它会输出的到最早读取的十个文件名,包括了.和..,因此有效的文件名是8个。


然后由于都是a-z字母的组合,因此截取得到的文件名的前几位字符串,在之后用for循环添加a-z字母来获得目录下可能出现的所有文件名名称,然后用rm来删除文件。文件名是确定的情况下,rm的效率还是有的。


这么做的速度不一定是最快的,但是比起rm *这种需要遍历所有文件然后删去已经快了许多。只要写一个shell script文件然它自己在后台运行就可以了。速度大概是10分钟删除10万个文件。根据目录下面文件的数量,应该要跑上12个小时左右吧,真是心累再见


贴上shell script文件

#! /bin/bashfor ((i=0;i<200;i++))do        echo $i        var=$(ls ./Data/ -1 -f | head)        echo $var        name1=${var:5:5}        for loop1 in {a..z}        do                for loop2 in {a..z}                do                        rm ./Data/${name1}${loop1}${loop2}                done        donedone


0 0
原创粉丝点击