如果在parentsubdir内,Bash转到1级子目录

时间:2014-11-28 14:39:41

标签: bash shell

好的,

我想在shell中执行以下操作。

如果我在css之类的子目录中,它位于像mypage这样的子目录中(例如projects/mypage/htdocs/css),我想进入项目的根目录,即{ {1}}。我想把它作为一个函数写给我们作为一个命令。唯一的#34;固定"值为mypage

所以基本上如果我在shell的任何子项目中,我输入命令projects(或其他),我希望函数检查它是否实际上在项目的子目录中,如果是,转到当前的子目录。

E.g。

goroot

这是否可能,如果是这样,我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:1)

假设我理解正确,这应该有效:

goroot() { cd $(sed -r 's#(~/projects/[^/]*)/.*#\1#' <<< $PWD); }

这个sed命令有效地删除~/projects/SOMETHING之后的所有内容,然后更改到该目录。如果您不在~/projects/,那么它会将您留在当前目录中。

注意:这假设$PWD使用~表示家庭,如果它类似/home/user/,则适当修改sed命令。

答案 1 :(得分:1)

projroot=/home/user/projects

goroot() {
    # Strip off project root prefix.
    local m=${d#$projroot/}
    if [ "$m" = "$d" ]; then
        echo "Not in ~/projects"
        return
    fi

    # Strip off project directory.
    local suf=${m#*/}
    if [ "$suf" = "$m" ]; then
        echo "Already in project root."
        return
    fi

    # cd to concatenation of project root, and project directory (stripped of sub-project path).
    cd "$projroot/${m%/$suf}"
}