bash: получить путь к родительскому каталогу по имени

Я пытаюсь получить путь к ближайшему родительскому каталогу с именем foo:

/this/is/the/path/to/foo/bar/baz

yields

/this/is/the/path/to/foo

Есть идеи, как мне это сделать?

2 ответа

Использование BASH для работы со строками:

p='/this/is/the/path/to/foo/bar/baz'
name='foo'

r="${p%/$name/*}/$name"

echo "$r"
/this/is/the/path/to/foo

ИЛИ лучше было бы использовать:

p='/this/is/afoo/food/path/to/foo/bar/baz'
echo "${p/\/$name\/*/\/$name}"
/this/is/afoo/food/path/to/foo

BASH FAQ

Попробуйте это: эта операция (с использованием знака%) удалит что-либо после слова foo (если оно находится в переменной var с правой стороны), а затем добавит суффикс к foo.

echo ${var%/foo/*}foo

или же

echo ${var/\/foo\/*/\/foo}

Удаление foo (наконец-то) из приведенной выше команды даст родительскую папку первого появления папки foo. Включение foo даст вам первую папку foo в качестве родительской.

PS: Если в пути нет папки "/foo/", то приведенная выше команда echo выведет любое значение заданного пути (т. Е. $ Var как есть), иначе оно выдаст неправильный вывод для вашей цели ИЛИ может работать правильно только в том случае, если данный путь, т.е. $ var is / foo).

Другие вопросы по тегам