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

Wie liste ich alle Verzeichnisse an einem Ort rekursiv auf, Breite zuerst?

Wenn Sie dies mit Standardwerkzeugen tun möchten, sollte die folgende Pipeline funktionieren:

find . -type d | perl -lne 'print tr:/::, " $_"' | sort -n | cut -d' ' -f2

Das heißt,

  1. finden und drucken Sie hier alle Verzeichnisse in der Tiefe in erster Reihenfolge
  2. Zählen Sie die Anzahl der Schrägstriche in jedem Verzeichnis und stellen Sie sie dem Pfad voran
  3. nach Tiefe sortieren (d. h. nach Anzahl der Schrägstriche)
  4. nur den Pfad extrahieren.

Um die gefundene Tiefe einzuschränken, fügen Sie dem find-Befehl das Argument -maxdepth hinzu.

Wenn Sie möchten, dass die Verzeichnisse in derselben Reihenfolge aufgelistet werden, in der sie ausgegeben werden, verwenden Sie "sort -n -s" anstelle von "sort -n"; das "-s"-Flag stabilisiert die Sortierung (d. h. behält die Eingabereihenfolge zwischen Elementen bei, die sich gleich vergleichen).


Der find Befehl unterstützt -printf Option, die viele Platzhalter erkennt.

Ein solcher Platzhalter ist %d was die Tiefe des gegebenen Pfades darstellt, relativ zu wo find gestartet.

Daher können Sie folgenden einfachen Einzeiler verwenden:

find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-

Es ist ziemlich einfach und hängt nicht von schweren Werkzeugen wie perl ab .

Wie es funktioniert:

  • erzeugt intern eine Liste von Dateien, die jeweils als Zwei-Felder-Zeile gerendert werden
  • das erste Feld enthält die Tiefe, die für die (umgekehrte) numerische Sortierung verwendet und dann weggeschnitten wird
  • das Ergebnis ist eine einfache Dateiauflistung, eine Datei pro Zeile, in der tiefsten Reihenfolge

Linux
  1. So listen Sie alle angemeldeten Benutzer auf

  2. Wie man alle Dateien und Verzeichnisse rekursiv auflistet

  3. Wie listet man rekursiv Verzeichnisse in C unter Linux auf?

  4. Wie finde ich die größten Verzeichnisse oder größten Dateien?

  5. Wie listet man Dateien rekursiv auf und sortiert sie nach Änderungszeit?

So listen Sie alle Datenbanken in PostgreSQL auf

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So finden Sie alle installierten Schriftarten in Linux

Alle Dateien in einem Verzeichnis rekursiv auflisten, einschließlich Dateien in Symlink-Verzeichnissen

So entfernen Sie alle .svn-Verzeichnisse aus meinen Anwendungsverzeichnissen

Wie listet man die Verzeichnisgröße aller untergeordneten Verzeichnisse auf?