Preciso obter uma lista de saída duplamente legível por humanos.
No entanto, du
não possui uma opção "classificar por tamanho" e a canalização para sort
não funciona com o sinalizador legível por humanos.
Por exemplo, executando:
du | sort -n -r
Produz um uso classificado do disco 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?
du
mas adiciona -h aosort
comando. Você pode adicionar-rh
para que os maiores sejam os primeiros no arquivo, caso contrário, você precisarátail
ver os porcos espaciais.Respostas:
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 uma classificação que não suporta
-h
, poderá instalar o GNU Coreutils. Por exemplo, em um Mac OS X mais antigo:Desde
sort
o manual :-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G)
fonte
du -BM | sort -nr
como uma solução alternativa - é legível por seres humanos o suficiente e é classificada, se alguém estiver preso com coreutils mais antigos.du -hs * | gsort -h
du -BM
imprime tudo em megabytes, para que um arquivo de 168K seja exibido como 0M. A menos que haja alguma outra discrepância de versão que eu não conheça. Minha versãodu
mostra apenas valores inteiros de megabytes.fonte
@Douglas Leeder, mais uma resposta: classifique a saída legível por humanos de du -h usando outra ferramenta. Como Perl!
Divida em duas linhas para caber na tela. Você pode usá-lo dessa maneira ou torná-lo único, pois funcionará de qualquer maneira.
Resultado:
EDIT: Após algumas voltas de golfe no PerlMonks , o resultado final é o seguinte:
fonte
stderr
causa dadie
alteração, para que seja ativadastdout
?die
para aprint
e ele irá parastdout
. São apenas mais dois personagens.Existe uma ferramenta imensamente útil que eu uso chamada ncdu, projetada para encontrar essas pastas e arquivos de alto uso em disco e removê-los. É baseado em console, rápido e leve, e possui pacotes em todas as principais distribuições.
fonte
du
, se você quiser apenas identificar os diretórios grandes.fonte
du -k --total
, dá erro no finaldu: cannot access 'total': No such file or directory
head
adicionando `| cabeça -50` no final.Tanto quanto eu posso ver, 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 no KiB.Para a opção 3, você pode usar o seguinte script:
fonte
Eu também tive esse problema e atualmente estou usando uma solução alternativa:
Isso não produzirá valores escalados, mas sempre produzirá o tamanho em megabytes. Isso é menos que perfeito, mas para mim é melhor que nada (ou exibir o tamanho em bytes).
fonte
Encontrou esta postagem em outro lugar. Portanto, esse script de shell fará o que você deseja, sem precisar chamar
du
tudo duas vezes. Ele usaawk
para converter os bytes brutos em um formato legível por humanos. Obviamente, a formatação é um pouco diferente (tudo é impresso com precisão de uma casa decimal).Executar isso no meu
.vim
diretório gera:(Espero que 3,6 milhões de esquemas de cores não sejam excessivos.)
fonte
Esta versão usa
awk
para criar colunas extras para chaves de classificação. Só ligadu
uma vez. A saída deve ser exatamente igualdu
.Dividi-o em várias linhas, mas ele pode ser recombinado em uma única linha.
Explicação:
Experimente sem o
cut
comando para ver o que está fazendo.Aqui está uma versão que faz a classificação no script AWK e não precisa
cut
:fonte
du -sh *
mostrar apenas os arquivos e diretórios imediatos sem descida recursiva.Aqui está um exemplo que mostra os diretórios em um formato resumido mais compacto. Ele lida com espaços no diretório / nomes de arquivos.
fonte
classificar arquivos por tamanho em MB
fonte
Eu tenho um wrapper python simples, mas útil para du chamado dutop . Observe que nós (os mantenedores do coreutils) estamos considerando adicionar a funcionalidade para classificar para classificar diretamente a saída "humana".
fonte
sort
flag)Tenho outro:
Estou começando a gostar de perl. Você pode ter que fazer uma
primeiro. Para todos os hackers perl por aí: Sim, eu sei que a parte de classificação também pode ser feita em perl. Provavelmente também a parte dupla.
fonte
Esse trecho foi descaradamente descarado de 'Jean-Pierre' em http://www.unix.com/shell-programming-scripting/32555-du-h-sort.html . Existe uma maneira de melhor creditar ele?
fonte
23423423432423
Use o sinalizador "-g"
E no meu diretório / usr / local produz resultados como este:
fonte
Outro:
fonte
Aqui está o método simples que eu uso, uso muito baixo de recursos e fornece o que você precisa:
fonte
Encontrei este on-line ... parece funcionar OK
fonte
Aprendi awk ao inventar este exemplo ontem. Demorou algum tempo, mas foi muito divertido e aprendi a usar o awk.
Ele roda apenas du uma vez e tem uma saída muito semelhante à du -h
Mostra números abaixo de 10 com um ponto decimal.
fonte
du -cka --max-depth = 1 / var / log | classificar -rn | cabeça -10 | awk '{print ($ 1) / 1024, "MB", $ 2'}
fonte
Se você precisar manipular espaços, poderá usar o seguinte
A instrução sed adicional ajudará a aliviar problemas com pastas com nomes como Suporte a aplicativos
fonte
Voilà:
fonte
http://dev.yorhel.nl/ncdu
command: ncdu
Navegação no diretório, classificação (nome e tamanho), gráficos, legível por humanos, etc ...
fonte
Outra
awk
solução -fonte
Eu estava usando a solução fornecida pelo @ptman, mas uma alteração recente no servidor deixou de ser viável. Em vez disso, estou usando o seguinte script bash:
fonte
du -d 1
sintaxe do BSD é suportada pelo GNU du desde que o coreutils 8.6 foi lançado em 2010 (embora sua primeira disponibilidade do Red Hat fosse o RHEL 7 em 2014), então você não precisa mais--maxdepth=1
. Eu só descobri isso recentemente.fonte
Há muitas respostas aqui, muitas das quais são duplicadas. Vejo três tendências: passando por uma segunda ligação, usando código complicado de shell / awk e usando outros idiomas.
Aqui está uma solução compatível com POSIX usando du e awk que deve funcionar em todos os sistemas.
Adotei uma abordagem um pouco diferente, acrescentando
-x
para garantir que permaneçamos no mesmo sistema de arquivos (eu só preciso dessa operação quando tenho pouco espaço em disco, então por que eliminar as coisas que montei nessa árvore do FS ou movi e symlinked back?) e exibindo unidades constantes para facilitar a análise visual. Nesse caso, normalmente escolho não classificar para poder ver melhor a estrutura hierárquica.(Como isso está em unidades consistentes, você poderá anexá-
| sort -n
lo se realmente quiser classificar os resultados.)Isso filtra qualquer diretório cujo conteúdo (cumulativo) não exceda 512 MB e exibe tamanhos em gigabytes. Por padrão, du usa um tamanho de bloco de 512 bytes (a condição de 2 20 blocos do awk é de 512 MB e seu divisor 2 21 converte as unidades em GB - poderíamos usar
du -kx
com$1 > 512*1024
es/1024^2
ser mais legível por humanos). Dentro da condição awk, definimoss
o tamanho para removê-lo da linha ($0
). Isso mantém o delimitador (que é recolhido em um único espaço); portanto, o final%s
representa um espaço e, em seguida, o nome do diretório agregado.%7s
alinha o%.2f
tamanho arredondado de GB (aumente para%8s
se você tiver> 10 TB).Diferentemente da maioria das soluções aqui, isso suporta diretórios com espaços em seus nomes (embora todas as soluções, incluindo esta, manuseiem incorretamente os nomes de diretórios que contêm quebras de linha).
fonte
Pelo menos com as ferramentas usuais, isso será difícil devido ao formato em que os números legíveis por humanos estão (observe que esse tipo faz um "bom trabalho" aqui, pois classifica os números - 508, 64, 61, 2, 2 - simplesmente não é possível classificar números de ponto flutuante com um multiplicador adicional).
Eu tentaria o contrário - use a saída de "du | sort -n -r" e depois converta os números em formato legível por humanos com algum script ou programa.
fonte
O que você pode tentar é:
Espero que ajude.
fonte
xargs
portanto esse formulário era necessário. No entanto, para arquivos com espaços neles, você precisa definir o IFS:IFS=$'\n'
fonte