Как найти -exec cd в linux/unix

Я ищу папку конфигурации и пытаюсь перейти в этот каталог:

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, поскольку подпроцессы и подпроцессы не могут повлиять на их родительский процесс. Таким образом, это невозможно. Вы можете попробовать

cd `find . -name "config"`