直接输出各子目录占父目录总空间的百分比:du -sh / 2>/dev/null | awk 'nf==2 {sum += $1+0; arr[nr]=$0; vals[nr]=$1; names[nr]=$2} end {for(i=1;i

你需要在Linux或Windows命令行中批量扫描多个文件夹,快速知道每个文件夹占当前目录总空间的百分比,而不是只看绝对大小——比如想知道/var/log、/home、/opt这三个目录各自吃掉了根分区多少比例。
Linux下用du + awk批量算占比
这一步直接输出每个一级子目录占当前路径总空间的百分比,带单位、四舍五入到小数点后1位,结果清晰可读。
打开终端,进入目标父目录(如/或/home),执行:
du -sh */ 2>/dev/null | awk 'NF==2 {sum += $1+0; arr[NR]=$0; vals[NR]=$1; names[NR]=$2} END {for(i=1;i
注意:命令中*/只匹配子目录(不包含隐藏项和文件),2>/dev/null屏蔽权限拒绝错误;若需包含隐藏目录(如.config),把*/换成* .[^.]*,但要小心.和..被误匹配。
Windows PowerShell逐级统计并自动算占比
适用于需要穿透多层目录、同时保留路径层级结构的场景,比如扫描D:\Projects下的全部项目文件夹,并按占比排序。
第一步:以管理员身份运行 PowerShell(右键开始菜单 → 终端(管理员))。
第二步:执行以下命令(将D:\Projects替换为你的真实路径):
Get-ChildItem "D:\Projects" -Directory | ForEach-Object { $size = (Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum; [PSCustomObject]@{Name=$_.Name; SizeBytes=$size} } | Sort-Object SizeBytes -Descending | ForEach-Object {$total = ($_.SizeBytes / (Get-ChildItem "D:\Projects" -Directory | ForEach-Object {(Get-ChildItem $_.FullName -Recurse -File | Measure-Object -Property Length -Sum).Sum} | Measure-Object -Sum).Sum) * 100; [PSCustomObject]@{Name=$_.Name; "Size (MB)"=[math]::Round($_.SizeBytes/1MB,1); "Percent"=[math]::Round($total,1)} } | Format-Table -AutoSize
该命令会实时计算每个子目录内所有文件的字节总和,再除以父目录下所有子目录字节总和,得出精确占比。注意:【PowerShell必须有读取所有子目录的权限,否则部分SizeBytes会为0】。
跨平台通用:先汇总再手动比对
当目标系统不支持复杂管道或你只需要粗略参考时,用最简方式分两步走——先获取总大小,再逐个查子项。
方法一(Linux):
运行du -sh .得到父目录总大小(记作TOTAL);再运行du -sh */列出各子目录大小;最后用计算器或Excel手动算百分比。
方法二(Windows CMD):
在CMD中进入目标目录,先执行dir /s,记下最后一行“所列文件总数”后的字节数;再对每个子文件夹单独执行dir /s 子文件夹名,提取对应字节数;用Excel做除法即可。
方法三(统信UOS等国产Linux):
终端中先运行du -sb . | awk '{print $1}'获取总字节数;再运行du -sb */ 2>/dev/null | sort -nr,得到每项字节数;用Python一行算占比:python3 -c "total=123456789; import sys; [print(f'{line.split()[1]}: {float(line.split()[0])/total*100:.1f}%') for line in sys.stdin]",把123456789替换成你记下的TOTAL值,然后把du -sb */结果粘贴进去回车。











