209

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

То есть если я в:

/etc/foo/bar/baz/moo

а затем введите:

cd /var/lib/fubarred_app/blargh/logs

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

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

Есть ли короткая команда, которая позволила бы мне перейти в предыдущий каталог?

12 ответов12

294

Команда

cd -

выполнит нужный вам обмен на большинство основных оболочек, более старый и длинный вариант

cd "$OLDPWD"

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


Справочная страница POSIX для cd упоминает:

ОПИСАНИЕ

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

ОПЕРАНДЫ

  - Если в качестве операнда используется дефис, это должно быть эквивалентно команде:

cd "$OLDPWD" && pwd 

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

105

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

Например, мы можем перейти к трем различным каталогам, и вы всегда будете видеть свой стек при вызове pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

И когда вы вызываете popd три раза подряд, вы попадаете в эти каталоги в стеке в обратном порядке. В то же время, стек будет снова очищен.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Если вы используете Zsh; он имеет возможность AUTO_PUSHD, который будет автоматически толкать cd «s в стек.

13

Есть несколько "прыгающих" программ

  • автопрыжок (поддерживается с основными функциями)
  • j2 (очевидно, не поддерживается с некоторыми расширенными функциями)
  • z (поддерживаемая версия "j" с расширенными функциями)

Это облегчает любой вид навигации по каталогам. Вы используете это, давая часть пути, и это просто работает.

В твоем случае

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Этим программам вы можете назначить любую букву, которую хотите, "j" - это традиция :)

J2 и Z поддерживают несколько условий поиска, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... и больше вариантов.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank
10

В дополнение к cd - и cd $OLDPWD

Вы можете использовать поиск по истории, нажав CTRL-R и набрав несколько букв команды cd вы вводили ранее. Повторное нажатие CTRL-R приведет к старым совпадениям.

Этот метод будет более полезным, если у вас есть более двух путей для изменения.

9

Вы можете использовать это, чтобы легко создавать псевдонимы для каталогов:

a() { alias $1=cd\ $PWD; }

a 1

и позже:

1
6

bashmarks позволит вам создать закладки для нескольких папок и переходить между ними с помощью вкладки:

Чтобы добавить в закладки папку, просто перейдите в эту папку, а затем добавьте ее в закладки следующим образом:

bookmark foo

Закладка будет называться "foo". Если вы хотите вернуться в эту папку, используйте:

go foo

Чтобы увидеть список закладок:

bookmarksshow

Закладка завершает работы, чтобы перейти к закладке shoobie, просто:

go sho[tab]
4

Другой возможностью было бы просто держать два окна открытыми, по одному в каждом каталоге.

4

Я знаю, что это не является строго говоря ответом на ваш вопрос, но это полезно для достижения цели, чтобы привести вас в ваши важные каталоги.

в любом спуске UNIX-bash вы можете использовать CDPATH для расширения папки, в которой ищет команда cd.

из моего .bashrc-файла:

export CDPATH='.:~/source/'

Сначала CD выполняет поиск в текущей папке, а затем - в моем каталоге coding-project-directory.

cd myproject

... переносит меня в ~/sources/myproject с того места, где я сейчас нахожусь.

Простая маленькая функция, которая очень помогла моей навигации по каталогам.

3

Если у вас есть только 2 каталога, самый простой способ, как уже упоминалось,

cd -

Когда у меня были такие вещи в прошлом, у меня была пара трюков, которые я сделал, которые могли бы быть полезными.

  1. Поместите команды псевдонимов в файл .cshrc, что-то вроде этого

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. Ссылка ярлыков на интересующие пути из моего домашнего каталога. Это разовая вещь.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

Это позволит изменить каталог так же просто, как:

   cd ~/moo
   cd ~/blargh
3

Да, cd - это путь, но я беспокоюсь о нехватке энергии, которую вы имеете в вашей оболочке. popd и pushd также хороши, и что j вещь также хорошо выглядит.

Я добавлю свою собственную утилиту в кольцо ... это просто то, что я строил, настраивал и переносил со мной последние 10 лет или около того, и это прекрасно работает для того, что я хочу.

Сообщение в блоге для моей утилиты управления каталогами

Если это работает для вас, тогда круто, но если это не так, пообещайте мне, что вы получите что-то еще :) Вы просто не можете жить с одним cd .

2

Autojump - это команда bash/sh/zsh "cd", которая из ваших действий просматривает это видео.

так что это переместит вас в Му после того, как он изучил последние папки

j moo
2

луч

У меня есть свой инструмент, но я посмотрю на инструмент Дерекс и j тоже.

Конечно, первый выбор для прыжков назад и вперед

CD -

Мой инструмент предназначен для каталогов с уникальными именами в системах, где locate доступна; он ищет подходящее имя каталога и переходит к первому совпадению:

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

зависимости:

  • разместить
  • Grep
  • голова

Недостатки:

  • более новые каталоги, чем последний обновленный, не найдены
  • если более одного каталога совпадают, это зависит от вашей удачи, от того, хотите ли вы перейти к тому, который вы имели в виду.

Усовершенствования / модификации:

  • вместо выбора первого каталога код можно изменить для отображения списка вариантов, предлагая пользователю ввести 1,2,3, ... для перехода в /bin, /usr /bin, /usr /local /bin ...

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

  • поместите функцию в ваш файл /etc/bash.bashrc или ~ /.bashprofile, чтобы использовать ее удобным способом.

Преимущество моего решения:

  • не ограничивается двумя каталогами, как cd -
  • Вам не нужно посещать каталоги один раз, прежде чем использовать луч.

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