Como classifico numericamente por tamanhos legíveis por humanos?


20

por exemplo, eu tenho um comando que mostra quanto espaço a pasta leva

du folder | sort -n

funciona muito bem, no entanto eu gostaria de ter uma forma legível por humanos

du -h folder

no entanto, se eu fizer isso, não posso classificá-lo como numérico.

Como ingressar du foldere du -h folderver a saída classificada como du folder, mas com a primeira coluna dedu -h folder

PS, este é apenas um exemplo. essa técnica pode ser muito útil para mim (se possível)

Respostas:


11

Aqui está uma abordagem mais geral. Obtenha a saída de du foldere du -h folderem dois arquivos diferentes.

du folder > file1
du -h folder > file2

A parte principal é a seguinte: concatenar file1e file2linha por linha, com um delimitador adequado.

paste -d '#' file1 file2 > file3

(supondo #que não apareça em file1e file2)

Agora classifique file3. Observe que isso será ordenado com base no file1conteúdo e quebrará os vínculos por file2conteúdo. Extraia o resultado relevante usando cut:

sort -n -k1,7 file3 | cut -d '#' -f 2

Também dê uma olhada em man sortoutras opções.


Você também pode salvar isso como um alias, para reutilização posterior. Para fazer isso, adicione o seguinte na parte inferior de ~/.bashrc:

sorted-du () {
    paste -d '#' <( du "$1" ) <( du -h "$1" ) | sort -n -k1,7 | cut -d '#' -f 2
}

Em seguida, abra uma nova sessão de terminal e execute seu novo alias:

sorted-du /home

Adicionei a última parte sobre como transformar sua solução em um alias.
SirCharlo

1
Usar arquivos reais em um pseudônimo (e depois chamá-los de rm) é uma péssima idéia ! Pense no que aconteceria se eu realmente tivesse um arquivo nomeado file3no meu diretório, ele seria substituído e excluído! @ SirCharlo Estou removendo a definição de alias desta resposta e substituindo-a por algo mais seguro.
jmiserez

Bem, askubuntu.com/a/80248/22308 simplesmente faça isso comsort -h
Nam G VU

36

Tente algo como:

du -h folder | sort -h

Alternativas: -npara classificação numérica

Nota: a -hopção de classificação existe apenas nas versões mais recentes do Ubuntu.


3
existe na versão 8.17, então eu acho que esta é a maneira mais fácil
steabert

1
Obrigado a steabert por apontar que o comando sort foi aprimorado de sort --version = 8.17 Esta é a melhor resposta para as versões mais recentes do Ubuntu.
30612 Kat Amsterdam Amsterdã

Este deve ser o único aceito porque ele limpa-shoot que resolve o OP comsort -h
Nam G VU

4

Esta resposta é válida para 10.04.4LTS e versões inferiores do Ubuntu.

Infelizmente, a resposta exata que classifica o KMG é difícil e complexa:

Você pode usar o apelido de todo o comando du com um que classifique legível por humanos usando este

alias duf='du -sk * | sort -n | perl -ne '\''($s,$f)=split(m{\t});for (qw(K M G)) {if($s<1024) {printf("%.1f",$s);print "$_\t$f"; last};$s=$s/1024}'\'

que eu encontrei aqui

http://www.earthinfo.org/linux-disk-usage-sorted-by-size-and-human-readable/

basta colocar um CD na pasta que você gostaria de conhecer e depois duf

você pode adicionar esse alias do duf ao final do seu /home/user/.profile para tornar o comando duf semi-permenante

resultados:

user@hostname:~$ duf
0.0K  Documenten
0.0K  Muziek
0.0K  Openbaar
0.0K  Sjablonen
0.0K  Video's
4.0K  backup_db.sql.g
4.0K  examples.desktop
12.0K xml printer ticket
52.0K hardinfo_report.html
152.0K    librxtxSerial.so
2.7M  jpos
4.4M  nxclient_3.5.0-7_amd64.deb
6.4M  nxnode_3.5.0-4_amd64.deb
6.8M  Downloads
7.4M  nxserver_3.5.0-5_amd64.deb
12.4M NetBeansProjects
18.1M mysqlworkbench.deb
28.3M Afbeeldingen
45.8M ergens-20110928-18.sql.gz
60.5M 2012-06-02ergens_archive.tar.gz
65.5M 2012-08-26ergens_archive.tar.gz
65.6M 2012-08-28ergens_archive.tar.gz
65.6M 2012-08-29ergens_archive.tar.gz
65.7M 2012-08-30ergens_archive.tar.gz
113.0M    Bureaublad
306.2M    ergens-20110928-18.sql

Aqui está por du -sch /var/* | sort -nque não funciona veja a classificação de MKKMMKKMMK

user@hostname:~$ du -sch /var/* |sort -n

0 /var/crash
0 /var/local
0 /var/lock
0 /var/opt
8,0M  /var/backups
12K   /var/games
16K   /var/tmp
17M   /var/log
68M   /var/cache
104K  /var/spool
144K  /var/run
351M  /var/lib
443M  totaal
704K  /var/mail

Eu relatei isso aos desenvolvedores do gnu-core com uma solicitação de recurso para melhorar a função du -h com um recurso de classificação. via bugs-coreutils@gnu.org
Kat Amsterdam

+1, one-liner semelhante:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert 30/08/2012

Apenas tentei seu liner 1 em um sistema ativo. Obtenha um erro de acesso negado e nenhum resultado. Você tentou este comando em um sistema Ubuntu primeiro? Alterei a pasta para / home / nome de usuário
Kat Amsterdam

oh, desculpe, você deve descartar o -d '', isso é uma sobra de usá-lo na saída do comando file.
Steabert 30/08/12

Isso parece funcionar muito bem em sistemas não Linux que não suportam GNU sort.
Stefan Lasiewski

2

O comando GNU sorttem a seguinte opção:

-h, --human-numeric-sort compare números legíveis por humanos (por exemplo, 2K 1G).

Para ter essa opção no BSD / OSX, você pode instalar a sortpartir de coreutils(via brew) e adicionar a pasta bin ao seu PATHem seus arquivos rc .

Portanto, o comando seria semelhante a:

du -ah . | sort -rh | head -20

0

Para versões recentes do Ubuntu, use du -h directory | sort -h.

Eu uso um formulário disso o tempo todo para encontrar arquivos fora de controle.


Duplicado de respondidas Nov 17 '11 às 17:13 Allu2
Elder Geek

0

Abra seu terminal com Ctrl+ Alt+ te digite:

  du -sk * | sort -rn 

: Agora estou acostumado a alterar tanto o Ctrl + Alt + t para o formato acima, que colei o formato necessário no meu Xpad. : D se sente muito bem ser elogiado por um trabalho tão servil :)
Jobin

Todo trabalho que você fez aqui vale a pena complementar.
23313

0

Este lida com nomes de arquivos com espaço em branco ou apóstrofos e funciona em sistemas que não suportam xargs -dou sort -h:

du -s * | sort -n | cut -f2 | tr '\n' '\0' | xargs -0 -I {} du -sh "{}"

o que resulta em:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm

Qual é o ponto de substituir \ncom \0? Não é tarde demais para isso?
Muru

prepara a entrada para xargs -0, que espera que a entrada seja delimitada por NUL (como find -print0 produziria). Caso contrário, você não poderá usar -0 e os apóstrofos terão um significado especial.
Mark Crossfield

Eu sei sobre -0, mas é irrelevante: imgur.com/87w3vfj
muru

Eu acho que está funcionando como você usou um bastão, não um apóstrofo. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield

0

O que eu achei trabalhando em todos os sistemas, independentemente da versão ( sort -hnão funciona para mim) é

du -h $(du * | sort -n | awk '{print $2}')

a awk '{print $2}'basicamente imprime nomes de arquivo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.