整体说明
- 快速查看非隐藏第一层目录大小:
du -sh */ - 包含隐藏目录:
find . -maxdepth 1 -type d ! -name "." -exec du -sh {} \; - 按大小排序:在上述命令后加
| sort -hr - 查看逻辑大小(对应稀疏文件):
du -shL */
最常用:显示第一层目录大小(人类可读格式,如 M/G)
命令详情:
1
du -sh */
命令解释:
du:统计目录/文件的磁盘占用;-s(--summarize):只显示总大小(不列出子文件/子目录的详细大小);-h(--human-readable):用人类易读的单位(K/M/G)显示;*/:通配符,只匹配当前目录下的「第一层子目录」(结尾的/是关键,排除文件,只选目录);
简单直接,默认显示「实际磁盘占用」(和 Linux
du -sh */逻辑一致),适合快速查看
精准筛选第一层目录(避免通配符遗漏,如隐藏目录)
*/会匹配所有非隐藏的第一层目录,但如果有「隐藏目录」(如.hidden_dir),会被遗漏如果需要包含隐藏目录,用
find筛选第一层目录,再传递给du:1
2# 包含隐藏目录的第一层目录大小(人类可读)
find . -maxdepth 1 -type d ! -name "." -exec du -sh {} \;命令解释:
find .:从当前目录(.)开始查找;-maxdepth 1:只查找「第一层」(不递归子目录);-type d:只匹配目录(排除文件);! -name ".":排除当前目录本身(只保留子目录);-exec du -sh {} \;:对找到的每个目录,执行du -sh统计总大小;
按大小排序(方便找出最大目录)
如果想按目录大小「从大到小排序」,结合
sort命令(Mac 自带 BSDsort,参数和 Linux 略有差异):1
2
3
4
5# 第一层目录大小(非隐藏),按大小降序排序
du -sh */ | sort -hr
# 包含隐藏目录,按大小降序排序
find . -maxdepth 1 -type d ! -name "." -exec du -sh {} \; | sort -hr命令解释:
sort -hr:-h识别人类可读单位(如 M/G),-r反向排序(从大到小);
显示「逻辑大小」(而非磁盘占用,对应稀疏文件场景)
如果想查看目录的「逻辑总大小」(而非磁盘占用,和
ls统计逻辑一致),用du -shL */:1
2# 第一层目录的逻辑总大小(人类可读)
du -shL */命令解释:
-L(--dereference):跟随符号链接,并统计链接指向文件的「逻辑大小」(而非磁盘占用);- 适合用于确认目录的逻辑总数据量(比如对比 Linux 上的逻辑大小)
关键补充:Mac 和 Linux 的 du 差异
- 单位一致性:
-h参数在 Mac 和 Linux 上行为一致(K/M/G 单位); - 隐藏目录:Mac 上
*/不匹配隐藏目录,需用find命令包含; - 稀疏文件:Mac 上
du默认统计「实际磁盘占用」,如果目录内有稀疏文件(未展开),du -sh显示实际占用,du -shL显示逻辑大小
统计一个文件夹下所有数据逻辑大小
递归列出所有数据,加起来,并以 MB(兆字节)为单位输出(Mac 和 Linux 通用):
1
ls -lR ./ | awk '{sum += $5} END {print sum/1024/1024 "M"}'
命令解释
ls -lR ./:递归输出当前目录下所有文件/目录的详细信息(作为数据源)-R(recursive,递归):不仅列出当前目录的文件/目录,还会递归列出所有子目录下的文件/目录- 注意:不包括隐藏文件和文件夹,可以通过改为下面的指令来显示隐藏文件
ls -laR ./,包含.和..(ls -l中目录的第5列是“目录元数据大小”(不是目录内文件总大小),数值极小,可以忽略)ls -lAR ./,不包含.和..
awk '{sum += $5} END {print sum/1024/1024 "M"}':计算所有文件的逻辑大小总和,并转换为 MB 单位awk是文本处理工具,这里用于“提取第5列的字节数,求和后转换为 MB”:- 循环累加(
{sum += $5}):$5:表示取每一行的「第5个字段」(awk中用$n表示第n个字段,字段默认用空格分隔)sum += $5:定义一个变量sum,把每一行第5列的数值(文件逻辑大小,字节)累加到sum中- 注意:目录的第5列(几十字节)也会被累加,但因为数值极小,对总结果几乎无影响(比如100个目录的元数据总和可能只有几 KB,相对于几百 MB 的文件总和可忽略)
- 最终输出(
END {print sum/1024/1024 "M"}):END:表示“所有行都处理完后,执行以下操作”(仅执行一次)sum/1024/1024:单位转换:字节 -> KB(除以1024)-> MB(再除以1024)"M":拼接字符串,让输出结果带单位(比如600M而非纯数字)print:输出最终结果
注意统计的是「逻辑大小」,不是「磁盘实际占用」
- 逻辑大小:文件本身的“理论大小”(比如稀疏文件的预留空间、普通文件的实际数据大小),和
ls -lh显示的大小一致; - 磁盘实际占用:文件在磁盘上真正占用的空间(比如稀疏文件的实际写入数据大小),需用
du统计; ls -l中目录的第5列是“目录元数据大小”(不是目录内文件总大小),但因为数值极小(通常几十字节),累加后对总结果(几百 MB)几乎无影响,无需刻意排除