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.