admin管理员组文章数量:1660155
之前一次对大文件的操作,本想按照行数对文件进行切割,结果参数设置错误导致切割时候按照文件大小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
版权声明:本文标题:linux下删除大量文件的方法 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729846001a1215137.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论