ファイルサイズの調べ方

特定のディレクトリ以下のファイルサイズを取得するJavaのコード――Apache CommonsにあるFileUtilsのsizeOfDirectoryを使っただけだが――を書いたのだけど、どうもそれが出力するファイルサイズがおかしいと言われたので調べた結果と、awkがちょっと使えるようになったメモ。

そもそもの取得方法

$ du -sh ./

調べてわかったけど、ブロックサイズだからちゃんとした値じゃないそうで。
lsするとディレクトリが4096になるやつかな。


……って

$ echo 'aa' >> aaa
$ du -b aaa
3       aaa
$ ls -lh aaa
-rw-r--r-- 1 root root 3 Feb 27 18:25 aaa

ちゃんと3って出てるが……


ああ、調べたときは

$ du -sh

だったかな。これだと4096になる。

findとawkを使う

で、findとawkを使う事に。

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

findにはtype fでファイルだけ検索するようにして、"%s\n"でファイルのサイズと改行を出力するように。
それをパイプでつないでawkに足し算してもらい、最後に出力。

結果

duの結果が間違っていただけで、出力はあってた。
ちゃんと調べる時はfindを使いましょう。ってことでおkなのかな?


追記:
du -b == find -type f + find -type d でおk?