¿Cómo ordeno numéricamente por tamaño humano legible?

17

por ejemplo, tengo un comando que muestra la cantidad de espacio que ocupa la carpeta

du folder | sort -n

funciona muy bien, sin embargo, me gustaría tener una forma legible por humanos

du -h folder

sin embargo, si hago eso, no puedo clasificarlo como numérico.

Cómo unir du folder y du -h folder para ver la salida ordenada como du folder , pero con la primera columna de du -h folder

P.S. esto es solo un ejemplo esta técnica podría ser muy útil para mí (si es posible)

    
pregunta UAdapter 17.11.2011 - 17:02

8 respuestas

10

Aquí hay un enfoque más general. Obtenga la salida de du folder y du -h folder en dos archivos diferentes.

du folder > file1
du -h folder > file2

La parte clave es esta: concatenar file1 y file2 línea por línea, con un delimitador adecuado.

paste -d '#' file1 file2 > file3

(suponiendo que # no aparece en file1 y file2 )

Ahora ordena file3 . Tenga en cuenta que esto se ordenará en función de los contenidos de file1 y se romperán los lazos por los contenidos de file2 . Extraiga el resultado relevante usando cut :

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

También eche un vistazo a man sort para otras opciones.

También puede guardar esto como un alias, para su posterior reutilización. Para hacerlo, agregue lo siguiente a la parte inferior de ~/.bashrc :

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

Luego, abra una nueva sesión de terminal y ejecute su nuevo alias:

sorted-du /home
    
respondido por el Prateek 17.11.2011 - 17:56
28

Prueba algo como:

du -h folder | sort -h

Alternativas: -n para ordenación numérica

Nota: la opción de ordenación -h solo existe en las versiones más recientes de Ubuntu.

    
respondido por el Allu2 17.11.2011 - 17:13
4

Esta respuesta es válida para 10.04.4LTS y versiones inferiores de Ubuntu.

Desafortunadamente, la respuesta precisa que clasifica K M G es difícil y compleja:

Puede alias todo el comando du con uno que ordene los datos legibles 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 encontré aquí

enlace

simplemente cd en la carpeta que te gustaría saber y luego duf

podría agregar este alias duf al final de su /home/user/.profile para hacer el comando duf semipermenante

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

Aquí es por qué du -sch /var/* | sort -n no funciona ver la clasificación 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
    
respondido por el Kat Amsterdam 30.08.2012 - 17:30
2

El comando GNU sort tiene la siguiente opción:

  

-h , --human-numeric-sort compara números legibles por humanos (por ejemplo, 2K 1G).

     

Para tener esta opción en BSD / OSX, puede instalar sort desde coreutils (a través de brew ) y agregar la carpeta bin a su PATH en sus archivos rc .

Entonces el comando se vería así:

du -ah . | sort -rh | head -20
    
respondido por el kenorb 05.03.2015 - 14:25
0

Para las versiones recientes de Ubuntu, use du -h directory | sort -h .

Uso una forma de esto todo el tiempo para encontrar archivos fuera de control.

    
respondido por el belacqua 04.06.2013 - 22:22
0

Abra su terminal con Ctrl + Alt + t y escriba:

  du -sk * | sort -rn 
    
respondido por el rɑːdʒɑ 23.12.2013 - 13:40
0

Esta maneja los nombres de archivo con espacios en blanco o apóstrofes, y funciona en sistemas que no admiten xargs -d o 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 en:

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 "{}"
    
respondido por el Mark Crossfield 23.11.2014 - 19:38
0

El que encontré trabajando en todos los sistemas, independientemente de la versión ( sort -h no me funciona) es

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

el awk '{print $2}' básicamente imprime los nombres de los archivos.

    
respondido por el yahiaelgamal 30.03.2014 - 08:55

Lea otras preguntas en las etiquetas