Ich würde so etwas versuchen:
find -type d | sort | grep -A 1 "$(basename "$PWD")\$" | tail -1
Mit anderen Worten: Legt alle Verzeichnisse und sucht nach dem aktuellen Verzeichnis in der Liste. Mit der Endung werden \$
Ihre Unterverzeichnisse iteriert, ohne dass es zum nächsten Verzeichnis auf derselben Ebene geht.
Für das vorherige Verzeichnis verwenden Sie -B 1
und head -1
.
Edit: einige Verbesserungen:
Der obige Code hat Probleme, wenn Dateinamen Dinge enthalten, die als Regex-Syntax interpretiert werden können (insbesondere Zeichen in Klammern). Machen Sie dies daher besser als a
grep -F
(aber Sie können die nicht mehr verwenden\$
).Um falsche Treffer zu vermeiden, wenn ein Verzeichnisname ein nicht initialer Teil eines anderen ist, muss ein / vorangestellt werden, damit die Übereinstimmung von Anfang an auftritt.
Die verbesserte Form ist also:
find -type d | sort | grep -A 1 -F "/$(basename "$PWD")" | tail -1