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

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

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

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

find: `cd': No such file or directory

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


person cwd    schedule 13.06.2011    source источник


Ответы (3)


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

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

Использовать:

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

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

person Jonathan Leffler    schedule 13.06.2011
comment
Некоторые ОС, такие как Solaris, имеют компакт-диск в /usr/bin, но, конечно, это не меняет того факта, что они не могут изменить текущий каталог оболочки. - person jlliagre; 14.06.2011
comment
превосходно. Я не знал, что компакт-диск был встроенной оболочкой. Это объясняет! - person cwd; 14.06.2011
comment
Если вам нужен cd и другая команда, вы всегда можете использовать sh -c, например find . -name "config" -type d -exec sh -c "cd {}; git pull" \; - person DiegoG; 19.01.2015

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

select config in $(find . -name config -type d)
do
  cd $config
  break
done
person jlliagre    schedule 13.06.2011

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

cd `find . -name "config"`
person lhf    schedule 13.06.2011
comment
Лучше использовать $(...), чем обратные кавычки. - person Jonathan Leffler; 14.06.2011
comment
лучше сделать find . -type d..., чтобы не пытаться cd в файл :-) - person Fredrik Pihl; 14.06.2011