¿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)

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

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.


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

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 bugs-coreutils@gnu.org
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

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.


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 

: 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

¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.