Bash环境下大目录批量删除指定文件的性能优化求助
Bash环境下大目录批量删除指定文件的性能优化求助
我现在遇到一个头疼的问题:需要在包含50万个文件的超大目录里批量删除指定文件,目录里的文件命名都是这种格式:
- Fiche_8317.doc
- Fiche_8318.doc
- Fiche_8319.doc
我手里有一个deletedFiles.txt文件,里面记录了需要删除的文件对应的信息,每行是分号分隔的,格式示例如下:
AAA;ZQ;00008319;2011-05-18;ACTA;RR02000354090127104747.doc
AAA;ZQ;00008320;2011-05-18;ACTA;RR02000354090127104747.doc
AAA;ZQ;00008321;2011-05-18;REDA;RR02000354090127104747.doc
AAA;ZQ;00008322;2011-05-18;ITAC;RR02000354090127104747.doc
我写了一段循环代码来处理这件事(变量名做了调整,不是真实代码):
while IFS=";" read -r idt surname do Echo $idt " " $surname # 去掉前导零并执行删除 find $DataPath/target/ -type f -name Fiche_"$((10#$idt))".* -delete done < <(cut -d ";" -f 3,6 $DataPath/*deletedFiles.txt)
这段代码确实能完成删除操作,但速度慢得让人崩溃——在我的Linux服务器上,每个文件的删除操作要花2分钟以上!而且我确认每个ID在目录里只对应一个文件,不存在重复的情况。
想请教大家有没有能提升速度的优化方案?我需要更快的解决办法。另外公司的调度器只支持Bash,所以必须用Bash来实现。非常感谢!
备注:内容来源于stack exchange,提问作者Batavia
相关产品推荐
相关产品推荐

