Antworten:
Es gibt nichts Eingebautes zu finden, auch nicht GNU. Sie können die Ausgabe von findnach der Anzahl der Schrägstriche sortieren, zum Beispiel mit Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<> ist die Liste aller Eingabezeilen;$a =~ s!/!/!gist die Anzahl der Schrägstriche $a, die wir als Sortierkriterium verwenden.Wenn Sie zsh verwenden können:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/* listet alle Dateien im aktuellen Verzeichnis und den Unterverzeichnissen auf.oesteuert die Reihenfolge, in der Übereinstimmungen zurückgegeben werden: Sie werden nach dem Wert von, REPLYnachdem der Code hier ausgeführt wurde, in Anführungszeichen für jede Übereinstimmung sortiert, wobei REPLYanfangs der übereinstimmende Pfad festgelegt wurde.$REPLYum, um alles außer Schrägstrichen zu löschen. Das Ergebnis besteht also aus allem in Tiefe 1 (Leerergebnis $REPLY), dann aus allem in Tiefe 2 ( $REPLYendet zu sein /), Tiefe 3 ( //) usw.Nee
In dieser Frage zu SO finden Sie Problemumgehungen.
Mein Gefühl ist, dass du kannst. Es beinhaltet grep und so und eine Schleife, aber ich finde, es funktioniert sehr gut, speziell für Ihren Fall, dass der Fund nicht abgeschlossen werden muss.
Es ist ressourcenintensiver, weil:
Das ist gut, weil:
#! / bin / bash
Tiefe = 0
während find -mindepth $ depth -maxdepth $ depth | grep '.'
machen
Tiefe = $ ((Tiefe + 1))
getan
Sie können es auch ganz einfach in eine Zeile einpassen:
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
Aber ich bevorzuge kleine Skripte gegenüber dem Tippen ...