Classificação dos tamanhos dos arquivos legíveis por humanos

16

Como posso classificar uma lista usando uma classificação de tamanho de arquivo legível para humanos, classificação numérica que leva em conta o identificador de tamanho (G, M, K)? Posso classificar a saída " du -sh " por exemplo?

Problema: Considere o problema de listar arquivos / pastas e classificá-los por seu tamanho. Você pode conseguir isso executando:

du -s * | sort -n

Isto lista os arquivos / pastas ordenados por seus tamanhos. No entanto, o valor do tamanho impresso é em bytes (ou megabytes ou gigabytes se você escolher).

Seria desejável poder classificar com base nos valores legíveis por humanos, para que eu possa executar algo análogo a

du -sh * | <human-readable file sort>

E a pasta de 1,5 GB aparece após 2,0 milhões.

    
por notnoop 02.09.2009 / 21:32

7 respostas

4

Afaik, não existe um comando padrão para fazer isso.

Existem várias soluções alternativas, que foram discutidas quando a mesma pergunta foi feita no Stack Overflow: Como posso classificar du -h saída por tamanho

    
por 02.09.2009 / 21:44
27

Use GNU coreutils > = 7.5:

du-hs * | sort -h

(Extraído desta pergunta de falha do servidor )

Página do manual

Editar: Você pode verificar suas versões usando du --version e sort --version se você estiver usando as versões GNU. Se você estiver usando homebrew, talvez seja necessário usar gdu e gsort .

    
por 16.02.2011 / 19:17
3

Se você está preocupado apenas com arquivos maiores que 1MB, como parece, você pode usar este comando para ordená-los e usar o awk para converter o tamanho para MB:

du -s * | sort -n | awk '{print int($1 / 1024)"M\t"$2}'

Novamente, isso arredonda os tamanhos para o MB mais próximo. Você pode modificá-lo convertendo para a unidade de sua escolha.

    
por 03.09.2009 / 19:39
2

Esse manipula nomes de arquivos com espaços em branco ou apóstrofos e funciona em sistemas que não suportam xargs -d ou sort -h :

du -s * | sort -n | cut -f2 | tr '\n' '
368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
' | xargs -0 -I {} du -sh "{}"

que resulta em:

du -s * | sort -n | cut -f2 | tr '\n' '
368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
' | xargs -0 -I {} du -sh "{}"
    
por 23.11.2014 / 20:00
1

Aqui está outro:

$ du -B1 | sort -nr | perl -MNumber::Bytes::Human=format_bytes -F'\t' -lane 'print format_bytes($F[0])."\t".$F[1]'

Você pode ter que fazer um

$ cpan Number::Bytes::Human

primeiro.

    
por 04.09.2009 / 10:16
1

du -sk * | sort -n | awk '{print $ 2}' | enquanto ler f; do -sh "$ f"; feito

    
por 30.10.2009 / 17:21
1

Este comando irá ordenar por tamanho em MB

du --block-size=MiB --max-depth=1 path | sort -n
    
por 11.03.2013 / 11:59