linux下删除大量文件的方法

之前一次对大文件的操作,本想按照行数对文件进行切割,结果参数设置错误导致切割时候按照文件大小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/bash

for ((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
        done
done


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值