更快地爬上目录树

Lai*_*uan 5 bash directory

如果我在一个很深的目录中a/b/c/d/e/f/g/h/i/j并且想回来a/b/c,我必须使用../../../../../../../.

是否有命令我可以通过一个数字,例如cd up 7,以加快此操作?

gei*_*rha 6

你可以写一个这样的函数:

up() {
    local path i
    for (( i=0; i < $1; i++ )); do
        path+=../
    done
    cd "$path"
}
Run Code Online (Sandbox Code Playgroud)

把它放在你的~/.bashrc,然后你可以运行 egup 7到 7 个目录。您也可以覆盖 cd 以允许cd up 7,但只创建一个新命令更短,更省事。


小智 5

如果要在两个目录之间切换,可以使用cd -在两个目录之间切换。

cd如果您想为您可能经常使用的一些目录添加书签,请使用pushdpopd-> google 获取更多信息。

或者,如果您知道您必须cd经常与第七祖父母联系,您可以创建一个别名,例如:

alias cd7up='cd ../../../../../../../'
Run Code Online (Sandbox Code Playgroud)


小智 3

创建别名可以作为临时解决方案,但是如果您想要更永久的东西而不会将您限制在预设中,我建议编写一个函数来执行此操作并将其包含在您的 .bashrc 文件中。

来源

# Go up directory tree X number of directories
function up() {
        COUNTER="$@";
    # default $COUNTER to 1 if it isn't already set
if [[ -z $COUNTER ]]; then
    COUNTER=1
fi
# make sure $COUNTER is a number
if [ $COUNTER -eq $COUNTER 2> /dev/null ]; then
    nwd=`pwd` # Set new working directory (nwd) to current directory
    # Loop $nwd up directory tree one at a time
    until [[ $COUNTER -lt 1 ]]; do
        nwd=`dirname $nwd`
        let COUNTER-=1
    done
    cd $nwd # change directories to the new working directory
else
    # print usage and return error
    echo "usage: up [NUMBER]"
    return 1
fi
}
Run Code Online (Sandbox Code Playgroud)

  • 您应该避免使用全部大写的变量名,以避免意外覆盖特殊的 shell 变量或环境变量。将变量设置为函数的局部变量也是一个好主意。 (2认同)