zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【メモ】Linux:duでディレクトリサイズを比較したら同じはずなのにサイズが異なる

理由

duコマンドは、ファイルサイズではなくブロックサイズで表示するので正確な数値が表示されない。

【参考】

http://sonic64.com/2004-05-26.html
http://blue-red.ddo.jp/~ao/wiki/wiki.cgi?page=%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8%A5%EA%A4%CE%CD%C6%CE%CC%A4%F2%C4%B4%A4%D9%A4%EB

find ./ -type f -printf "%s\n" |awk '{ sum += $1; }; END { print sum }'

で正確なファイルサイズの合計が表示される

現象例

du -hとしたらサーバAとBでサイズが違う

du -h

[サーバA]
8.0K    ./sample/jnlp/servlet/src/classes/jnlp/sample/jardiff/resources
52K     ./sample/jnlp/servlet/src/classes/jnlp/sample/jardiff
16K     ./sample/jnlp/servlet/src/classes/jnlp/sample/util
8.0K    ./sample/jnlp/servlet/src/classes/jnlp/sample/servlet/resources
124K    ./sample/jnlp/servlet/src/classes/jnlp/sample/servlet
196K    ./sample/jnlp/servlet/src/classes/jnlp/sample
200K    ./sample/jnlp/servlet/src/classes/jnlp
204K    ./sample/jnlp/servlet/src/classes
1.4M    ./sample

[サーバB]
16K     ./sample/jnlp/servlet/src/classes/jnlp/sample/jardiff/resources
80K     ./sample/jnlp/servlet/src/classes/jnlp/sample/jardiff
28K     ./sample/jnlp/servlet/src/classes/jnlp/sample/util
16K     ./sample/jnlp/servlet/src/classes/jnlp/sample/servlet/resources
184K    ./sample/jnlp/servlet/src/classes/jnlp/sample/servlet
300K    ./sample/jnlp/servlet/src/classes/jnlp/sample
308K    ./sample/jnlp/servlet/src/classes/jnlp
316K    ./sample/jnlp/servlet/src/classes
2.2M    ./sample

# 上記のfind+awkのコマンドで比較

find ./sample -type f -printf "%s\n" |awk '{ sum += $1; }; END { print sum }'

[サーバA]
861865

[サーバB]
861865

先人の知恵に感謝しつつリブログ