Se você tiver certeza de que os nomes dos diretórios não contêm espaço em branco, é simples obter todos os nomes de diretório em uma linha:
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Obtendo as informações no python
Se você deseja capturar essa saída em um programa python e transformá-la em uma lista. Usando python2.7 ou melhor:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
Em 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()
Também podemos aproveitar os recursos do Python para reduzir a quantidade de trabalho feito pelo shell e, em particular, para eliminar a necessidade de awk
:
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
Pode-se ir mais além e ler a saída du
diretamente no python, converter os tamanhos em números inteiros e classificar em tamanho. É mais simples, porém, fazer isso com sort -nr
no shell.
Especificando um diretório
Se os diretórios cujo tamanho você deseja não estiverem no diretório atual, existem duas possibilidades:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
e também:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
A diferença entre esses dois é se /some/path
está incluído na saída ou não.