O GNU sort
tem um sinalizador de -h
/ --human-numeric-sort
e h
sort para manipular esses (ele espera unidades baseadas em 1024 (1.023 classificadas antes de 1K), que são como o% GNUdu
conta também.
Agora observe que alguma precisão é perdida quando você usa du -h
, então o pedido pode acabar errado:
$ du -k a b
1212 a
1208 b
$ du -h a b | sort -h
1.2M a
1.2M b
Como mencionado por @StephenKitt, você pode contorná-lo dizendo du
para obter a precisão total e somente converter para o formato humano após a classificação usando por exemplo GNU numfmt
:
$ du --block-size=1 a b | sort -n | numfmt --to=iec
1.2M b
1.2M a
(cuidado com o espaçamento afetado). Todos os itens acima assumem que os nomes dos arquivos não contêm caracteres de nova linha.
Quanto à questão genérica sobre ordenação por tamanho, zsh
globs tem um qualificador oL
glob para isso (note que é pelo tamanho, não pelo uso do disco).
ls -S
pode ser feito (com GNU ls
para seu -U
para não classificado):
ls -ldU -- *(oL)
Para classificar por tamanho após a resolução de links simbólicos:
ls -LldU -- *(-oL)
wc -c -- *(-oL)