У меня есть дерево исходного кода, корень которого находится примерно в /home/me/workspace
. Есть много подкаталогов на многих уровнях. В частности, существует путь, содержащий некоторые инструменты:Bash: поиск дерева каталогов
/home/me/workspace/tools/scripts
Я пишу функцию оргии, которую я могу назвать из любого места в дереве, к которому я передаю строку tools/scripts
. Функция должна переходить из текущего рабочего каталога в /
, ища фрагмент пути tools/scripts
, затем, если он найдет его, распечатайте абсолютный путь, в котором он найден. В этом примере будет напечатан /home/me/workspace
. Если фрагмент пути вообще не найден, тогда ничего не печатается.
У меня уже есть следующая функция Баш, которая делает это для меня:
search_up()
(
while [ $PWD != "/" ]; do
if [ -e "$1" ]; then
pwd
break
fi
cd ..
done
)
, но это, кажется, немного многословно. Мне интересно, есть ли другие способы сделать это либо в самом bash, либо, возможно, в одной команде find
или любой другой общей утилите. Я особенно ищут читаемость и краткость.
Примечание: Я не ищет полный рекурсивный поиск всего дерева.
Кроме того, мой удар не является последним, поэтому, пожалуйста, никаких фокусов, используя последний, самый большой:
$ bash --version
GNU bash, version 3.00.15(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
$
Вам нужно найти относительный путь к каталогу или абсолютный путь к каталогу? Абсолютный путь уже известен. Итак, вам нужен относительный путь от pwd. Это? – tuxnani
Мне нужно найти абсолютный каталог, в котором существует фрагмент пути 'tools/scripts'. –
Зачем вам нужно перемещаться по дереву? Почему бы просто не обратиться к ~/workspace/tools/scripts? –