Ferramenta genérica para ordenar por tamanho no linux, entendendo sufixos unitários comuns

0

Eu posso pedir uma lista de arquivos / diretórios por tamanho:

ls -lS

Mas se eu estiver usando du em formato legível:

du --max-depth=1 -h .

Eu recebo:

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

Qual não é ordenado. Existe alguma ferramenta padrão para solicitar este tipo de dados? O padrão sort parece não suportar isso. Preciso rolar sozinho?

    
por dangonfast 26.07.2018 / 11:11

2 respostas

5

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)
    
por 26.07.2018 / 11:35
0

As variantes GNU de ls e sort compreendem -h (mnemônico: -h uman). Você pode usar ls -lSh , ls -sSh ou du -h … | sort -h :

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

Lembre-se de que ls não informa o tamanho do conteúdo do diretório.

    
por 26.07.2018 / 11:36