[Micro TIP] Como obtener un listado del espacio ocupado desde la consola de Linux ordenado de mayor a menor

Command Line Ninjitsu en Maldito Nerd

Necesitás un listado detallado de cuanto ocupa cada directorio en Linux, y lo necesitás ordenado de mayor a menor. ¿Como? Facil:

root@floyd:~# du /home/pink --max-depth=1 | sort -nr | cut -f2 | xargs -d '\n' du -sh

Que te dará por resultado algo como esto:

  65G     /home/pink
  23G     /home/pink/Descargas
  15G     /home/pink/Documentos
  9,0G    /home/pink/Imágenes
  7,9G    /home/pink/ordenar
  6,6G    /home/pink/videos
  4,0G    /home/pink/Música

Actualización – 13/02/2012: Nitsuga en los comentarios de este post se materializó con una idea bastante mejorcita que combina du con sort únicamente y obtiene el mismo resultado final:

du /home/pink/ --max-depth=1 -h | sort -rh

¡Un aplauso para Nitsuga, che!

Ahora si, a continuación, la explicación de como funciona el método largo e inmemorizable.

¿Como funciona?

Se usa du para obtener el espacio ocupado por cada directorio contenido dentro del que se especificó con un máximo de profundidad de 1 nivel (por lo de –max-depth=1) y se le pasa el resultado al comando sort por medio de un pipe.

Sort se encargará de ordenar numéricamente (por lo de –n) y de forma inversa, es decir de mayor a menor (por lo de –r) el resultado obtenido, que se le pasa al comando cut por medio de otro pipe.

Cut deja solamente el contenido del segundo campo y se deshace del resto (por lo de –f2), es decir, ahora que ya está ordenado, se deshace del número y deja solamente el nombre del directorio o archivo en cuestión.

Otro pipe de por medio, xargs va ejecutando du –sh sobre cada uno de los directorios pre ordenados y mostrando el resultado en pantalla usando para delimitar un un argumento de otro el el salto de línea, (por lo de –d ‘\n’).

¿Lo entendiste?

Si lo entendiste te felicito, yo lo tuve que pensar bastante cuando lo ví usar por primera vez (No, no es de mi autoría).

Si no lo entendiste y no tenes ganas o tiempo de entenderlo ya mismo, acordate: Lo viste en Maldito Nerd, o agendate esta página en tus bookmarks, que si te pasa como a mi, lo vas a necesitar un par de veces al año y no te vas a acordar de como carajo era todo el comando.

¿Y si uso Windows en vez de Linux pero igualmente quiero hacerlo por consola?

Bueno, no se puede logar exactamente el mismo resultado pero algo muy parecido se obtiene ejecutando:

dir /S /O-S

Si, así de cortito. Eso demuestra a las claras la superioridad de Windows sobre Linux. No necesito mas pruebas. (Cualquier parecido entre las opciones que le paso al comando dir y la llamada internacional de auxilio es pura coincidencia).

4 comentarios

    1. ¡Aha! Encontré esta joya en el manual de sort:
      -h, –human-numeric-sort
      compare human readable numbers (e.g., 2K 1G)
      […]
      -r, –reverse
      reverse the result of comparisons

      agustin@DosPunto0 🙂 /tmp
      (15:20:47) 19$ du /home/agustin –max-depth=1 -h | sort -rh
      267G /home/agustin/Descargas
      184G /home/agustin/Otros
      85G /home/agustin/Imágenes
      75G /home/agustin/Videos
      16G /home/agustin/Música
      6,0G /home/agustin/Documentos

      1. Hell yeah!

        Mejor, muchísimo mejor tu invento, si señor. Este si que puede uno memorizarlo fácilmente.
        Me lo llevo y voy a actualizar el post para que refleje la situación.

        ¡Gracias y Saludos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *