root@floyd:~# du /home/pink --max-depth=1 | sort -nr | cut -f2 | xargs -d '\n' du -shQue 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úsicaActualizació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-SSi, 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).