2010-07-11 17:26:29 +0000 2010-07-11 17:26:29 +0000
316
316

どのようにしてディレクトリとそのサブディレクトリのサイズを取得するのですか?

Linuxファイルシステムの各ディレクトリのサイズを取得したいとします。

ls -laを使うと、マウントされたファイルシステムのサイズを取得することができますが、これも役に立ちません。また、dfでは各サブディレクトリのサイズとファイルシステム全体のサマリーを取得しています。それを実現するコマンドはありますか?

回答 (9)

450
450
450
2010-07-11 17:28:23 +0000

これはあなたが探しているものを実行します:

du -sh /*

この意味は次のとおりです:

  • -s は、各コマンドライン引数の合計のみを表示します。
du -sh /* | sort -h

サイズによるソートも便利です:

&001

ここでは:

  • -h は、人間が読めるサフィックスを正しく解釈することを保証します。
84
84
84
2010-07-29 12:07:31 +0000

私はしばしば最大のディレクトリを見つける必要があるので、20個の最大のディレクトリを含むソートされたリストを得るために次のようにします:

du -m /some/path | sort -nr | head -n 20

この場合、サイズはメガバイト単位で報告されます。

24
24
24
2015-12-24 10:07:52 +0000

私はそのために Ncdu を使用するのが好きです、あなたはカーソルを使用してディレクトリ構造をナビゲートし、ドリルダウンすることができ、それは本当にうまく機能します。

12
12
12
2012-11-22 16:53:04 +0000

既存の回答は非常に参考になりますが、多分(私のような)初心者の方はこれも参考になるでしょう。非常に基本的なループですが、私にとっては、他のサイズに関連した操作のための良いスタートでした:

  1. 2. 最初の答えと非常に似ていて、1.)とほぼ同じ結果ですが、サブディレクトリの場合は、*と./*の違いを理解するのに時間がかかりました。
9
9
9
2010-07-11 17:29:10 +0000

以下の du 呼び出しは BSD システムで動作するはずです:

du -d 1 /
5
5
5
2015-07-24 11:04:13 +0000

これは簡単ではありません。du コマンドは、ファイルやフォルダ (デフォルト) を表示するか、コマンドラインで指定したすべてのアイテムのサイズだけを表示します (-s オプション)。それらを --threshold (私の例の 1 MB)と取り除くことができます:

du -h | sort -h

このコマンドの利点は隠された点のホールダー(. で始まるホールダー)を含んでいることです。

2
2
2
2013-10-05 15:36:58 +0000

ファイルシステムのブロックサイズが同じであることを確認せずに、異なるシステム/マシン上の du とディレクトリを比較することはできないことに注意してください。これは、linuxマシンからnasにファイルをrsyncして、同期されたディレクトリを自分自身で比較したい場合に有効かもしれません。ブロックサイズが異なるため、duでは異なる結果が得られるかもしれません。

1
1
1
2010-07-12 19:42:17 +0000

また、 xdiskusage をチェックしてみるのもいいかもしれません。同じ情報をグラフィカルに表示してくれますし、ドリルダウンもできます (非常に便利です)。KDEやWindows用の同様のユーティリティは他にもあります。

1
1
1
2016-12-20 09:56:34 +0000

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)に変換するならば、ファイルタイプに応じてディレクトリの特定のサブセットのサイズを取得するのにも使えます。

関連する質問

6
10
5
37
7