为什么输出
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
如果硬链接,则多次计算大小