Antworten:
Es gibt nichts Eingebautes zu finden, auch nicht GNU. Sie können die Ausgabe von find
nach 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!/!/!g
ist 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.oe
steuert die Reihenfolge, in der Übereinstimmungen zurückgegeben werden: Sie werden nach dem Wert von, REPLY
nachdem der Code hier ausgeführt wurde, in Anführungszeichen für jede Übereinstimmung sortiert, wobei REPLY
anfangs der übereinstimmende Pfad festgelegt wurde.$REPLY
um, 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 ( $REPLY
endet 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 ...