為什麼 du -b 顯示的結果與 stat 不同?

為什麼 du -b 顯示的結果與 stat 不同?

我最近遇到了這個問題:

find /tmp/tmp33hn25wv -type f -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'
10420224

du -bs /tmp/tmp33hn25wv
12198004    /tmp/tmp33hn25wv

結果始終不同。所有檔案都以區塊大小位元組的倍數寫入。

哪裡有找到這些額外的位元組嗎?我知道檔案系統可能需要更多或更少的空間來儲存檔案的內容,但我希望該-b選項du意味著它必須計算「表觀」大小,而不是檔案系統使用的大小...

答案1

du包括目錄的大小。如果您已新增-type dfind標準,您可能會得到您想要的結果(我在僅包含標準檔案的目錄樹上執行此操作):

find /tmp/tmp33hn25wv \( -type f -o -type d \) -exec stat --format='%s' {} + |\
    awk '{s+=$1} END {print s}'

但是,可能還有其他文件類型佔用空間,因此請嘗試完全省略類型檢查:

find /tmp/tmp33hn25wv -exec stat --format='%s' {} + | awk '{s+=$1} END {print s}'

相關內容