Como classifico por tamanhos legíveis por humanos numericamente?

17

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

du folder | sort -n

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

du -h folder

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

Como associar du folder e du -h folder para ver a saída classificada como du folder , mas com a primeira coluna de du -h folder

P.S. Este é apenas um exemplo. essa técnica pode ser muito útil para mim (se for possível)

    
por UAdapter 17.11.2011 / 18:02

8 respostas

10

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

du folder > file1
du -h folder > file2

A parte principal é: concatene file1 e file2 linha por linha, com um delimitador adequado.

paste -d '#' file1 file2 > file3

(assumindo que # não aparece em file1 e file2 )

Agora, classifique file3 . Observe que isso será classificado com base no conteúdo file1 e nas quebras por file2 contents. Extraia o resultado relevante usando cut :

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

Veja também man sort para outras opções.

Você também pode salvar isso como um alias, para posterior reutilização. Para fazer isso, adicione o seguinte ao final 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
    
por Prateek 17.11.2011 / 18:56
28

Tente algo como:

du -h folder | sort -h

Alternativas: -n para classificação numérica

Nota: a opção -h de ordenação só existe em versões mais recentes do Ubuntu.

    
por Allu2 17.11.2011 / 18:13
4

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

Infelizmente, a resposta precisa que classifica K M G é difícil e complexa:

Você pode aliasar todo o du comando com um que ordene legível 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 encontrei aqui

link

apenas cd na pasta que você gostaria de saber, então duf

você pode adicionar este duf alias ao final de seu /home/user/.profile fazer o comando duf semi-permenant

resultados:

[email protected]:~$ 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

Eis porque du -sch /var/* | sort -n não funciona, veja a classificação de MKKMMKKMMK

[email protected]:~$ 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
    
por Kat Amsterdam 30.08.2012 / 19:30
2

O comando GNU sort tem a seguinte opção:

-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G).

To have this option on BSD/OSX, you can install sort from coreutils (via brew) and add the bin folder to your PATH into your rc files.

O comando seria assim:

du -ah . | sort -rh | head -20
    
por kenorb 05.03.2015 / 15:25
0

Abra o seu terminal com Ctrl + Alt + t e digite:

  du -sk * | sort -rn 
    
por Ten-Coin 23.12.2013 / 14:40
0

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 Mark Crossfield 23.11.2014 / 20:38
0

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

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

o awk '{print $2}' basicamente imprime os nomes dos arquivos.

    
por yahiaelgamal 30.03.2014 / 10:55
0

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

Eu uso uma forma disso o tempo todo para encontrar arquivos fora de controle.

    
por belacqua 05.06.2013 / 00:22

Tags