我正在寻找一个配置文件夹,并尝试切换到该目录:
find . -name "config" -exec cd {} \;
这里有一个匹配项,./my-applications/config
,但是在我尝试后,它显示:
find: `cd': 没有那个文件或目录
我做错了什么?
cd
命令是一个shell内置命令,不在/bin
或/usr/bin
中找到。
当然,您不能将目录更改为文件,并且您的搜索不限于目录。 cd
命令只会影响执行的命令,而不是执行find
命令的父shell。
使用:
cd $(find . -name config -type d | sed 1q)
请注意,如果找不到您的目录,在命令完成时,您将返回到您的主目录。(sed 1q
确保您只向 cd
传递一个目录名称;Korn shell 的 cd
在命令中需要两个值并执行一些相当明智的操作,但 Bash 忽略了多余的值。)
如果您有多个配置目录:
select config in $(find . -name config -type d)
do
cd $config
break
done
select
应该改成for
吗? - Rogerselect
比 for
更好。如果有多个 config
目录,用户可以选择要进入哪一个,而采用被接受的答案,则会使用找到的第一个目录,这是相当随意的选择。 - jlliagrefind
命令通过作为子进程运行-exec
程序,而子进程无法影响其父进程。因此,这是不可能的。你可以尝试
cd `find . -name "config"`
$(...)
而不是反引号。 - Jonathan Lefflerfind . -type d...
命令,这样你就不会尝试进入一个文件了 :-) - Fredrik Pihl
sh -c
,比如find . -name "config" -type d -exec sh -c "cd {}; git pull" \;
。 - DiegoG