Как мне найти родительский каталог с заданным именем?

Предыдущие респонденты давали более полные объяснения, чем это, но вот прием, который определенно работает, делая в значительной степени именно то, что он хочет:

$ tail -f <filename>

Покажет конец файла в процессе его записи. Удобно, если вы хотите передать STDERR в файл, но все еще видите его, например, в другом окне терминала.

1
28.03.2020, 07:03
1 ответ

Решение состоит в том, чтобы дважды использовать подстановку параметров.

Мы начинаем с сохранения пути к каталогу в переменной (, если вы имеете дело с текущим рабочим каталогом, вы можете пропустить это и использовать PWDвместо pпозже):

$ p=/a/b/c/d/e/c/f/g

Затем мы можем удалить самую длинную строку префикса, соответствующую */c/, из этой:

$ echo "${p##*/c/}"
f/g

Затем мы понимаем, что если бы этот результат был удален из конца из $p, мы получили бы желаемый результат:

$ echo "${p%${p##*/c/}}"
/a/b/c/d/e/c/

или, чтобы удалить этот последний /также:

$ echo "${p%/${p##*/c/}}"
/a/b/c/d/e/c

Замена стандартных параметров ${variable##pattern}и ${variable%pattern}удаляет самую длинную совпадающую строку префикса и самую короткую совпадающую строку суффикса соответственно.

(Чтобы получить /a/b/c, чего вы не хотели, вы должны использовать #вместо ##во "внутренней" подстановке)

2
19.03.2021, 02:31

Теги

Похожие вопросы