最近、次のような問題に遭遇しました:
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 d
を追加するとfind
、必要な結果が得られる場合があります (私は標準ファイルのみを含むディレクトリ ツリーでこれを行います)。
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}'