linux删除_Linux下如何快速删除大量碎小的文件?

XX系统,通过FTP给客户实时传送文件,正常逻辑是客户收到文件后,自动删除FTP服务器上的本地文件,但经常出现文件已经推送了,客户没删除文件的情况。每个文件其实是很小的,可能几K,但是量很大,1天几万个,以至于时间久了,本地积的文件就会很多。我们不说让客户怎么排查问题,单就这个现象,如果积了几百万的小文件,我们能做些什么?你可能会说,删了啊,确实应该删了,但是小文件多了,会产生什么影响?如果直接rm,你认为行么?

颜总这篇小文,就是介绍了针对这种情况的操作,《Linux如何快速删除大量碎小文件?》,受益匪浅。

Linux文件系统容量分为大小容量和inode容量,前者限制大小,后者限制数量。

使用df -h,查看大小容量使用情况。
使用df -i,查看inode容量使用情。

当我们遇到文件系统容量爆满,首先快速定位,

1. 寻找指定目录最大文件
du -a /data |sort -nr|head -n 10

2. 统计指定目录下文件数

ls -Rf1 /data |grep '^-' |wc -l

举个例子,某系统巡检中发现inode空间爆满(df -ih),
/dev/mapper/red-root 550G 550G 20K 100% /

通常,监控工具只关注大小容量空间使用情况,很少关注inode空间。

根据上边命令(2)定位到问题目录,在该目录下执行ls报错如下,
ls: memory exhausted

很显然,在问题目录ls命令已经无法将所有文件列出来。因为ls默认会对文件按首字母排序,而排序过程需要消耗内存,文件非常多的时候,对内存的消耗是非常恐怖的。

这该怎么办?此时,可以使用-f1参数,这样就不排序,将文件列表输入到临时文件中。
ls -f1 ./* > ~/clear.log
输出完文件后,产生一个5G的文件,
-rw-r--r-- 1 oradba oinstall 5533944289 Jan 10 14:53 clear.log
可见该目录下文件极多,wc -l clear.log统计,得到文件数约2亿。

由于文件过大,无法查看并使用,如下使用split命令将该文件切分成每一个500Mb。

split -b 500M clear.log -d -a 3 clear.log
注:-b按照大小切分, -n按照制定行数切分。

分割后:

ef4af3afd00b1207c116af9786fab265.png

编写脚本,按照文件批量删除,

[root@localhost ~]$ cat clear.sh#!/bin/bashfor i in `cat clear000`dorm -rf ./$idoneecho "complete!"
替换脚本中clear000依次将所有文件删除,完成清理工作。

另一种方案,

ls -f1 ./* | head -n 1000 | xargs rm -f

说到这里,可能有同学会说,为什么不在问题目录下rm -rf ./* 呢?

这里提一下./*的工作原理,他将目录下所有文件名串接到rm -rf后边。像这样:

rm -rf a b c d e f ...

如上,这是一条shell指令。不幸的是无论unix,还是linux,都对单条命令长度有最大限制。

AIX操作系统受参数ARG_MAX的限制,getconf arg_max查询。
Linux操作系统受参数LINE_MAX的限制,getconf line_max查询。

这就是文件太多的时候,为什么rm -rf ./*会报错的缘故。
归根结底,这个问题的最佳解决方式就是让客户确认文件删除逻辑,一旦不能搞定,就进行文件容量和大小的监控,超过某个阈值,则移动文件进行压缩备份或者直接删除,避免本机影响。

近期的热文:

《YNWA,同样是我们普通人的鞭策》

《小白是怎么搞懂GC全过程?》

《Gdevops峰会:一起探讨国产分布式数据库的选型与应用》

《海底的下面究竟有什么?》

《几种去重的SQL写法》

《打造国产技术产品的必要性》

《SQL查询总是先执行SELECT语句么?》

《Oracle删除字段的方式和风险,你都了解么?》

《最烧脑的珠峰高程测算过程》

《了解阿克曼转向原理的作用》

《登录缓慢的诡异问题》

《不可不知的7个JDK命令》

《一个Full GC次数过多导致系统CPU 100%的案例排查》

《Java GC的基础知识》

《Linux下的^M困惑》

《Oracle相关提问的智慧技巧》

《很久以前的一篇对初学Oracle建议的文章》

《PLSQL Developer几个可能的隐患》

《从70万字SRE神作提炼出的7千字精华文章》

《从数据误删到全量恢复的惊险记录》
《公众号600篇文章分类和索引》

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值