Как найти -exec cd в linux / unix - PullRequest
15 голосов
/ 14 июня 2011

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

find . -name "config" -exec cd {} \;

Есть одно совпадение, ./my-applications/config, но после того, как я попробую это, оно говорит:

find: `cd': No such file or directory

Что я делаю не так?

Ответы [ 3 ]

18 голосов
/ 14 июня 2011

Команда cd - это встроенная оболочка, не найденная в /bin или /usr/bin.

Конечно, вы не можете изменить каталог на файл, и ваш поиск не делаетограничиться каталогами.И команда cd будет влиять только на выполненную команду, а не на родительскую оболочку, которая выполняет команду find.

Использование:

cd $(find . -name config -type d | sed 1q)

Обратите внимание, что если ваш каталог не найденвы вернетесь в свой домашний каталог после завершения команды.(sed 1q гарантирует, что вы передаете только одно имя каталога cd; оболочка Korn cd принимает в команде два значения и делает что-то довольно разумное, но Bash игнорирует дополнительные функции.)

4 голосов
/ 14 июня 2011

Если у вас есть более одного каталога конфигурации:

select config in $(find . -name config -type d)
do
  cd $config
  break
done
2 голосов
/ 14 июня 2011

find запускает -exec программы, так как подпроцессы и подпроцессы не могут влиять на их родительский процесс.Так что это не может быть сделано.Вы можете попробовать

cd `find . -name "config"`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...