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)

おすすめ記事