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

用 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‑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,可能跨分区把其他文件系统内容也扫进来,导致总数虚高。










