老司机巧删巨量文件

作者:田逸([email protected])

因为审查的原因,大量的app包需要删除。这些包位于不同的目录下,不能直接清空目录,因此要删除这些文件,还是比较麻烦的。有关部门给了一个完整的删除列表,我检查了一下,共有324130,这些文件小的几个KB,大的数百兆。起初我吩咐小弟去干,干了一阵,反馈说文件太多,rm不起作用。我抽空去看了一下他写的脚本,内容截取如下:

[[email protected] del_soft]# more /root/del.sh
/bin/rm -rf /mnt/nfs_dir/soft/2015/10/28/103/1033350/TDtafangshouweizhan_V8.1_mumayi_1a058.apk
/bin/rm -rf /mnt/nfs_dir/soft/2015/05/21/97/972733/zhongguotaociwang_Vv1.8.1.0303_mumayi_05f30.apk
/bin/rm -rf /mnt/nfs_dir/soft/2014/09/26/84/848499/koudaiyaoguai_shuiyin_V1.4.0_mumayi_82dcc.apk
/bin/rm -rf /mnt/nfs_dir/soft/2013/08/16/38/383759/quanhuang99duizhanban_V3.3.13_mumayi_ab8ce.apk
/bin/rm -rf /mnt/nfs_dir/soft/2013/12/17/47/473845/longyin_V4.28_mumayi_bb436.apk
/bin/rm -rf /mnt/nfs_dir/soft/2013/12/16/47/473291/zhimingfeichedang_V1.0.0_mumayi_79418.apk
/bin/rm -rf /mnt/nfs_dir/soft/2013/12/16/47/473292/jiangshilaixi_V16_mumayi_eadd5.apk
/bin/rm -rf /mnt/nfs_dir/soft/10/donghuarenwudaluandou_V1.1_mumayi_a1476.apk
/bin/rm -rf /mnt/nfs_dir/soft/12/huweijiaodoushi_V1.1_mumayi_ca2b7.apk
/bin/rm -rf /mnt/nfs_dir/soft/14/pensijiangshi_V1.0_mumayi_03868.apk
/bin/rm -rf /mnt/nfs_dir/soft/15/yongzhezhengtu_V1.06_mumayi_81f4c.apk
/bin/rm -rf /mnt/nfs_dir/soft/2013/06/26/0/20/dushisaiche5zhongwenban_V3.0.3_mumayi_dc6de.apk
/bin/rm -rf /mnt/nfs_dir/soft/2010/10/15/21/zhiwudazhanjiangshizhanlueban_V3.0_mumayi_b6c2e.apk
/bin/rm -rf /mnt/nfs_dir/soft/2010/10/23/33/datuzi_V1.0_mumayi_640a4.apk
/bin/rm -rf /mnt/nfs_dir/soft/2010/10/24/38/kuangretubage_V1.6.3_mumayi_24644.apk
/bin/rm -rf /mnt/nfs_dir/soft/2010/10/24/40/emoshashou_V1.0.2_mumayi_a1c65.apk
……………………………………….省略……………………..

这种方式不但没有效率,而且根本进行不下去,需要改进。

基本思路是:把这些文件都移动到某个目录,然后干掉整个目录。为了保证不误删、不发生意外,先从他这个脚本把文件名提取出来,专门生成一个文件,命令如下:

[[email protected] del_soft]# awk ‘{print $NF}‘ /root/del.sh >/root/large_files_del.txt

再写一个脚本,查看这些文件是否存在,脚本内容如下:
#先生成一个小文件列表

head -1000 /root/large_files_del.txt > /root/1000files.txt

#查看文件是否存在(有好些文件是不存在的)

[[email protected] del_soft]#more /root/listfiles.sh
#!/bin/bash

for file in `cat /root/1000files.txt`
do
 if [ -e $file ]
then
echo $file
fi
done

执行完毕,居然没有文件输出,这意味着所有文件不存在,怎么可能呢?在文件列表中随机抽取几个,用ls 检索,有些文件确实存在啊!莫非文件列表有问题?vi打开/root/1000files,文件居然是windows格式。

用dos2unix进行格式转换,再执行/root/listfiles.sh,可以看到输出(仅输出存在的文件)。为什么dos格式查不到文件存在呢?那是因为文件列表的每一行行尾有一个\r存在

确信欲删除的文件存在以后,在前边的这个脚本基础上稍微改进一下,主要目的就是把存在的文件移动到指定的目录。注意,因为文件巨多,而且占用的空间很大,需要考虑目标目录有足够的空间来保存这些巨量文件,确定有足够的空间以后,创建目录/mnt/nfs_dir/del_soft/待用。修改后的脚本如下:

[[email protected] del_soft]# more /root/mv_files.sh
#!/bin/bash

for file in `cat large_files_del.txt`
do
mv $file /mnt/nfs_dir/del_soft/
done

此脚本无需加判断语句,因为mv过程会自行判断,如果不存在,它会自动跳过。给此脚本赋予执行权限,然后开一个screen,在此screen下执行脚本/root/mv_files.sh。再开一个shell窗口,进入目录/mnt/nfs_dir/del_soft,可查看到移动过来的文件,并且随时间增加而增加。

待脚本/root/mv_files.sh执行完毕,所有需要删除的文件都移动到指定目录/mnt/nfs_dir/del_soft,在系统上创建一个空目录/root/sery,然后用rsync把这个/mnt/nfs_dir/del_soft目录的文件连根拔起,子子孙孙都干掉。具体指令如下:

[[email protected] ~]# rsync --delete-before --force -r /root/sery/  /mnt/nfs_dir/del_soft

执行脚本前,总文件数是84886,占用空间644G。

执行这个脚本,大概耗时数十分钟,解决了用rm不能删除的麻烦。

最后,和大家分享我的订阅专栏《负载均衡高手炼成记》,本专栏依托作者十余年IT运维经验,从入门到实操,手把手教你构建运行不同场景下负载均衡以及日常维护。

原文地址:http://blog.51cto.com/sery/2298506

时间: 2024-10-31 17:05:59

老司机巧删巨量文件的相关文章

“老司机”教你如何处理PDF文件转换问题

大家常用的办公室文件格式有WORD.EXCEL.PPT.JPG.PDF等等,它们各有所长,像WORD方便文字的编辑和布局,EXCEL便于排序统计计算......而PDF的特点是美观但不易修改.在工作中我们经常会遇到需要将PDF文件与其它格式之间进行相互转化的情况.那么我们需要动手重新做吗?很显然,这是个吃力不讨好的且效率低下的选择,有经验的"老司机"这时会轻描淡写地说一声:"用转换器转一下就好." 现在市场上有很多这样的转换器,可大多数都不好用.国外的由于语言和操作

酷课堂iOS交流群,聚集了一群热爱技术、有趣、有料,平均Q龄在10年以上的“老司机”,他们遍布在全国

新书即将上市: 这两天收到出版社的样书,预计这两周将陆续开始上架,感兴趣的小伙伴,到时可在天猫.当当.京东搜索"李发展"即可找到. ? ? ? ? ? ? ? ? ? ? ? ? ? ? 本书内容简介和适合人群: 本书包含Swift 4.0语言.Cocoa Touch.视图控制器.控件.表格.网络.地图.音频.视频.动画.触摸.手势.故事板.CoreData.性能测试.机器学习.增强现实.加密解密等众多功能模块.这些内容是iOS开发必知必会的内容,需要读者重点掌握. 读者对象:通过对本

这几段代码,测测你是 Python 菜鸟还是老司机

这段话被称作“Python 之禅”(The Zen of Python),它列举了一些 Python 所推崇的理念,比如: 优美胜于丑陋 明确胜于隐晦 简单胜于复杂 … 可读性很重要 不要忽略错误 面对不确定时,拒绝猜测 现在做 好过不做,但盲目动手不如不做 如果你的实现很难说清楚,那是个坏想法:反之亦然 … 当你学完基础,可以写点代码的时候,可能经常感觉自己的实现很别扭.有经验的程序员会一眼看出你的代码出自一个初学者之手.这就是我们经常说的,代码不够 pythonic. 所谓 pythonic

N年Python老司机,血泪总结新手常见10大错误

作为python的新手,大家在上手python的时候都会或多或少的接触到一些rookie mistake,也就是菜鸟级别的错误.小编作为一个老司机也是从这些错误中一点一点的积累经验,才慢慢的能够熟练的使用python. 遇到错误不可怕,关键是要学会如何去避免犯这些错误.今天小编就带领大家看一下作为python新手最常见的几个错误,希望大家能够在学习的过程中,尽量的去避免这些错误. 1.默认可变对象 上图中,我们定义了addElement函数,在函数的形参中,我们默认使用了可变对象list.当我们

老司机教你使用shel脚本15分钟部署LNMP

防伪码:我喜欢出发,只为到达的地方都属于昨天!          老司机教你使用shel脚本15分钟部署LNMP 一.环境简介 1.LNMP,顾名思义,就是Linux系统下Nginx+MySQL+PHP的一种网站服务器架构. 2.Linux是目前最流行的免费操作系统,代表版本有debian.centos.fedora.gentoo等, 今天我们使用CentOS-6.5作为LNMP架构的基础. 3.Nginx是一个高性能的HTTP和反向代理服务器,其性能稳定.功能丰富.运维简单.处理静态文件速度快

Android老司机搬砖小技巧

作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了. SDK常用工具类 Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率. android.text.TextUtils 字符串操作常用方法:isEmpty() ,join(),split()等 if(!TextUtils.isEmpty(text)){ //do something } android.webkit.URLUtil 链接相关常用方法:isHttpUrl(

推荐系统老司机的十条经验(转)

作者:刑无刀链接:https://zhuanlan.zhihu.com/p/23847246来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 一年一度的ACM Recsys会议在9月份已经胜利闭幕,留下一堆slides和tutorials等着我们去学习. 翻看今年的各种分享,其中老司机Xavier Amatriain的分享引起了我的兴趣:Lessons Learned from Building Real--Life Recommender Systems.主要分享

老猫总结的如何发布文件到手机中

FireMonkey[移动开发] 165232328的群主老猫总结的如何发布文件到手机中,非常实用,转贴过来.这个群在老猫的管理下,有大量关于利用delphi开发app可能遇到的问题的解决方法,经验,还有很多问题的实现方案,值得加入,不过,在里面不要废话,有问题可以问,但一定自己把问题能讲清楚了再提,不然,老猫会不客气的,禁言是小事,被踢是常事. (* ************************************************ *)(* *)(* 作者:爱吃猪头肉 & Fl

十年建站老司机带你十分钟搭建网站

本文概要: 1. 域名 + 域名注册 + 域名备案 + 域名解析绑定 2. 服务器 + 虚拟主机 + windows服务器 + linux服务器 3. CMS建站系统 4. 总结 在如今互联网发展迅速猛进的大环境下,网站已经成为一个企业不可缺少的网络媒介.但网站开发行业鱼龙混杂,质量参差不齐,价格更是跨越区间大.尤其对于那些在建站方面不懂的小白来说,很容易被人坑,所以作为在网站开发行业摸爬滚打多年的草根老司机,通过本文向大家分享建站的经验与心得,避免不必要的弯路和成本损耗. Come on! 小