macos 的 du 默认跟随符号链接导致重复统计,应使用 -h 选项仅对命令行显式路径跟随、跳过递归发现的符号链接;配合 -x 限制同文件系统、-h 人类可读,推荐 du -shxh ~。

在 macOS 上用 du 统计目录大小时,系统自带的符号链接(如 /etc、/var、/usr 等指向 /private/etc 等的实际路径)会导致重复计算——因为 du 默认会跟随符号链接并重新统计目标内容,而这些目标往往已被父目录统计过。
使用 -H 选项跳过符号链接遍历
-H 让 du 只在命令行**显式给出的路径**上跟随符号链接,对递归发现的符号链接则忽略。这能有效避免因系统链接引发的重复累加。
- ✅ 推荐用法:
du -shH /Applications—— 安全统计,不钻进/Applications内部可能存在的符号链接子目录 - ⚠️ 注意:
-H不影响硬链接(硬链接共享 inode,du天然去重),只控制符号链接行为
用 -L 要特别小心:默认开启但易导致重复
macOS 的 du 默认等效于 -L(即始终跟随所有符号链接)。这意味着:
-
/etc→/private/etc,会被单独再算一遍 -
/var→/private/var,同样被重复计入 - 若你执行
du -sh /,这些系统链接会让总和明显大于磁盘实际占用
更稳妥的组合:-h --one-file-system -x
除了处理符号链接,还需防止跨文件系统统计(比如挂载的 Time Machine 卷、外部硬盘或 APFS 快照):
-
--one-file-system或简写-x:限制只统计当前文件系统内的内容,跳过所有挂载点 -
-h:人类可读格式(KB/MB/GB) - 完整推荐命令:
du -shxH ~(统计用户主目录,不跨卷、不递归进入系统符号链接)
验证是否受符号链接影响的小技巧
对比两个命令结果差异,就能快速判断是否有重复:
-
du -sh /etc和du -sh /private/etc—— 若数值接近,说明/etc是纯符号链接,且已被重复计入 -
ls -la / | grep "^l"—— 查看根目录下哪些是符号链接(开头为l)
不复杂但容易忽略:macOS 的符号链接设计本意是简化访问,但对磁盘分析来说,它们就是隐形的“重复入口”。关掉自动跟随,用 -H 或 -x 控制边界,统计才真正反映真实占用。










