![サイズに応じてすべてのディレクトリを一覧表示するには? [親ディレクトリを除く]](https://linux33.com/image/16998/%E3%82%B5%E3%82%A4%E3%82%BA%E3%81%AB%E5%BF%9C%E3%81%98%E3%81%A6%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E4%B8%80%E8%A6%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%EF%BC%9F%20%5B%E8%A6%AA%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%92%E9%99%A4%E3%81%8F%5D.png)
いくつかのランダムなフォルダがあり、それらのいくつかは隠されています(ピリオドで始まります)。サイズ別に並べ替えてすべて一覧表示したいです。
私の心の中には、次のような考えがあります。
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では、D
glob修飾子を使用してファイル名パターンにドットファイルを含めます。
du -s -- *(D) | sort -k1n
Bashでドットファイルと一致するdotglob
ようにオプションを設定します。*
shopt -s dotglob
du -s -- * | sort -k1n
kshは他のドットファイルのみを無視し、他のドットファイルは無視するようにFIGNORE
設定します。.?(.)
.
..
FIGNORE='.?(.)'
du -- * | sort -k1n
また、見ることができますあるディレクトリ内のすべてのファイル(隠しファイルを含む)を別のディレクトリに移動するには?。