#はじめに
duコマンドをオプションなしに実行すると、サブディレクトリの容量もすべて表示します。
ざっくりとディレクトリごとの容量を知りたいときはすべて表示されると不便なので、
オプションをつけてサブディレクトリを含めたディレクトリ容量を取得したのですが、
オプションの指定で混乱したのでそのまとめです。
#結論
-
du
でサブディレクトリをまとめて表示するには-s
オプション - 複数ディレクトリに対して実行するには
*
で指定するか、find -maxdepth
の結果を-exec {} \;
でdu sh
に渡す。
##パターン1:
OK:
[root@d-new var]# du -sh /var/*
0 /var/adm
80M /var/cache
0 /var/crash
8.0K /var/db
NG:
[root@d-new var]# du -sh /var/
295M /var/
###du コマンドの-s と -S オプション
-s
-h
オプションを指定しています。
-h
は表示容量の単位を人間が見やすい値するオプションです。
問題はサブディレクトリを含めた容量を表示するオプションをどうするかです。
結論から言うと-s
オプションを付けて、実行したいディレクトリを指定することで取得可能です。
※上記にも例がありますが、複数ディレクトリの場合はdu -sh /var/*
のように指定します。
-s
と-S
オプションの違いで少しはまりました。
man
コマンドでdu
の説明を確認すると以下のように説明されています。
-s, --summarize
display only a total for each argument
-S, --separate-dirs
for directories do not include size of subdirectories
-S
はdo not include size of subdirectories(サブディレクトリのサイズを含めない)とあるので、
いけると思ったのですが、実行結果はオプションなしで実行した時と同様に、
サブディレクトリの容量も表示されてしまうようでした。
後々調べたのですが、-S
は”サブディレクトリを含めないディレクトリの容量も合わせて表示する”
という意味です。この部分で少し理解に詰まったので別でまとめたいと思います。
ということで今回は、-s
オプションを使用します。
コマンドの実行対象とされたディレクトリのサブディレクトリを含めた容量を表示します。
du -sh /var/
だけではvar配下すべての合計量になってしまうので、
実行対象をdu -sh /var/*
でvar配下のすべてのディレクトリにします。
var配下のディレクトリに対して、ディレクトリごとにそのサブディレクトリの容量もまとめて出力するコマンドになりました。
##パターン2
[root@-new var]# find /var/ -maxdepth 1 -type d -exec du -sh {} \;
295M /var/
0 /var/tmp
81M /var/lib
135M /var/log
0 /var/adm
find コマンドを使用するパターンです。
findコマンドはサブディレクトリも検索対象になりますが、
-maxdepth level を使用することで、検索対象となるディレクトリの最大階層を指定可能です。
-maxdepth levels
Descend at most levels (a non-negative integer) levels of directories below the command line arguments. -maxdepth 0
means only apply the tests and actions to the command line arguments.
-exec {} \;
でfind
コマンドの結果を別々に渡して、du -sh
を実行します。