どのようにしてディレクトリとそのサブディレクトリのサイズを取得するのですか?
Linuxファイルシステムの各ディレクトリのサイズを取得したいとします。
ls -la
を使うと、マウントされたファイルシステムのサイズを取得することができますが、これも役に立ちません。また、df
では各サブディレクトリのサイズとファイルシステム全体のサマリーを取得しています。それを実現するコマンドはありますか?
私はしばしば最大のディレクトリを見つける必要があるので、20個の最大のディレクトリを含むソートされたリストを得るために次のようにします:
du -m /some/path | sort -nr | head -n 20
この場合、サイズはメガバイト単位で報告されます。
私はそのために Ncdu を使用するのが好きです、あなたはカーソルを使用してディレクトリ構造をナビゲートし、ドリルダウンすることができ、それは本当にうまく機能します。
これは簡単ではありません。du
コマンドは、ファイルやフォルダ (デフォルト) を表示するか、コマンドラインで指定したすべてのアイテムのサイズだけを表示します (-s
オプション)。それらを --threshold
(私の例の 1 MB)と取り除くことができます:
du -h | sort -h
このコマンドの利点は隠された点のホールダー(.
で始まるホールダー)を含んでいることです。
ファイルシステムのブロックサイズが同じであることを確認せずに、異なるシステム/マシン上の du
とディレクトリを比較することはできないことに注意してください。これは、linuxマシンからnasにファイルをrsyncして、同期されたディレクトリを自分自身で比較したい場合に有効かもしれません。ブロックサイズが異なるため、du
では異なる結果が得られるかもしれません。
また、 xdiskusage をチェックしてみるのもいいかもしれません。同じ情報をグラフィカルに表示してくれますし、ドリルダウンもできます (非常に便利です)。KDEやWindows用の同様のユーティリティは他にもあります。
ls
と併用することができます:
ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'
awk
の出力はls
にパイプされ、awk
はデータの処理を開始します。標準の区切り文字はスペースです。和変数awk
は0に初期化されており、tot
が出力する各行/行に対して以下の文が実行されます。これは単に ls
のサイズをインクリメントしているだけです。
もしこれをスクリプトや関数(.bashrc)に変換するならば、ファイルタイプに応じてディレクトリの特定のサブセットのサイズを取得するのにも使えます。