2017-01-13 3 views
4

Давайте предположим, что мы имеем такую ​​структуру каталогов:Unix терминал «CD ..» для определенного числа каталогов

/home/myuser/dir_1/sub_1/sub_2/sub_3 

, и я хочу, чтобы пройти от sub_3 к dir_1, что мне нужно сделать, это

cd ../../.. 

Вопрос мой, нет ли чего-то короче? Я имею в виду что-то вроде:

cd -t 3 

, где вы можете сказать скорлупу, сколько каталогов вы хотите, чтобы вернуться.

+5

DUP: http://superuser.com/ Вопросы/281797/is-there-a-command-for-going-back-a-number-of-steps-in-a-directory-without-usin/281799 –

ответ

3

Построить путь, используя printf затем cd к нему:

cdup() { 
    # $1=number of times, defaults to 1 
    local path 
    printf -v path '%*s' "${1:-1}" 
    cd "${path// /../}" 
} 

Использование в качестве:

cdup 4 # to go up four directories 
cdup 1 # to explicitly go up one directory 
cdup # to implicitly go up one 

Имеет приятное свойство, что cd называется один раз, независимо от того, насколько большой N есть.

+0

Победитель из-за «cd называется один раз». Добавлен в мой .bash_profile (у меня есть mac, должен быть .bashrc для пользователей unix/linux), и он работает как шарм. Мой. ключевое спасибо вам @bishop. – mauros

1

для i в {0..2}; do cd ..; сделано

+3

Это * больше * символов, чем 'cd ../ ../ .. '- def ест точку, нет? –

1
cd ~/dir_1 

Должен также делать то же самое. Конечно, это работает только тогда, когда вы идете куда-нибудь в свой домашний каталог ....

0

Я всего пару недель назад сделал функцию завершения Zsh, чтобы сделать это. The answer is here.

Он позволяет ввести cd ....., а затем нажать вкладку (или вернуться), чтобы развернуть точки в соответствующее количество каталогов.

0

Вы можете поставить CDUP в вашем .bashrc

alias cdup='_(){ a=$1;while ((a--));do cd ..;done;};_' 

Или

cdup() { a=$1;while ((a--));do cd ..;done; } 

тест сделать два компакт-диск ..

cdup 2 
+1

Зачем вам писать это как псевдоним, включающий временную функцию, а не просто создание функции? –

+0

@Charles Duffy. Я использую временную функцию внутри псевдонима, потому что ее легче программировать. –

+1

'cdup() {a = $ 1; while ((a -)); do cd ..; done; } 'is * труднее * писать, чем' alias cdup = '_() {a = $ 1; while ((a -)); do cd ..; done;}; _' '? Как так? –

Смежные вопросы