Jika Anda yakin bahwa nama direktori tidak mengandung spasi, maka mudah untuk mendapatkan semua nama direktori dalam satu baris:
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Memasukkan informasi ke dalam python
Jika Anda ingin menangkap keluaran itu dalam program python dan membuatnya menjadi daftar. Menggunakan python2.7 atau lebih baik:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
Di 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()
Kita juga dapat memanfaatkan fitur python untuk mengurangi jumlah pekerjaan yang dilakukan oleh shell dan, khususnya, untuk menghilangkan kebutuhan akan awk
:
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
Seseorang dapat melangkah lebih jauh dan membaca du
keluaran langsung ke python, ubah ukuran menjadi bilangan bulat, dan urutkan berdasarkan ukuran. Namun, ini lebih sederhana, cukup lakukan ini dengan sort -nr
di dalam cangkang.
Menentukan direktori
Jika direktori yang ukurannya Anda inginkan tidak ada di direktori saat ini, ada dua kemungkinan:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
dan juga:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Perbedaan antara keduanya adalah apakah /some/path
termasuk dalam output atau tidak.
Menggunakan paste
du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -
zsh
memiliki kemampuan untuk mengurutkan gumpalannya menggunakan kualifikasi globbing. Anda juga dapat menentukan kualifikasi glob Anda sendiri dengan fungsi. Misalnya:
zdu() REPLY=$(du -s -- "$REPLY")
print -r -- [[:alpha:]]*(/nO+zdu)
akan mencetak direktori (/
) yang namanya dimulai dengan huruf (btw, [a-z]
hanya masuk akal di lokal C) secara numerik (n) diurutkan terbalik (O) menggunakan zdu
fungsi.
Perhatikan bahwa ketika Anda melakukannya:
du -s a b
Jika a
dan b
berisi hardlink ke file yang sama, penggunaan disk mereka akan dihitung untuk a
tetapi tidak untuk b
. zsh
pendekatan di sini menghindari itu.
Jika Anda akan menggunakan python, saya akan melakukan hal yang sama dari sana:panggil du -s
untuk setiap file, dan urutkan daftar itu di sana. Ingatlah bahwa nama file dapat berisi karakter apa pun termasuk spasi, tab, dan baris baru.