サイズに応じてすべてのディレクトリを一覧表示するには? [親ディレクトリを除く]

サイズに応じてすべてのディレクトリを一覧表示するには? [親ディレクトリを除く]

いくつかのランダムなフォルダがあり、それらのいくつかは隠されています(ピリオドで始まります)。サイズ別に並べ替えてすべて一覧表示したいです。

私の心の中には、次のような考えがあります。

ls -d -1 -a */ | xargs du -s | sort

ただし、ls ...その部分には隠しファイルは表示されません。以前は同じトピックについていくつかの質問を受けたことがわかりましたが、答えには隠しファイルを含める方法は含まれていません。または、長い形式を使用しているため、出力は残りのコマンドと互換性がなくなります。

答え1

ls次の出力を解析します。いつも問題がある。出力を自動的に処理するには、常に別のツールを使用する必要があります。

特定のケースでは、欠落または互換性のない引数のためではなく、ls送信されたglobのためにコマンドが失敗します。ls非表示の結果を含むすべての結果をリストするように要求し、すぐにグローバル・パターンに一致する結果のみを-aリストするように要求します。*/いいえ開始することと実行できる.すべてを一致させることは、lsグローバルと一致することに限定されます。隠しディレクトリを一致させるための2番目のglobとして使用することも.*/、glob全体を維持してls操作を実行させることもできます。ただし、ls一致させるグローバル変数がある場合は、これを行う必要さえありません。

1つの解決策はls完全にスキップしてシェルグローブを使用することです。

$ du -s */ .*/ | sort -n

この例では多少過剰になる可能性がありますが、より複雑な場合に非常に強力なアプローチは次のように使用することですfind

$ find ./ -type d -maxdepth 1 -exec du -s {} + | sort -n

説明する:

  • find ./ 現在のディレクトリで検索操作を開始します。必要に応じて別のパスを使用できます。
  • -type dディレクトリの内容のみを探す
  • -maxdepth 1サブディレクトリを繰り返し検索するのではなく、現在のディレクトリのディレクトリのみを検索するように指示します。
  • -exec [command] [arguments] {} +これと同様に機能しますxargsが、find名前を引用してエスケープするときは、すべての重い作業を行います。この{}ビットは検索結果に置き換えられます。
  • du -sわかる

-n*数値ソートにはfor演算子を使用します。sortこの場合、アルファベットのソートよりも数値のソートが便利です。

答え2

zshでは、Dglob修飾子を使用してファイル名パターンにドットファイルを含めます。

du -s -- *(D) | sort -k1n

Bashでドットファイルと一致するdotglobようにオプションを設定します。*

shopt -s dotglob
du -s -- * | sort -k1n

kshは他のドットファイルのみを無視し、他のドットファイルは無視するようにFIGNORE設定します。.?(.)...

FIGNORE='.?(.)'
du -- * | sort -k1n

また、見ることができますあるディレクトリ内のすべてのファイル(隠しファイルを含む)を別のディレクトリに移動するには?

関連情報