как перемещаться между каталогами по абсолютному пути - PullRequest
0 голосов
/ 13 января 2020

Я работаю в каталоге с абсолютным путем aa / bb / cc / dd / ee / ff / gg / hh / ii. Теперь я хочу перейти в каталог дд. Я знаю, что мы можем использовать cd ../ .. несколько раз для go назад, но я хочу знать, есть ли более быстрый способ?

Я ищу способ что-то вроде CMD DIR (который находится в PWD), который перейдет к DIR. EG $ jump dd должен привести к терминальному переходу к aa / bb / cc / dd.

1 Ответ

0 голосов
/ 13 января 2020

Вы можете написать свою собственную функцию оболочки, которая выглядит примерно так:

up() {
    local target dir
    target="$1"
    dir="$PWD"
    while ! [ "$(basename "$dir")" = "$target" ]; do
        dir="$(dirname "$dir")"
        if [ "$dir" = "/" ]; then
            >&2 echo "No such directory found"
            return
        fi
    done
    cd "$dir"
}

Я нерешительно проверил это в Bash и Zsh.

Если вы поместите это в файл с именем up.sh, вы можете получить этот файл, чтобы получить доступ к этой функции. Если вы хотите всегда иметь его, вы должны поместить его в соответствующий файл rc.

Вот пример использования:

$ mkdir -p aa/bb/cc/dd/ee/ff/gg/hh/ii

$ cat up.sh
up() {
    ...
}

$ source up.sh
$ cd aa/bb/cc/dd/ee/ff/gg/hh/ii
$ up xyz
No such directory found

$ up bb
$ pwd
.../aa/bb
...