Я ищу папку конфигурации и пытаюсь перейти в этот каталог:
find . -name "config" -exec cd {} \;
Существует одно совпадение, ./my-applications/config, но после этого я попробую:
find: `cd': No such file or directory
Что я делаю неправильно?
Ответ 1
Команда cd является встроенной оболочкой, не найденной в /bin или /usr/bin.
Конечно, вы не можете изменить каталог в файл, и ваш поиск не ограничивает себя каталогами. И команда cd влияет только на выполненную команду, а не на родительскую оболочку, выполняющую команду find.
Использование:
cd $(find . -name config -type d | sed 1q)
Обратите внимание, что если ваш каталог не найден, вы вернетесь в свой домашний каталог, когда команда завершится. (sed 1q гарантирует, что вы передадите только одно имя каталога в cd, оболочка Korn cd принимает два значения в команде и делает что-то довольно разумное, но Bash игнорирует дополнительные функции.)
Ответ 2
Если у вас более одного каталога конфигурации:
select config in $(find . -name config -type d)
do
cd $config
break
done
Ответ 3
find запускает программы -exec, поскольку подпроцессы и подпроцессы не могут повлиять на их родительский процесс. Таким образом, это невозможно. Вы можете попробовать