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
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.
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
Use GNU coreutils > = 7.5:
du-hs * | sort -h
(Extraído desta pergunta de falha do servidor )
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
.
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.
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 "{}"
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.
du -sk * | sort -n | awk '{print $ 2}' | enquanto ler f; do -sh "$ f"; feito
Este comando irá ordenar por tamanho em MB
du --block-size=MiB --max-depth=1 path | sort -n