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
Попробуйте это: эта операция (с использованием знака%) удалит что-либо после слова foo (если оно находится в переменной var с правой стороны), а затем добавит суффикс к foo.
echo ${var%/foo/*}foo
или же
echo ${var/\/foo\/*/\/foo}
Удаление foo (наконец-то) из приведенной выше команды даст родительскую папку первого появления папки foo. Включение foo даст вам первую папку foo в качестве родительской.
PS: Если в пути нет папки "/foo/", то приведенная выше команда echo выведет любое значение заданного пути (т. Е. $ Var как есть), иначе оно выдаст неправильный вывод для вашей цели ИЛИ может работать правильно только в том случае, если данный путь, т.е. $ var is / foo).