macOS 的 du 命令用 -d 参数替代 Linux 的 --max-depth,如 du -d 1 /path;配合 -sh 可读性更强;需跨平台时应做兼容判断;复杂场景可用 find + du 精确控制深度,并注意隐藏文件与权限问题。

macOS 的 du 命令不支持 --max-depth 参数,这是与 Linux 的关键区别。想在复杂目录中控制统计深度,必须用 macOS 原生支持的替代方式实现。
用 -d 参数指定最大深度(推荐)
macOS 版本的 du 使用 -d(depth)而非 --max-depth。该参数接受数字,表示最多递归几层子目录:
-
du -d 0 /path:只显示/path自身大小(不进任何子目录) -
du -d 1 /path:显示/path及其直接子目录的大小(共两层) -
du -d 2 /path:再深入一层,覆盖三级路径结构
注意:-d 是 macOS(及 BSD 系)特有,Linux 默认不识别;若脚本需跨平台,应做兼容判断。
配合 -h 和 -s 提升可读性与聚焦性
在复杂目录中快速定位大目录时,组合使用更实用:
-
du -sh -d 1 /Applications | sort -hr | head -10:列出/Applications下各子目录的人类可读大小,按降序取前 10 -
du -sh -d 2 ~/Documents | grep "G\|M$" | sort -hr:筛选出含 GB 或 MB 单位的两级内路径,便于排查大文件藏身位置
-s(summarize)避免逐个文件输出,-h 让结果一目了然,这对嵌套深、文件多的场景很关键。
用 find + du 实现更灵活的深度控制
当需要精确到某一层(比如“只统计第三层目录”,而非“最多三层”),find 更可靠:
-
find ~/Projects -mindepth 3 -maxdepth 3 -type d -exec du -sh {} + | sort -hr:严格限定为第三层的目录,并统计各自大小 - 搭配
-prune可跳过已满足条件的分支,提升复杂树状结构下的执行效率
这种方式绕开了 du 本身的深度限制逻辑,适合审计、清理或自动化脚本中对路径层级有明确要求的场景。
注意隐藏文件与权限问题
macOS 中很多系统级或应用生成的目录(如 ~/Library、.git、.DS_Store 所在目录)默认被 du 统计,但可能因权限不足报错:
- 加
2>/dev/null屏蔽错误提示,避免干扰结果(如:du -sh -d 1 ~/Library 2>/dev/null) - 如需完整扫描且有权限,可用
sudo du -sh -d 1 /System/Volumes/Data(macOS 10.15+ 系统数据卷路径) -
du默认包含隐藏项;如排除点开头目录,需先用find过滤再传给du
在用户主目录或开发项目中,忽略权限错误和隐藏内容常是获得干净统计结果的前提。










