web-dev-qa-db-ja.com

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

結果は一貫して異なります。すべてのファイルは、ブロックサイズのバイトの倍数で書き込まれます。

d これらの余分なバイトはどこにありますか?ファイルシステムがファイルの内容を保存するために多かれ少なかれスペースを必要とするかもしれないことを私は理解します、しかし私はそれを望みました-bduのオプションは、ファイルシステムで使用されるサイズではなく、「見かけの」サイズをカウントする必要があることを意味します。

5
wvxvw

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}'
3
AFH