`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
如果硬連結則多次計算大小

相關內容