Eu preciso obter uma lista de saída du legível por humanos.
No entanto, du
não possui uma opção "classificar por tamanho" e a tubulação para sort
não funciona com o sinalizador legível por humanos.
Por exemplo, executando:
du | sort -n -r
Gera um uso de disco classificado por tamanho (decrescente):
du |sort -n -r
65108 .
61508 ./dir3
2056 ./dir4
1032 ./dir1
508 ./dir2
No entanto, executá-lo com o sinalizador legível por humanos não classifica corretamente:
du -h | sort -n -r
508K ./dir2
64M .
61M ./dir3
2.1M ./dir4
1.1M ./dir1
Alguém sabe uma maneira de classificar du -h
por tamanho?
A partir do GNU coreutils 7.5 lançado em agosto de 2009,
sort
permite um-h
parâmetro, que permite sufixos numéricos do tipo produzido pordu -h
:Se você estiver usando um tipo que não suporta
-h
, você pode instalar o GNU Coreutils. Por exemplo, em um Mac OS X mais antigo:Do
sort
manual :-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
Existe uma ferramenta imensamente útil que eu uso chamada ncdu que é projetada para encontrar essas pastas e arquivos de alto uso de disco e removê-los. É baseado em console, rápido e leve, e possui pacotes em todas as principais distribuições.
@Douglas Leeder, mais uma resposta: Classifique a saída legível por humanos de du -h usando outra ferramenta. Como Perl!
Dividido em duas linhas para caber na tela. Você pode usá-lo dessa maneira ou torná-lo um one-liner, funcionará de qualquer maneira.
Resultado:
EDIT: Depois de algumas rodadas de golfe no PerlMonks , o resultado final é o seguinte:
Pelo que vejo, você tem três opções:
du
para classificar antes da exibição.sort
para suportar tamanhos humanos para classificação numérica.Você também pode fazer
du -k
e viver com tamanhos em KiB.Para a opção 3, você pode usar o seguinte script:
Eu também tive esse problema e atualmente estou usando uma solução alternativa:
Isso não produzirá valores dimensionados, mas sempre produzirá o tamanho em megabytes. Isso é menos perfeito, mas para mim é melhor que nada (ou exibir o tamanho em bytes).
Encontrei esta postagem em outro lugar. Portanto, este script de shell fará o que você deseja sem chamar
du
tudo duas vezes. Ele usaawk
para converter os bytes brutos em um formato legível por humanos. Claro, a formatação é um pouco diferente (tudo é impresso com precisão de uma casa decimal).Executando isso no meu
.vim
diretório produz:(Espero que 3,6 milhões de esquemas de cores não sejam excessivos.)
Aqui está um exemplo que mostra os diretórios em uma forma resumida mais compacta. Ele lida com espaços em diretórios/nomes de arquivos.
Esta versão usa
awk
para criar colunas extras para chaves de classificação. Só ligadu
uma vez. A saída deve ser exatamente comodu
.Eu o dividi em várias linhas, mas pode ser recombinado em uma linha.
Explicação:
Experimente sem o
cut
comando para ver o que está fazendo.Aqui está uma versão que faz a classificação dentro do script AWK e não precisa
cut
: