Linux如何快速删除大量碎小文件

0    184    3

Tags:

👉 本文共约1168个字,系统预计阅读时间或需5分钟。

简介

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

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

使用df -i ,查看inode容量使用情况

当我们遇到文件系统容量爆满,如何快速定位,下边给出答案:

快速定位

C1:寻找指定目录最大文件

C2:统计指定目录下文件数:

案 例

某系统巡检中发现inode空间爆满(df -ih):

Linux如何快速删除大量碎小文件

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

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

ls: memory exhausted

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

怎么办呢,可以使用-f1参数,这样就不排序,将文件列表输入到临时文件中。

输出完文件后,产生一个5G的文件:

Linux如何快速删除大量碎小文件

可见该目录下文件极多,wc -l clear.log统计,得到文件数 约2亿

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

image-20230129090108822

注:-b 按照大小切分, -n按照制定行数切分

分割后:

image-20221108140526343

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

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

替换脚本中clear000依次将所有文件删除,完成清理工作。

另一种方案:

Linux如何快速删除大量碎小文件

说到这里,可能有同学会说,为什么不在问题目录下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 ./* 会报错的缘故。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

5 × 2 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部