Я хотел бы попробовать что-то вроде:
find -type d | sort | grep -A 1 "$(basename "$PWD")\$" | tail -1
Другими словами: подсвечивает все каталоги и находит тот, который идет после текущего в списке. С окончанием \$
он перебирает ваши подкаталоги, без него он переходит в следующий каталог на том же уровне.
Для предыдущего каталога вы используете -B 1
и head -1
.
Редактировать: некоторые улучшения:
Приведенный выше код имеет проблемы, если имена файлов содержат вещи, которые можно интерпретировать как синтаксис регулярных выражений (в частности, символы в скобках), поэтому лучше сделайте это
grep -F
(но вы больше не можете использовать\$
)Чтобы избежать ложных срабатываний, если имя каталога не является начальной частью другого, используйте префикс /, чтобы сопоставление происходило с самого начала.
Итак, улучшенная форма это:
find -type d | sort | grep -A 1 -F "/$(basename "$PWD")" | tail -1