`du` 命令的输出不一致

`du` 命令的输出不一致

为什么输出

du -sch ./

不等同于

du -sch ./*

例如,我du -sch在用户主目录中运行,得到 51GB,但du -sch *在同一目录中运行,得到 47GB。起初我以为这可能是隐藏文件,但这无法解释近 4GB 的隐藏文件/文件夹。

我确实阅读了磁盘实用程序的手册,但找不到解释。

答案1

起初我以为这可能是隐藏文件,但这并不能解释近 4GB 的隐藏文件/文件夹。

你是如何衡量这一点的?我认为你有 4 GB 的隐藏文件/目录,如果涉及硬链接,则可能更多(在某种意义上)。

这会告诉你(我放弃了-h以获得更准确的结果;tail只是为了传递“总计”;在 中进行测试bash):

du -sc ./{.[!.],..?}*  | tail -n 1   # hidden
du -sc ./*             | tail -n 1   # non-hidden
du -sc ./{.[!.],..?,}* | tail -n 1   # hidden and non-hidden by wildcards
du -sc ./              | tail -n 1   # directory as a whole

(语法取自这个答案)。

第一个命令就是您缺少的。获取第一个和第二个结果的总和;它将等于最后两个结果,除非……

除非隐藏部分和非隐藏部分之间存在硬链接文件。如果是这样,总和将更大,因为当你手动求和时,这些文件将被计算两次,但当du你在一次计算中为你求和时,这些文件只被计算一次。在这种情况下,隐藏文件/目录占用的空间比您想象的还要多(尽管其中一些空间与非隐藏部分“共享”)。请注意-l选择du控制此行为:

-l--count-links
如果硬链接,则多次计算大小

相关内容