当目录可用时,我应该将其更改为“foo”。怎么做?到目前为止,我想出了:
cd `ls | grep foo`
但问题是,如果 grep 不匹配,目录将更改为主目录。
我采用的另一种方法是:
ls -1 | grep foo | xargs -r cd
在此示例中,-r 表示如果没有匹配则不运行该命令。但它不起作用,因为 cd 命令是 shell 内置的,而不是可执行文件。或者类似的东西。
[编辑] 感谢您的回答。如果可能的话,您能否告诉我如何以某种方式将上述功能与 grep 结合起来,以便我可以使用高级正则表达式?
答案1
这将仅对目录进行操作,如果没有找到目录,它将停留在同一目录中:
cdg () {
cd $(ls -d */ | grep "$1" || echo .)
}
如果多个目录匹配,它将变为列表中的第一个目录。
答案2
试试这个怎么样?
test -d foo && cd foo
然后您可以将其作为函数放在 .bashrc 或类似文件中:
# conditional cd, use as follows:
# ccd some_dir
function ccd {
test -d "$1" && cd "$1"
}
要使用 grep 而不是简单的 test -d,请使用以下命令(请注意,您可以使用另一个 grep,或根据需要添加标志):
# conditional regex-cd
functino rccd {
if has_dir=`ls |egrep "$1"`; then cd $has_dir; fi
}
// 已编辑以匹配更新的问题。
答案3
if [[ -d foo ]]; then
cd foo
fi
-d
表示“文件存在并且是目录。” 这是在 man bash 的“条件表达式”部分。