老司机巧删巨量文件
作者:田逸(sery@163.com)
因为审查的原因,大量的app包需要删除。这些包位于不同的目录下,不能直接清空目录,因此要删除这些文件,还是比较麻烦的。有关部门给了一个完整的删除列表,我检查了一下,共有324130,这些文件小的几个KB,大的数百兆。起初我吩咐小弟去干,干了一阵,反馈说文件太多,rm不起作用。我抽空去看了一下他写的脚本,内容截取如下:
[root@sdyd163 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 ……………………………………….省略……………………..
这种方式不但没有效率,而且根本进行不下去,需要改进。
基本思路是:把这些文件都移动到某个目录,然后干掉整个目录。为了保证不误删、不发生意外,先从他这个脚本把文件名提取出来,专门生成一个文件,命令如下:
[root@sdyd163 del_soft]# awk '{print $NF}' /root/del.sh >/root/large_files_del.txt
再写一个脚本,查看这些文件是否存在,脚本内容如下:
#先生成一个小文件列表
head -1000 /root/large_files_del.txt > /root/1000files.txt
#查看文件是否存在(有好些文件是不存在的)
[root@sdyd163 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/待用。修改后的脚本如下:
[root@sdyd163 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目录的文件连根拔起,子子孙孙都干掉。具体指令如下:
[root@sdyd163 ~]# rsync --delete-before --force -r /root/sery/ /mnt/nfs_dir/del_soft
执行脚本前,总文件数是84886,占用空间644G。
执行这个脚本,大概耗时数十分钟,解决了用rm不能删除的麻烦。
最后,和大家分享我的订阅专栏《负载均衡高手炼成记》,本专栏依托作者十余年IT运维经验,从入门到实操,手把手教你构建运行不同场景下负载均衡以及日常维护。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
使用Dockerfile定制自己的docker镜像
我们都知道,在Linux系统下可以通过shell脚本来自动安装部署应用,这样不但免去了手动操作的麻烦,而且还可以通过一些自动化工具来实现批量安装部署。那么docker是否也可以通过脚本的方式定制镜像呢?当然可以,那就是Dockerfile,我们可以把创建应用镜像的操作都写入一个Dockerfile文件里,然后通过docker build命令来构建自已的镜像,这个过程类似shell脚本的功能。docker环境的安装部署可以参考我的另一篇博文《Centos 7部署docker环境、基本命令使用及简单实战》,https://blog.51cto.com/andyxu/2174652 本文的所有操作都是基于这个环境执行的。在使用dockerfile之前,我们先来看一个简单的例子:实例1:查看本机公网IP地址 docker pull ubuntu mkdir -p dockerfile/myip 创建Dockerfile文件vim dockerfile/myip/Dockerfile FROM ubuntu:latest #基于ubuntu:latest镜像来构建新的镜像 MAINTAINER ...
- 下一篇
ESXi虚拟机磁盘格式转换与减小硬盘容量的方法
VMware虚拟机磁盘厚置备、精简置备两种格式。精简置备磁盘按需增长,厚置备磁盘立刻分配所需空间。厚置备磁盘较之精简置备磁盘有较好的性能,但初始置备浪费的空间较多。 精简置备磁盘虚拟机,如果频繁增加、删除、修改数据,精简置备磁盘实际占用的空间会超过为其分配的空间。例如某个VMware Workstation或VMware ESXi的虚拟机,为虚拟硬盘分配了40GB的空间(精简置备)。如果这台虚拟机反复添加、删除数据,在虚拟机中看到硬盘剩余空间只能还有很多,例如剩余一半,但这个虚拟硬盘所占用的物理空间可能已经超过了40GB,如果是厚置备磁盘则不会存在这个问题。 实际的生产环境中,虚拟机选择厚置备磁盘还是精简置备磁盘,要根据实际情况选择。如果虚拟机强调性能、并且数据量不大,则选择“厚置备立刻置零”,这将获得最好的性能。如果数据量持续增长、但变动不大,只是持续的增加,则可以选择“精简置备”磁盘。 在生产环境中,为虚拟机分配厚置备磁盘,磁盘的大小以达到稳定工作时占用的实际空间的1.5~2倍为宜,例如虚拟机稳定工作后需要400GB的空间,则为虚拟硬盘分配600~800GB为宜。空间不够可以再增加...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果