Linux如何统计目录中不同后缀文件的占用空间占比

星涛姑娘_1296

星涛姑娘_1296

2026-04-11

411人浏览

原创

用 find + du 配合 awk 可按后缀精确统计空间占比,核心是安全提取文件后缀并累加字节数,再计算百分比;ncdu 仅适合交互式验证,无法直接导出后缀占比。

linux如何统计目录中不同后缀文件的占用空间占比

用 find + du 按后缀分组统计空间占用

直接用 du 本身不支持按扩展名聚合,必须配合 find 筛选 + awk 或 sort 归类。核心思路是:对每个文件单独跑 du -b 获取字节数,提取后缀(注意空后缀和隐藏文件),再累加求占比。

常见错误是用 ls *.ext | du -sh —— 这会漏掉子目录中匹配的文件,且通配符在深层目录失效;还有人用 du --exclude 反向排除,逻辑绕、易出错。

  • find /path -type f -not -name ".*" -print0 | xargs -0 du -b:先安全获取所有非隐藏普通文件(-print0 防空格路径崩)
  • 后缀提取要小心:basename 后用 sed 's/.*\.//;t;d' 提取最后一个点后的部分,但得单独处理无点文件(如 Makefile)和以点开头的(如 .gitignore),建议统一归为 noext 或 hidden
  • 最终用 awk '{ext[$2] += $1} END {for (e in ext) print ext[e], e}' 累加,再除以总数算百分比

一行命令快速出带百分比的汇总表

以下命令可直接运行(替换 /path):

find /path -type f -print0 | \
  xargs -0 du -b | \
  awk -F/ '{file=$NF; sub(/^.*\./, "", file); if(file=="") file="noext"; print $1, file}' | \
  awk '{size[$2]+=$1; total+=$1} END {for (e in size) printf "%6.2f%% %s\n", size[e]/total*100, e}' | \
  sort -nr

说明:sub(/^.*\./, "", file) 是正则提取后缀,比 cut -d. -f2- 更准(避免 a.b.c.js 被截成 b.c.js);sort -nr 按百分比倒序排,一眼看到大头。

注意:如果目录含大量小文件,xargs 可能触发多次 du 调用,性能略低但结果准确;追求速度可用 du -b --files0-from=-(GNU coreutils ≥8.25),但兼容性稍差。

Zynq Linux Hardware Debug
Zynq Linux Hardware Debug

Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。

下载

用 ncdu 交互式查看但无法直接导出后缀占比

ncdu 是可视化磁盘分析利器,但它按目录树展开,不提供“按扩展名聚合”视图。有人尝试 ncdu -o /tmp/ncdu.json /path 导出 JSON 再解析,但字段里没有后缀信息,必须额外从路径字段里提取,反而比纯 find 方案更重。

所以别被界面迷惑——真要统计后缀占比,ncdu 只适合辅助验证某类文件(比如确认 .log 是否集中在某个子目录),不能替代脚本化统计。

  • 安装:apt install ncdu(Debian/Ubuntu)或 yum install ncdu(RHEL/CentOS)
  • 启动后按 Shift+D 可删掉大文件快速释放空间,但这和统计无关
  • 它的优势在于实时交互、支持键盘导航,不适合批量分析或 CI 场景

隐藏文件、符号链接和硬链接的处理差异

默认 find -type f 不包含符号链接(除非加 -follow),而硬链接会被重复计数(du 对同一 inode 多次出现仍累加)。这会导致统计偏差:

  • 若需包含软链指向的文件,加 -follow,但注意可能跨文件系统或循环引用
  • 若要排除硬链接重复,得先用 find -type f -printf "%i %p\n" 按 inode 去重,再喂给 du,复杂度陡增,一般场景不推荐
  • 隐藏文件(.*)是否纳入取决于需求:日志类统计常要包含 .log,配置类可能忽略 .git 目录下的文件——建议显式控制,比如加 -not -path "./.git/*"

最易被忽略的是:不同文件系统挂载点(如 /home 单独挂载)下,du 统计天然隔离,但你的脚本若没限定 -xdev,可能跨分区把其他文件系统内容也扫进来,导致总数虚高。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2023.08.07

2075

5

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

3062

1

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

2023.10.13

1036

3

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2025.09.10

3479

7

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

2700

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

249

24

sort排序函数用法
sort排序函数用法

sort排序函数的用法:1、对列表进行排序,默认情况下,sort函数按升序排序,因此最终输出的结果是按从小到大的顺序排列的;2、对元组进行排序,默认情况下,sort函数按元素的大小进行排序,因此最终输出的结果是按从小到大的顺序排列的;3、对字典进行排序,由于字典是无序的,因此排序后的结果仍然是原来的字典,使用一个lambda表达式作为key参数的值,用于指定排序的依据。

2023.09.04

1138

7

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

2023.06.20

728

5

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.28

1009

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习