web-dev-qa-db-ja.com

ディレクトリとそのサブディレクトリの要約サイズを取得する方法

Linuxファイルシステムの各ディレクトリのサイズを取得したいとしましょう。 ls -laを使用するとき、私は実際にはフォルダの要約サイズを取得しません。

dfを使用すると、マウントされている各ファイルシステムのサイズを取得できますが、それでも役に立ちません。そしてduを使うと、各サブディレクトリのサイズとファイルシステム全体の概要を取得できます。

しかし、私はファイルシステムのROOTフォルダ内の各ディレクトリの要約サイズだけを持ちたいです。それを達成するための命令はありますか?

290
2ndkauboy

これはあなたが探しているものです:

du -sh /*

これはどういう意味ですか。

  • 各コマンドライン引数の合計のみを表示する場合は-s
  • メガバイトの場合はM、ギガバイトの場合はGなど、人間が読める形式の接尾辞には-hを指定します(オプション).
  • /*は単に/内のすべてのディレクトリ(およびファイル)に展開されます。

    注:ドットファイルは含まれません。それらも含めるためにshopt -s dotglobを実行してください。

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

du -sh /* | sort -h

ここに:

  • -hは、sortが人間が読めるサフィックスを正しく解釈するようにします。
412
Thomas

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

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

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

75

そのためには Ncdu を使うのが好きです。ディレクトリ構造それは本当にうまくいきます。

18
BuddhaLincoln

既存の答えは非常に役に立ちます、多分何人かの初心者(私のような)もこれが役に立つと思うでしょう。

  1. 非常に基本的なループですが、私にとってこれは他のサイズ関連の操作にとって良いスタートでした。

    for each in $(ls) ; do du -hs "$each" ; done
    
  2. 最初の答えと非常によく似ており、1)とほぼ同じ結果ですが、サブディレクトリにある場合、*と./*の違いを理解するのに時間がかかりました。

    du -sh ./*
    
11
Martin

次のdu呼び出しはBSDシステムで動作するはずです。

du -d 1 /
7
Philipp

これは簡単ではありません。 duコマンドは、ファイルとフォルダーを表示するか(デフォルト)、またはコマンドラインで指定したすべての項目のサイズのみを表示します(オプション-s)。

Linux上で最大の項目(ファイルとフォルダ)を人間が読めるサイズでソートして取得するには

du -h | sort -h

これは小さなファイルのトンにあなたを埋めるでしょう。 --threshold(私の例では1 MB)でそれらを取り除くことができます。

du --threshold=1M -h | sort -h

このコマンドの利点は、隠しドットフォルダー(.で始まるフォルダー)が含まれることです。

本当にフォルダがほしい場合は、findを使用する必要がありますが、duは多数のフォルダを何度もスキャンする必要があるため、非常に遅くなる可能性があります。

find . -type d -print0 | sort -z | xargs --null -I '{}' du -sh '{}' | sort -h
4
Aaron Digulla

異なるシステム/マシン上でduとディレクトリを比較することはできません。両方ともファイルシステムの同じブロックサイズを共有することに注意してください。これは、Linuxマシンからnasにいくつかのファイルを再同期して、同期したディレクトリを自分自身で比較したい場合には重要です。ブロックサイズが異なるため、duを使用すると異なる結果になる可能性があります。

1
Jimmy Koerting

lsawkと組み合わせて使用​​できます。

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が役に立ちます。

0
J.M. Stoorvogel

また、 xdiskusage をチェックアウトすることもできます。同じ情報を提供しますが、グラフィカルに表示されます。また、ドリルダウンすることもできます(非常に便利です)。 KDEやWindows用の他の同様のユーティリティがあります。

0
sleske