Подтвердить что ты не робот

Bash script regex, чтобы получить путь к каталогу до n-го уровня

Я использую PWD для получения текущего рабочего каталога. Есть ли SED или регулярное выражение, которое я могу использовать, скажем, чтобы получить полный путь к двум родителям?

4b9b3361

Ответ 1

Почему sed или регулярное выражение? Почему бы не dirname:

parent=`dirname $PWD`
grandparent=`dirname $parent`

Edit:

@Даний указывает в комментариях, что, по-видимому, $() является предпочтительным по сравнению с backquotes `` для замены команд в POSIX-совместимых оболочках. У меня нет опыта с ними. Дополнительная информация:

http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_03

Итак, если это относится к вашей оболочке, вы можете (должны?) использовать:

parent=$(dirname $PWD)
grandparent=$(dirname $parent)

Ответ 2

Это должно работать в оболочках POSIX:

echo ${PWD%/*/*}

который даст вам абсолютный путь, а не относительный.

Ответ 3

почему бы не использовать

"${PWD}/../.."

?

Ответ 4

Не sed или регулярное выражение, но это делает произвольное родительское количество:

$ cd $(mktemp -dp $(mktemp -dp $(mktemp -dp $(mktemp -d)))) && \
> n=3 && \
> readlink -f  ${PWD}/$(for i in $(seq ${n}); do echo -n '../' ; done)
/tmp/tmp.epGcUeLV9q

В этом примере я cd в 5-кратный временный каталог, назначьте n=3, постройте относительный путь n с ${PWD}, а -f, --canonicalize результат с readlink.