2011-06-13 23 views
14

我在寻找一个config文件夹,并试图更改到该目录:如何找到在linux -exec CD/UNIX

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

有一个匹配,./my-applications/config,但之后,我尝试这一点,说:

 
find: `cd': No such file or directory 

我做错了什么?

回答

17

命令cd是内置的,而不是在/bin/usr/bin发现了一个壳。

当然,您不能将目录更改为文件,并且您的搜索不会将其自身限制为目录。而cd命令只会影响执行的命令,而不会影响执行find命令的父shell。

用途:

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

注意,如果没有找到你的目录,你会回到你的home目录当命令完成。 (该sed 1q确保您只通过一个目录名cd;在Korn shell cd的命令有两个值,并做一些事情还算懂事,但猛砸忽略了演员。)

+0

一些像Solaris这样的操作系统在/ usr/bin中有一个cd,但是这当然不会改变他们可以不改变当前的shell目录。 – jlliagre 2011-06-14 05:27:58

+0

优秀。我没有意识到,cd是内置的外壳。这解释了它! – cwd 2011-06-14 16:08:41

+2

如果你需要_cd_和另一个命令,你总是可以使用'sh -c',例如'find。 -name“config”-type d -exec sh -c“cd {}; git pull”\;' – DiegoG 2015-01-19 11:07:36

2

find运行-exec程序作为子进程和子进程不能影响其父进程。所以,这是不可能的。你可能想尝试

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

更好地使用'$(...)'比反引号。 – 2011-06-13 21:23:43

+2

更好做一个'找。 -type d ...'这样你就不会试图把'cd'放入一个文件中:-) – 2011-06-13 21:23:47

4

如果你有一个以上的config目录:

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