Wenn Sie sicher sind, dass die Verzeichnisnamen keine Leerzeichen enthalten, ist es einfach, alle Verzeichnisnamen in einer Zeile zu erhalten:
du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Informationen in Python übertragen
Wenn Sie diese Ausgabe in einem Python-Programm erfassen und in eine Liste aufnehmen möchten. Mit python2.7 oder besser:
import subprocess
dir_list = subprocess.check_output("du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2\" \"}'", shell=True).split()
In 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()
Wir können auch die Funktionen von Python nutzen, um den Arbeitsaufwand der Shell zu reduzieren und insbesondere die Notwendigkeit von awk
zu eliminieren :
subprocess.Popen("du -sk [a-z]*/ | sort -nr", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].split()[1::2]
Man könnte weiter gehen und die du
lesen direkt in Python ausgeben, die Größen in ganze Zahlen umwandeln und nach Größe sortieren. Einfacher ist es jedoch, dies einfach mit sort -nr
zu tun in der Schale.
Verzeichnis angeben
Wenn sich die Verzeichnisse, deren Größe Sie wünschen, nicht im aktuellen Verzeichnis befinden, gibt es zwei Möglichkeiten:
du -sk /some/path/[a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
und auch:
cd /some/path/ && du -sk [a-z]*/ 2>/dev/null | sort -nr | awk '{printf $2" "}'
Der Unterschied zwischen diesen beiden besteht darin, ob /some/path
in der Ausgabe enthalten ist oder nicht.
Mit paste
du -sk [a-z]* 2>/dev/null | sort -nr| cut -f2- | paste -s -
zsh
hat die Fähigkeit, seine Globs mithilfe von Globbing-Qualifikatoren zu sortieren. Sie können auch Ihre eigenen Glob-Qualifizierer mit Funktionen definieren. Zum Beispiel:
zdu() REPLY=$(du -s -- "$REPLY")
print -r -- [[:alpha:]]*(/nO+zdu)
würde die Verzeichnisse drucken (/
), dessen Name mit einem Buchstaben beginnt (übrigens [a-z]
macht nur im C-Locale Sinn) numerisch (n) rückwärts sortiert (O) mit dem zdu
Funktion.
Beachten Sie dabei Folgendes:
du -s a b
Wenn a
und b
Hardlinks zu denselben Dateien enthalten, wird ihre Festplattennutzung mit a
gezählt aber nicht für b
. Die zsh
Ansatz hier vermeidet das.
Wenn Sie Python verwenden, würde ich von dort aus dasselbe tun:Rufen Sie du -s
auf für jede der Dateien und sortieren Sie diese Liste dort. Denken Sie daran, dass Dateinamen beliebige Zeichen enthalten können, einschließlich Leerzeichen, Tabulator und Zeilenumbruch.