Linuxでサイズ別にソートする汎用ツール、一般的な単位サフィックスについて学びます

Linuxでサイズ別にソートする汎用ツール、一般的な単位サフィックスについて学びます

ファイル/ディレクトリのリストをサイズで並べ替えることができます。

ls -lS

duただし、人間が読める形式で使用する場合:

du --max-depth=1 -h .

私は得る:

128K    ./something
3,3M    ./more
3,2M    ./even-more
...

注文していないもの。そのようなデータを注文する標準的なツールはありますか?標準はsortこれをサポートしていないようです。自分でやるべきですか?

答え1

GNUには、これを処理するための/オプションとソートキーフラグがsortあります(1024単位(1Kの前に1023がオーム)に基づいてソートを期待します。これはGNUでも計算される方法です)。-h--human-numeric-sorthdu

thisを使用すると、一部の精度が失われるため、du -h順序が間違っている可能性があります。

$ du -k a b
1212    a
1208    b
$ du -h a b | sort -h
1.2M    a
1.2M    b

@StephenKittが述べたように、完全なdu精度を提供し、次に変換するように指示することで問題を解決できます。人類たとえば、GNUソート形式を使用しますnumfmt

$ du --block-size=1 a b | sort -n | numfmt --to=iec
1.2M b
1.2M a

(間隔は影響を受けます。)上記の内容はすべて、ファイル名に改行文字が含まれていないと想定しています。

サイズによるソートに関する一般的な質問に関しては、zsh globにはoLglob修飾子があります(ディスク使用量ではなくサイズごとにソートされることに注意してください)。

ls -S実行できます(GNUを使用してソートされていません)ls-U

ls -ldU -- *(oL)

解決後にサイズ別にシンボリックリンクを並べ替える場合:

ls -LldU -- *(-oL)
wc -c -- *(-oL)

答え2

lssortGNUバリアント-h(ニーモニック:uman)を理解しました-hls -lShls -sShまたは以下を使用できますdu -h … | sort -h

du --max-depth=1 -h . | sort -h

lsディレクトリの内容のサイズは報告されないことに注意してください。

関連情報