macOS 中 du 命令需注意与 Linux 的差异,常用组合包括:du -sh */ 查一级子目录大小;du -sh --max-depth=1 | sort -hr 查当前层前 N 大目录;du -h --max-depth=3 | sort -hr | head -20 查指定目录多级分布;--exclude 可过滤 node_modules 等干扰项。

在 macOS 中,du(disk usage)是查看文件夹磁盘占用的原生命令,但默认行为和 Linux 有细微差异,尤其在排序、单位显示和深度控制上容易踩坑。掌握几个关键参数组合,就能快速获取清晰、可读性强的各级目录大小分布。
基础统计:当前目录下各子目录大小
最常用的是列出当前目录下**一级子目录**的大小,并按人类可读格式显示:
du -sh */说明:
- -s 表示汇总(summarize),不递归显示子目录内部细节
- -h 表示 human-readable,自动换算为 KB/MB/GB 等单位
- */ 是 shell 通配符,只匹配目录(不包含文件或隐藏项)
注意:该命令不包含以点开头的隐藏目录(如 .git),如需包含,改用 du -sh .*/ *(会混入 . 和 ..,可后续过滤)
深度限制 + 排序:看清前 N 大目录
想快速定位“谁占了最多空间”,推荐结合 --max-depth 和 sort:
说明:
- --max-depth=1 限定只统计当前层级(等效于 */,但更可靠,含隐藏目录)
- sort -hr 按人类可读数值逆序排列(-h 解析 K/M/G,-r 从大到小)
常见变体:
- 查看前 10 大:du -sh --max-depth=1 | sort -hr | head -10
- 排除 . 和 ..(macOS 下有时会出现):du -sh --max-depth=1 | grep -v "^\.$\|^\.\.$" | sort -hr
递归明细:展开某目录的多级结构
若要查看某个大目录(如 ~/Downloads)内部的逐层分布,避免信息过载:
说明:
- --max-depth=3 展开到三级子目录(例如 Downloads/a/b/c),避免全量递归卡顿
- 先 du 再 sort -hr | head 是高效组合,比用 du -h | tail -n +2 | sort -hr 更准确(避免头行干扰)
提示:macOS 自带的 sort 支持 -h,无需额外安装 GNU coreutils
排除特定类型:跳过缓存、.DS_Store 等干扰项
某些目录(如 node_modules、Pods、.git)常极大但无需关注,可用 --exclude 过滤:
说明:
- --exclude 可多次使用,支持 shell 通配符(如 --exclude="*.log")
- 注意路径:末尾用 . 表示当前目录,确保排除规则生效
- 若需永久忽略,可写成函数放入 ~/.zshrc:
alias dus='du -sh --max-depth=1 --exclude="node_modules" --exclude=".git" --exclude=".DS_Store"'










