Linuxファイルシステムの各ディレクトリのサイズを取得したいとします。ls -la
を使っても、フォルダのサイズの要約は得られません
df
を使うと、マウントされた各ファイルシステムのサイズを得ることができますが、これも役に立ちません。また、du
を使うと、各サブディレクトリのサイズとファイルシステム全体のサマリーが得られます
しかし、ファイルシステムのROOTフォルダ内に各ディレクトリのサイズだけをまとめたものが欲しいです。それを実現するコマンドはありますか?
339 2ndkauboy 2010-07-11
これはあなたが探していることをします
du -sh /*
これが何を意味するのか
-s
を使用すると、各コマンドライン引数の合計のみを与えることができます-h
はメガバイトを表すM
やギガバイトを表すG
のような、人間が読める接尾辞のためのものです (オプション)/*
は単純に/
のすべてのディレクトリ(とファイル)に展開します注意: ドットファイルは含まれていません;
shopt -s dotglob
を実行してドットファイルも含めてください
また、サイズによるソートも便利です
du -sh /* | sort -h
Here:
-h
は、sort
が人間が読めるサフィックスを正しく解釈することを保証します
481 Thomas 2010-07-11
私はしばしば最大のディレクトリを見つける必要があるので、20の最大のディレクトリを含むソートされたリストを取得するために、私はこれを行います
du -m /some/path | sort -nr | head -n 20
この場合、サイズはメガバイト単位で報告されます
85 Janne Pikkarainen 2010-07-29
私はそのためにNcduを使用するのが好きです、あなたはカーソルを使用してディレクトリ構造をナビゲートし、ドリルダウンすることができますそれは本当にうまく動作します
25 BuddhaLincoln 2015-12-24
既存の回答は非常に参考になりますので、もしかしたら(私のような)初心者の方も参考になるかもしれません
非常に基本的なループですが、私にとっては、他のサイズ関連の操作のための良いスタートとなりました
for each in $(ls) ; do du -hs "$each" ; done
最初の回答と非常に似ていて、1.とほぼ同じ結果になっていますが、サブディレクトリにある場合は*から./*までの違いを理解するのに少し時間がかかりました
du -sh ./*
14 Martin 2012-11-22
以下の du
呼び出しは BSD システム上で動作するはずです
du -d 1 /
9 Philipp 2010-07-11
これは簡単ではありません。du
コマンドは、ファイルとフォルダを表示する (デフォルト) か、コマンドラインで指定したすべての項目のサイズだけを表示する (オプション -s
) かのどちらかです
Linux上で人間が読めるサイズの最大のアイテム(ファイルとフォルダ)をソートして取得します
du -h | sort -h
これは、小さなファイルのトンの中に埋もれてしまいます。--threshold
(私の例では1MB) でそれらを取り除くことができます
du --threshold=1M -h | sort -h
このコマンドの利点は、隠しドットフォルダ(.
で始まるフォルダ)を含むことです
本当にフォルダが欲しいだけなら、find
を使う必要がありますが、du
は何度も多くのフォルダをスキャンしなければならないので、これは非常に、非常に遅くなります
find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
5 Aaron Digulla 2015-07-24
ファイルシステムのブロックサイズが同じであることを確認せずに、異なるシステムやマシン上の du
とのディレクトリを比較することはできないことに注意してください。これは、linuxマシンからnasにファイルをrsyncして、同期されたディレクトリを自分で比較したい場合に有効かもしれません。ブロックサイズが異なるため、du
では異なる結果が得られるかもしれません
2 Jimmy Koerting 2013-10-05
また、xdiskusageもチェックしてみてください。同じ情報をグラフィカルに表示してくれますし、ドリルダウンもできます(非常に便利です)。KDE や Windows 用の同様のユーティリティは他にもあります
1 sleske 2010-07-12
ls
とawk
を併用しても良いでしょう
ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'
ls
の出力はawk
にパイプされる。awk
はデータの処理を開始する。標準の区切り文字はスペースである。和変数 tot
はゼロに初期化され、以下の文は ls
が出力する各行/行に対して実行される。tot
をサイズに応じてインクリメントするだけである。$5
は5番目の列(ls
によって出力された)を表しています。最後に(1024*1024)で割ってメガバイトで合計します
これをスクリプトや関数 (.bashrc) に変換して、ファイルタイプに応じたディレクトリのサブセットのサイズを取得することもできます
システム全体の情報が欲しい場合は、kdirstat
が便利かもしれません
1 J.M. Stoorvogel 2016-12-20