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


307

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

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

ただし、ファイルシステムのROOTフォルダー内の各ディレクトリの要約サイズのみが必要です。それを達成するためのコマンドはありますか?


--totalフラグは、私のために役に立ちました。例えばdu -sh --total applications/*askubuntu.com/a/465436/48214
ライアン

回答:


433

これはあなたが探していることをします:

du -sh /*

これが意味するもの:

  • -s 各コマンドライン引数の合計のみを提供します。
  • -hMメガバイトやGギガバイトなど、人間が読み取れる接尾辞の場合(オプション)。
  • /*内のすべてのディレクトリ(およびファイル)に展開するだけ/です。

    注:ドットファイルは含まれていません。shopt -s dotglobそれらも含めて実行します。

サイズでソートすることも便利です。

du -sh /* | sort -h

ここに:

  • -hsort人間が読める形式の接尾辞を正しく解釈するようにします。

8
ルートディレクトリにドットディレクトリがある場合shopt -s dotglobは、それらを使用してカウントに含めることができます。
フィリップ

8
これは非常に便利です。シンプルであり、現在のディレクトリや現在のディレクトリの各アイテムなど/*、代わりに必要なパスを配置できるためです。././*
-psur

3
@psurまたは./*/すべてのアイテムではなくサブフォルダーのみを取得するために使用できます
-relascope

7
並べ替えバージョン:du -sh /* | sort -h
Vu Anh

2
@ c1phr sortがない場合は-h、そのままにしておく必要がありduます。そうしないと、並べ替えでキロ/メガ/ギガバイトが混ざります。du -s /* | sort -nr
トーマス

79

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

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

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


11
読みやすくする方法を次に示しますdu -sh / some / path | sort -hr | 頭-n 20
Xedecimal

6
@Xedecima hの使用に関する問題は、ソートが異なるサイズを処理する方法を知らないことです。例えば、268Kは、255Mよりもソートされ、両者は2.7Gよりもソートさ
chrisan

4
'sort'コマンドの-h(人間が読める)引数は、これらの値を適切に読み取る必要があります。duの-hフラグがそれらをエクスポートするように。あなたが実行しているものに応じて、私は推測しています。
Xedecimal

Ubuntu 16.04で動作します。いいヒント。
–SDsolar

sudo du -haxt 1G / | sort -hr | ヘッド-30
逸脱した


11

既存の回答は非常に役立ちます。おそらく、初心者(私のような)がこれも役立つと思うかもしれません。

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

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

    du -sh ./*
    

for eachそれは、コンソールの文字(例えば追加として動作しない\033[フォルダのリストに)
machineaddict

@machineaddictの意味がわかりません。私はこれを常に使用していますが、私にとってはうまくいきます。
マーティン

で始まるコマンドを実行してみてくださいfor each。動作しません
machineaddict

ここに書かれているとおりにコマンドを実行します。から始まります。動作します。
マーティン

7

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

du -d 1 /

1
du(Ubuntu 10.4)には-dオプションがありません。どのシステムを使用していますか?
トーマス

私のopenSUSEでは、-dオプションもありません。(
2ndkauboy

OK、それはBSDオプションのみです(OS Xを使用しています)。
フィリップ

BSD / * NIXでの正しいポータブルオプションの組み合わせはdu -sk /*です。私は-kものがすっごく嫌いです。Linuxは-h完全に揺れ動きます。
Dummy00001

他のシステム、その中--max-depth
ヴィシュヌクマール

4

これは簡単ではありません。この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

1
--threshold ^^^このオプションはLinuxでは使用できません
podarok

1
@podarok OpenSUSE 13.2 Linuxで利用可能です。ディストリビューションの最新バージョンを見つけるか、自分でパッケージの最新バージョンをコンパイルしてください。
アーロンディグラ

Ubuntu LTS(14.04)では動作しません。それは最新のものです))
podarok

@podarok GNU coreutilsのバージョンは?私は8.24です。
アーロンディグラ

1
キャッシングは不適切な用語だったかもしれません。このポートsuperuser.com/a/597173/121352で行われるようなことを考えていました。ディスクの内容を一度スキャンしてマッピングし、ディスクに再度アクセスするのではなく、そのマッピングのデータを使用し続けます。
ヘネス

1

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


0

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


0

以下lsと組み合わせて使用できますawk

ls -al * | awk 'BEGIN {tot=0;} {tot = tot + $5;} END {printf ("%.2fMb\n",tot/1024/1024);}'

の出力lsはにパイプされawkます。awkデータの処理を開始します。標準の区切り文字はスペースです。sum変数totはゼロに初期化されます。次の文は、によって出力される各行/行に対して実行されlsます。totサイズが増えるだけです。$55番目の列(で出力されるls)を表します。最後に(1024 * 1024)で割って合計をメガバイトにします。

これをスクリプトまたは関数(.bashrc)に変換する場合は、それを使用して、ファイルの種類に応じてディレクトリの特定のサブセットのサイズを取得することもできます。

システム全体の情報が必要kdirstatな場合は、役に立つかもしれません!


この例を拡張し、「ファイルタイプに応じたディレクトリの特定のサブセット」などのサイズを取得するなどのトリックを実行できることに同意します。良い出発点に思えるかもしれません。それにもかかわらず、このソリューションには最初から欠陥があります。この方法を使用したいすべてのユーザーに、私はこの質問への回答とコメントを読むことと、そこにリンクされた記事を勧めます。まったくできないとは言いません。制限を知っている、それだけです。
カミルマシオロウスキ16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.