linuxでディレクトリ容量を計算する方法

linuxディレクトリごとの容量を計算して表示する場合(たとえばルート以下の各フォルダ容量の合計など)意外と一筋縄ではいかないようだ。

「ls」 「df」コマンドだけではダメ

とりあえず考えつくのが「ls」コマンドかな。
というわけで、「ls -alh」などやってみる。しかし「ls」はファイルサイズは表示してくれてもフォルダ内の合計サイズは表示してくれない。
んで、次に「df」あたりを試してみるが、「df」はどうもディスクドライブのみの使用容量しか表示してくれない。

「du」コマンドだけでもダメ。。。なことはない(←追記で訂正)

「du」コマンドはファイルの使用量を確認することができる。。。んだけど、このコマンドはオプションを付けないで実行すると、全てのサブディレクトリごとに使用サイズが表示され、最後に合計が出力されてしまう。

特定フォルダ内の合計容量を調べたい場合は「s」オプションを付けて、フォルダを指定すれば再帰的にファイルサイズを合計した数値を表示してくれる。

$ du -sh /usr/bin/
154M    /usr/bin/

けど、この「du」コマンドだけではルート以下のフォルダの各容量をすべて表示というところまではできない。

awk」コマンドと一緒でやっとできた!!

ここで、awkコマンドを併用すると、やりたいことができそうな予感。
まず「find」で引っ掛けてくる。次に引っ掛ってきた全ての内容に対して、「awk」で「du」コマンドを実行!!
というのを書くと、こんなんになりました。

$ find / -type d -maxdepth 1 | awk '{res = system("du -shx "$1)}'

これでやっとやりたいことができました〜。

追記

以下のように指定することで「du」単体でもルート以下の合計サイズ表示できました。

$ du -sh /*/