Как быстро перейти в и из глубоко вложенных каталогов через CLI?

Мы знаем, что использование cd <directory> откроет каталог, если он существует!

Кроме того, cd .. поднимет нас на один уровень от текущего рабочего каталога.

Но, когда у нас есть вложенный каталог с более длинным путем, как /home/thina/teams/td/tech/app/release/apks, утомительно просто заходить в папку apks, а также трудно вернуться к другому узлу, скажем здесь /home/thina/teams.

Есть ли способ пропустить ввод cd и cd ..? Я использую Ubuntu 16.04.

16
задан 28.06.2016, 18:19

11 ответов

Существует pushd и popd:

pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command

Попытка help pushd и help popd для большего количества опций. Нет никакого man страница, потому что pushd и popd удар встроенные команды.

0
ответ дан 17.04.2019, 02:40
  • 1
    Wouldn' t cd - делает то же самое? – barbsan 28.06.2016, 00:13
  • 2
    @edwinksl да, но pushd и popd может помнить больше чем один предыдущий путь. – jayko03 28.06.2016, 00:15
  • 3
    Don' t забывают dirs для списка стопки каталога в pushd / popd команды. – DrunkCoder 28.06.2016, 01:02
  • 4
    Они охвачены в странице руководства для удара-builtins (7), так как они - удар встроенные команды. (Или они могут также быть найдены в полной странице руководства для удар ), Это - та же информация как help pushd, и help popd Вы упомянули (а также help dirs), но я думал I' d упоминают что в случае, если люди задавались вопросом, куда эти команды прибывают из. – devyJava 28.06.2016, 02:12
  • 5
    @Jos Вы написали c орфографическими ошибками help pusdh – DrunkCoder 28.06.2016, 09:37

В дополнение к очень хорошим ответам уже, если, вот некоторые подсказки относительно использования cd эффективно.

  • cd - заберет Вас к последнему каталогу, в котором Вы были.
  • cd ../../.. возьмет Вас 3 уровня сразу, можно использовать .. нотация, объединенная в цепочку вместе для 'перемещения вверх' стольких каталогов, сколько Вам нравится.
  • , Если Вы не уверены, сколько раз Вы хотите переместить вверх, используйте cd .., затем используйте историю удара путем нажатия на клавише со стрелкой для использования команды снова.
  • Использование ~ для помогания для текущего пользовательского корневого каталога если Вы зарегистрированы, поскольку пользователь ваш, cd ~/teams, возьмет Вас к /home/thina/teams
  • автозавершение Bash Использования для путей, клавиша Tab завершит раздел пути в эти cd команда при вводе части сегмента контура, сопровождаемого Вкладкой тот сегмент будет завершен, если не будет никакого другого допустимого выбора. Например, если бы Вы ввели cd /home/thina/teams/td/t, затем нажал Вкладку , технология слова была бы заполнена в для Вас, пока не было никаких других файлов или каталогов в td каталоге, который запустился с буквы T.

Используя эти подсказки вместе может сделать пересекающие каталоги с [1 110] намного менее болезненными.

0
ответ дан 17.04.2019, 02:40
  • 1
    Добавление к точке на ~, особенно если Вы - корень, ~user, быстро получит Вас к user ' s корневой каталог. – MKOT 28.06.2016, 03:33
  • 2
    Спасибо, я didn' t понимают это, I' ll добавляют его в следующем редактировании. – camba1 28.06.2016, 03:45

Для восстановления работоспособности в дереве нескольких уровней за один раз можно использовать следующую функцию (благодаря muru для расширенной версии):

up ()
{
    local old="$PWD"
    for i in $(seq "${1:-1}"); do
        cd ..
    done
    OLDPWD="$old"
}

Затем можно сделать:

$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams

Дополнительно:

  • вызов up без аргумента эквивалентен cd .. из-за ${1:-1}, который занимает место $1, когда установлено и 1 иначе
  • установка OLDPWD после того, как последнее cd .. стремится сохранять обычное cd - поведение.
0
ответ дан 17.04.2019, 02:40
  • 1
    Технически, это - функция, не псевдоним. – alex067 28.06.2016, 04:09
  • 2
    @ReinierPost: Достаточно право! I' ve исправлен соответственно. – Devin C. 28.06.2016, 04:17
  • 3
    Предложения: -gt вместо >. > является лексикографическим, это выдерживает сравнение как строки. Кроме того, вместо того, чтобы создать путь, почему бы не cd .. в цикле: for i in $(seq "${1:-1}"); cd ..; done? Это может устранить if условие также. – alex067 28.06.2016, 04:36
  • 4
    @muru, которые я согласовываю с Вашим gt комментарий, но относительно Вашего второго предложения, видят заключительный маркер в ответе. Имеет смысл мне. – Devin C. 28.06.2016, 09:10
  • 5
    @Oliphaunt that' s не особенно трудный, Вы просто устанавливаете OLDPWD на первоначальный тракт. Here' s полная версия: paste.ubuntu.com/17990874 – JiaHao 28.06.2016, 09:14

Для долгих имен каталогов используйте переменные с полным путем. Например,

APKS="/home/thina/teams/td/tech/app/release/apks"

Затем можно сделать всего cd "$APKS"

Что касается восстановления работоспособности x количество каталогов, у меня есть эта функция, определяемая в моем .bashrc

goup() # go up x number of dirs
{
  num=$1
  while [ $num -ne 0  ];do
    cd ..
    num=$( expr $num - 1   )
  done
}

Для возврата к /home/thina/teams от apks, Вы сделали бы

goup  6

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

[113]gt; pwd
/sys/class/backlight/intel_backlight
[113]gt; goup 3
[113]gt; pwd
/sys
[113]gt; 

Другая небольшая функция, которую я придумал, но никогда не использовал в качестве многого, bookmark функция.

Вот то, как это работает: это сохраняет Вашу текущую папку в некоторый файл, и затем Вы можете CD к определенному каталогу на основе номера строки в том файле. Пример:

[114]gt; cd /etc/lightdm
[114]gt; bookmark
[114]gt; cat ~/.dirsbookmarks                                                                                                  
/home/xieerqi
/sys/class/backlight
/etc/lightdm
[114]gt; cd $( awk 'NR==2' ~/.dirsbookmarks  )                                                                                 
[114]gt; pwd
/sys/class/backlight

И вот сама функция:

bookmark()
{ # bookmarks current dir
  pwd >> $HOME/.dirsbookmarks
}
0
ответ дан 17.04.2019, 02:40

Включите autocd опция (shopt -s autocd), так, чтобы Вы не имели к типу cd. Например, Вам просто нужна команда .. с двумя символами для движения в родительский каталог.

, Если Вы перешли между двумя каталогами, можно переключиться между ними с cd -, который переходит к предыдущему рабочему каталогу. autocd опция не заставляет - работать cd -, но можно определить псевдоним или функцию для этого.

можно запомнить каталоги на стеке с builtins pushd и popd . Встроенное dirs списки стопка каталога (я нахожу dirs -v более читаемый).

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

можно установить переменную на имя каталога и затем измениться на него с [1 114].

Zsh Install zsh имеет несколько хороших функций, которые не имеет удар. Некоторые из них могут быть эмулированы путем записи функций, которые делают то же задание. В особенности форма с двумя аргументами [1 115] позволяет, Вы удобно измениться на другой каталог с аналогичным именем, например, от [1 116], работая cd release beta переходите в [1 118].

0
ответ дан 17.04.2019, 02:40

ОБНОВЛЕНИЕ: существует еще более мощный инструмент, чем autojump: fasd , но я не знаком с ним.

<час>

я удивлен, что никто еще не упомянул autojump , который

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

Это в основном, что @graipher создал с несколькими дополнительными опциями.

, Как я имею , упомянул по другому вопросу:

После Вас CD несколько раз к каталогу (даже однажды достаточен):

cd /home/thina/teams/td/tech/app/release/apks

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

j apks

Примечание, что использование любой части работ пути, пока это является самым высоким в списке: j app также возьмет Вас к .../apks, если Вы пошли туда больше раз, чем к .../app.

я рекомендовал бы это вместо того, чтобы иметь Ваш собственный сценарий, так как это хорошо сохраняется, распределяется для Ubuntu и имеет другие аккуратные функции, такой как [1 131] переход ребенку :

.../td/tech $ jc apk
.../release/apks $ 

переместил Вас в [1 110] в [1 111], а не некоторый другой apks под другим деревом.

0
ответ дан 17.04.2019, 02:40
  • 1
    +1 для ' fasd'. It' s действительно полезный. – icza 11.12.2018, 06:46

Pushd и Popd

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

Вот пример с помощью функций удара и псевдонимов:

sd ()
{
    pushd "$1" > /dev/null
}

po ()
{
    popd
}

alias d='dirs'

я постоянно использую соединение этих команд во множестве путей.

Псевдонимы

Другая опция для каталогов, к которым часто получают доступ, состоит в том, чтобы просто исказить cd или pushd команды. Так, с помощью примеров из сообщения:

alias cdapks='cd /home/thina/teams/td/tech/app/release/apks'
alias cdteams='cd /home/thina/teams'

Комбинация

Объединение у этих двух идей и Вас может даже быть это:

alias sdapks='sd /home/thina/teams/td/tech/app/release/apks'
alias sdteams='sd /home/thina/teams'

, Который затем дает Вам большую гибкость в пересекающих каталогах. Я сохраняю cd*** и sd*** псевдонимы под рукой для вещей как [1 112], Documents, Music, Downloads, и т.д. и это очень удобно!

0
ответ дан 17.04.2019, 02:40

Как я уже ответил на , имел отношение вопрос на UnixSE, я использую сценарий, названный z [github] для этого.

Это помнит каталоги Вы CD к, оценивает их согласно frecency (частота + новизна) и позволяет Вам изменяться на один из помнивших путей с помощью некоторой части ее имени.

После наличия cd'ed к каталогу, по крайней мере, после того как можно сделать, например, вместо:

$ cd ~user/very/long/path/with/many/subfolders/

Просто сделайте:

$ z sub

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

я также определил функцию как это, который первые попытки нормальный CD и если это приводит использование к сбою z:

function cd() {
    builtin cd "$1" 2> /dev/null || z "$1" || (echo "cd: File or Directory not found: $1" >&2 && exit 1)
}

Это дает Вам лучшего из обоих. Если папка будет в текущем каталоге, или допустимый полный путь дан, то это будет просто CD там, но если не это попытается найти соответствие в базе данных и CD там. Это устраняет (маленькую) боль иногда необходимости использовать CD (для обучения базы данных, движения к папке, к которой Вы никогда не были прежде), и иногда не забывающий использовать z, когда применимо.

0
ответ дан 17.04.2019, 02:40
  • 1
    Вы уверенный этот cd ваш doesn' t interfer с тем, как z создает базу данных часто посещаемых каталогов? – Amit Desale 28.06.2016, 07:41
  • 2
    как это отличается от autojump ? – icza 28.06.2016, 13:44
  • 3
    @leftaroundabout: Не уверенный, но до сих пор это работало приятно. z определенно создает базу данных каждый раз, когда Вы используете встроенный CD (который моя установка пробует сначала). Не настолько уверенный, обновляется ли база данных, когда z часть используется, все же.Править: Просто протестированный, обновляется ли база данных при выполнении $ встроенный CD ~/folder/i/have/not/been/to/yet/. Это. – Hem 29.06.2016, 02:17
  • 4
    @CiprianTomoiaga Действительно, это, кажется, делает в основном то же самое. Перезапись CD управляет, чтобы я использовал, мог также использоваться для этого. autocomplete' s различные команды кажутся интересными, хотя! – JiaHao 29.06.2016, 02:22
  • 5
    btw: I' m не автор z, просто найдите его очень полезным. – icza 29.06.2016, 02:24

Псевдонимы

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

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University

Теперь, то, когда я хочу пойти три, выравнивает, я просто тип ....<Enter>, и там я!

0
ответ дан 17.04.2019, 02:40
  • 1
    Мне нравится это также, потому что даже при том, что сначала я думал " хм 4 периода для 3 уровней..." тогда я думал, " О, да... Компьютеры! 0 , 1, 2, 3! ": D Теперь легкий помнить, полезный, и что-то I' ll играть с также. За Ваше здоровье! – Amit Desale 02.07.2016, 03:27

Еще три опции, которые я нахожу для работы хорошо (хотя я май в будущем использовании pushd [еще 1115], я только что узнал о том):

0
ответ дан 17.04.2019, 02:40
  • 1
    pushd очень очень полезно. Можно хотеть включить больше информации, как использовать ее для создания ответа лучше. – Zoe 28.06.2016, 09:29
  • 2
    @Serg: да, но я сам знаю pushd [только 110] от Jos' ответ выше . – JiaHao 28.06.2016, 09:33
  • 3
    А-ч, я вижу его. Ну, это могло бы быть полезно для будущих ответов тогда. – Kory Gill 28.06.2016, 09:35

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

  • , Если Вы стрелка вправо типа c d входите, она повторяет новый CD.
  • При помощи c d стрелка вправо стрелки вниз входят, это повторяет второй новый CD.
  • И т.д.
  • Это имеет prevd и nextd, которые часто легче использовать, чем pushd и popd.

кроме того, я сохраняю свои любимые каталоги symlinked к ~/f, таким образом, я могу CD ~/f/x для получения до ~/foo/bar/baz/experimental-data.

0
ответ дан 17.04.2019, 02:40