14

Я постоянно собираюсь "CD ../../../../». Есть ли команда /псевдоним, который может позволить мне перейти 'cmd 4', и я вернусь 4 каталога?

9 ответов9

16

Поместите это в ваш ~/.bashrc:

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

(Имя cdup происходит от соответствующей команды FTP, только к вашему сведению.)

11

Меня учили использовать «pushd» и «popd» для таких обстоятельств.

Например, введите «pushd». а затем «CD / Home». Теперь введите «popd», и вы вернетесь туда, откуда начали.

«pushd» /«popd» - это стек, вы можете помещать туда столько каталогов, сколько захотите, но он включается в последнюю очередь, сначала при запуске popd.

10

Конечно, почему бы и нет

up() {
    [ $# = 0 ] && cd .. && return
    [ $1 = 0 ] && return
    cd .. && up $(($1 - 1))
}
4

Быстро и грязно:

cmd () { dir=.; for i in $(seq 1 $1); do dir=$dir/..; done; pushd $dir; }

Сформулировано, чтобы изменить каталог только один раз.

2

Вот альтернативный способ:

function cdup
{
    cd $(for ((i=0 ; i<$1 ;i++)); do printf "../" ; done)
}
1

Создайте путь, используя printf затем cd к нему:

cdup() {
    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
1

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

Вы также можете установить переменную с именем каталога, который вы часто используете, затем CD там:

MYPROJ=~/projects/name/src
cd $MYPROJ
proj1='cd $MYPROJ'
1

Я использую autojump, который позволяет мне печатать:

j h
>> /home/cjulien
j et
>> /etc

он может учиться на ваших привычках и очень легкий (и вызывающий привыкание;))

0

Две мысли, которые могут быть вам полезны:

  1. CD -
    вернитесь к последнему каталогу, в котором вы были. Я использую это все время, чтобы перейти из глубины моего дерева кода обратно к его корню ... хотя это работает только в том случае, если вы перейдете в него за одно изменение.

  2. cdd старый новый
    это была функция скрипта, которую я написал в прошлом, которую я использовал для перемещения между похожими деревьями. По сути, он взял два аргумента и сделал регулярное выражение на вашем пути, отлично подходит для перемещения между ветвями и тому подобным. Например, если вы находитесь в ~/bzr/web/trunk/path/to/feature и вам нужно попасть в ~/bzr/web/feature-branch/path/to/feature, тогда вы должны выполнить cdd trunk feature-branch . Реализация, которую я имел, была на архаичном языке оболочки в AIX, но она была довольно тривиальной, поэтому ее легко реализовать в выбранной оболочке, если вам это нужно. Для нас это было очень полезно, потому что структура выглядела следующим образом: .../{product}/{version}/{release}/{src, bld, dbg, pkg, tst}/{component}/... так перемещается в этом дереве стало безумно довольно быстро.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .