【发布时间】:2011-06-13 21:17:41
【问题描述】:
我正在搜索一个配置文件夹,并尝试切换到该目录:
寻找 。 -name "配置" -exec cd {} \;有一个匹配,./my-applications/config,但在我尝试后它说:
我做错了什么?
【问题讨论】:
我正在搜索一个配置文件夹,并尝试切换到该目录:
寻找 。 -name "配置" -exec cd {} \;有一个匹配,./my-applications/config,但在我尝试后它说:
我做错了什么?
【问题讨论】:
命令cd 是一个shell 内置,在/bin 或/usr/bin 中找不到。
当然,您不能将目录更改为文件,而且您的搜索也不限于目录。而cd 命令只会影响执行的命令,不会影响执行find 命令的父shell。
用途:
cd $(find . -name config -type d | sed 1q)
请注意,如果找不到您的目录,则命令完成后您将返回主目录。 (sed 1q 确保您只将一个目录名称传递给 cd;Korn shell cd 在命令中采用两个值并执行一些相当合理的操作,但 Bash 忽略了额外的内容。)
【讨论】:
sh -c,例如find . -name "config" -type d -exec sh -c "cd {}; git pull" \;
如果您有多个配置目录:
select config in $(find . -name config -type d)
do
cd $config
break
done
【讨论】:
select 应该是 for ?
select 比for 更好。如果有多个config目录,用户可以选择cd在哪个目录,而接受的答案则使用找到的第一个,这是一个相当随意的选择。
find 将-exec 程序作为子进程运行,子进程不能影响其父进程。所以,是做不到的。你可以试试
cd `find . -name "config"`
【讨论】:
$(...) 比使用反引号更好。
find . -type d... 这样您就不会尝试将cd 放入文件中:-)