2011-06-13 1 views
14

나는 config 폴더를 검색하고 그 디렉토리로 이동하기 위해 노력하고있어를 리눅스에서 간부 CD를 찾을 수 있습니다 :방법/유닉스

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

가 하나의 일치, ./my-applications/config입니다,하지만 난이 그것을 시도 후 says :

 
find: `cd': No such file or directory 

내가 뭘 잘못하고 있니?

답변

17

명령 cd 쉘 내장, /bin 또는 /usr/bin에없는 시도 할 수 있습니다.

물론 디렉터리를 파일로 변경할 수 없으며 검색 결과 자체가 디렉터리로 제한되지 않습니다. cd 명령은 실행 된 명령에만 적용되며, find 명령을 실행하는 상위 쉘에는 영향을주지 않습니다.

사용 : 디렉토리가 발견되지 않으면, 다시 홈 디렉토리 명령이 완료 될 때에있을거야

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

참고. 합니다 (sed 1q 경우에만 cd에 하나의 디렉토리 이름을 전달 보장하며 콘 cd 명령에 두 개의 값을 받아서 상당히 재치있는 무언가를하지만 배쉬는 엑스트라를 무시 쉘.) 하나 이상의 config 디렉토리이 경우

+0

솔라리스와 같은 몇몇 OS는/usr/bin에 cd를 가지고 있지만 실제로 그들이 할 수있는 사실을 바꾸지는 않는다 현재 쉘 디렉토리를 변경하지 마십시오. – jlliagre

+0

우수. 나는 cd가 내장 된 쉘이라는 것을 깨닫지 못했다. – cwd

+2

_cd_와 다른 명령이 필요한 경우, 항상'sh -c'를 사용할 수 있습니다. 예를 들어'find. -name "config"-type d -exec sh -c "cd {}; git pull"\;' – DiegoG

2

find 서브 프로세스로 프로그램을 실행하고 서브 프로세스는 부모 프로세스에 영향을 줄 수 없습니다. 그래서, 그것을 할 수 없습니다. 당신은

cd `find . -name "config"` 
+0

백틱보다 '$ (...)'를 사용하는 것이 좋습니다. –

+2

'find를 사용하는 것이 더 좋습니다. 'type d ...'파일에'cd'하려고하지 마라 :-) –

4

:

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