¿Cómo clasifico numéricamente los tamaños legibles por humanos?

20

por ejemplo, tengo un comando que muestra cuánto espacio 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 ordenarlo como numérico.

Cómo unirse du foldery du -h folderver la salida ordenada como du folder, pero con la primera columna dedu -h folder

PD: esto es solo un ejemplo. Esta técnica podría ser muy útil para mí (si es posible)

Adaptador UA
fuente

Respuestas:

11

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

du folder > file1
du -h folder > file2

La parte clave es esta: concatenar file1y file2línea por línea, con un delimitador adecuado.

paste -d '#' file1 file2 > file3

(suponiendo #que no aparece en file1y file2)

Ahora ordena file3. Tenga en cuenta que esto se ordenará según el file1contenido y separará los vínculos por file2contenido. Extraiga el resultado relevante usando cut:

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

También eche un vistazo a man sortotras opciones.


También puede guardar esto como un alias, para su posterior reutilización. Para hacerlo, agregue lo siguiente al final 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
Prateek
fuente
Agregué la última parte sobre cómo convertir su solución en un alias.
SirCharlo
1
¡Usar archivos reales en un alias (y luego llamarlos con rm) es una muy, muy mala idea ! ¡Piense en lo que sucedería si realmente tuviera un archivo nombrado file3en mi directorio, se sobrescribiría y luego se eliminaría! @SirCharlo Estoy eliminando la definición de alias de esta respuesta y reemplazándola por algo más seguro.
jmiserez
Bueno, askubuntu.com/a/80248/22308 simplemente haga esto consort -h
Nam G VU
36

Intenta algo como:

du -h folder | sort -h

Alternativas: -npara clasificación numérica

Nota: la -hopción de ordenar solo existe en las versiones más nuevas de Ubuntu.

Allu2
fuente
3
hay en la versión 8.17, así que supongo que esta es la forma más fácil
steabert
1
Gracias a steabert por señalar que el comando de clasificación se ha mejorado desde sort --version = 8.17 Esta es la mejor respuesta para las versiones más nuevas de Ubuntu.
Kat Amsterdam
Esta debería ser la aceptada porque es un disparo limpio que resuelve el OP consort -h
Nam G VU
4

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

Desafortunadamente, la respuesta precisa que clasifica KMG es difícil y compleja:

Puede usar el alias de todo el comando du con uno que pueda ser leído 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í

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

solo cd en la carpeta que le gustaría saber y luego duf

puede agregar este alias duf al final de su /home/user/.profile para que el comando duf sea semipermanente

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 -nno 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
Kat Amsterdam
fuente
He informado esto a los desarrolladores de gnu-core con una solicitud de función para mejorar la función du -h con una función de clasificación. via [email protected]
Kat Amsterdam
+1, una línea similar:du folder | sort -n | cut -f 2 | while IFS= read -r -d '' path; do du -sh -- "$path"; done
steabert
Acabo de probar su 1 liner en un sistema en vivo. Obtenga un error de acceso denegado y ningún resultado du. ¿Intentó primero este comando en un sistema Ubuntu? Cambié la carpeta a / home / username
Kat Amsterdam
oh, lo siento, deberías soltar el -d '', eso es un sobrante de usarlo en la salida del comando de archivo.
steabert
Esto parece funcionar muy bien en sistemas que no son Linux que no son compatibles con GNU sort.
Stefan Lasiewski
2

El comando GNU sorttiene la siguiente opción:

-h, --human-numeric-sort compare números legibles por humanos (p. ej., 2K 1G).

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

Entonces el comando se vería así:

du -ah . | sort -rh | head -20
kenorb
fuente
0

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

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

belacqua
fuente
Duplicado de la respuesta el 17 de noviembre de 11 a las 17:13 Allu2
Elder Geek el
0

Abra su terminal con Ctrl+ Alt+ ty escriba:

  du -sk * | sort -rn 
rɑːdʒɑ
fuente
: DI ahora estoy acostumbrado a cambiar Ctrl + Alt + t al formato anterior tanto que he pegado el formato requerido en mi Xpad. : D Se siente genial ser felicitado por un trabajo tan servil :)
jobin
Cada trabajo que hiciste aquí merece un complemento.
rɑːdʒɑ
0

Este maneja nombres de archivos con espacios en blanco o apóstrofes, y funciona en sistemas que no admiten xargs -do sort -h:

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

lo que resulta en:

368K    diskmanagementd
392K    racoon
468K    coreaudiod
472K    securityd
660K    sshd
3.6M    php-fpm
Mark Crossfield
fuente
¿Cuál es el punto de reemplazar \ncon \0? ¿No es demasiado tarde para eso?
muru
prepara la entrada para xargs -0, que espera que la entrada esté delimitada por NUL (como produciría find -print0). De lo contrario, no puede usar -0, y los apóstrofes tienen un significado especial.
Mark Crossfield
Lo sé -0, pero es irrelevante: imgur.com/87w3vfj
muru
Creo que está funcionando, ya que ha utilizado un backtick, no un apóstrofe. gist.github.com/mrmanc/8aef830945ce03aa65f0
Mark Crossfield
0

El que encontré funcionando en todos los sistemas, independientemente de la versión ( sort -hno funciona para mí) es

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

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

yahiaelgamal
fuente