Si está seguro de que los nombres de los directorios no contienen espacios en blanco, es sencillo obtener todos los nombres de los directorios en una línea:
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Obtener la información en python
Si desea capturar esa salida en un programa de python y convertirla en una lista. Usando python2.7 o mejor:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
En python2.6:
import subprocess
subprocess.Popen("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True, stdout=subprocess.PIPE).communicate()[0].split()
También podemos aprovechar las funciones de python para reducir la cantidad de trabajo realizado por el shell y, en particular, para eliminar la necesidad de awk :
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
Se podría ir más allá y leer el du salida directamente en python, convertir los tamaños a enteros y ordenar por tamaño. Sin embargo, es más simple hacer esto con sort -nr en la concha.
Especificar un directorio
Si los directorios cuyo tamaño desea no están en el directorio actual, existen dos posibilidades:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
y también:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
La diferencia entre estos dos es si /some/path está incluido en la salida o no.
Usando paste
du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -
zsh tiene la capacidad de ordenar sus globs usando calificadores globbing. También puede definir sus propios calificadores globales con funciones. Por ejemplo:
zdu() REPLY=$(du -s -- "$REPLY")
print -r -- [[:alpha:]]*(/nO+zdu)
imprimiría los directorios (/ ) cuyo nombre comienza con una letra (por cierto, [a-z] solo tiene sentido en la configuración regional C) numéricamente (n) ordenados inversamente (O) usando el zdu función.
Tenga en cuenta que cuando lo haga:
du -s a b
Si a y b contienen enlaces duros a los mismos archivos, su uso de disco se contará como a pero no para b . El zsh enfoque aquí evita eso.
Si vas a usar python, yo haría lo mismo desde allí:llama a du -s para cada uno de los archivos y ordenar esa lista allí. Recuerde que los nombres de los archivos pueden contener cualquier carácter, incluidos espacios, tabuladores y saltos de línea.