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