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,
- finden und drucken Sie hier alle Verzeichnisse in der Tiefe in erster Reihenfolge
- Zählen Sie die Anzahl der Schrägstriche in jedem Verzeichnis und stellen Sie sie dem Pfad voran
- nach Tiefe sortieren (d. h. nach Anzahl der Schrägstriche)
- 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