GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Auflisten von Verzeichnissen basierend auf der Größe vom größten zum kleinsten in einer einzelnen Zeile

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.


Linux
  1. Finden Sie die größten Dateien und Verzeichnisse in Linux

  2. Sed Zeichen aus neuer Zeile entfernen?

  3. Wie entferne ich eine einzelne Zeile aus dem Verlauf?

  4. Verschieben Sie Dateien basierend auf der Erweiterung in Verzeichnisse

  5. Starten Sie Dateien / Verzeichnisse mit Gnome von der Befehlszeile aus

Programmieren Sie Hardware über die Linux-Befehlszeile

Suchen Sie Amazon-Produkte über die Befehlszeile

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

Kopieren Sie eine Datei in mehrere Verzeichnisse von der Befehlszeile unter Linux

So sichern Sie eine einzelne MySQL-Datenbank über die Befehlszeile

Senden Sie E-Mail in Linux von der Befehlszeile aus