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

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

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

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

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

16
задан 28 June 2016 в 18:19

14 ответов

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

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

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

16
ответ дан 28 June 2016 в 18:19
  • 1
    Ну, сильно рекомендовал создать резервную копию раздела you' ll уменьшиться сначала, но да. You' ll хотят выбрать ручную опцию инсталляции из USB Ubuntu и создать (в minmum) / (корень) и раздел подкачки в освобожденном пространстве (я предпочитаю делать отдельный раздел для / домой также), и ДВОЙНАЯ И ТРОЙНАЯ ПРОВЕРКА, который раздел you' установка ре на. Сделайте ошибку здесь, и Ваш весь раздел Windows может быть потерян. – Zeiss Ikon 15 November 2017 в 01:22

Существует 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
ответ дан 28 June 2016 в 18:19
  • 1
    Спасибо!, Таким образом, я просто уменьшаю HDD, где данные хранятся, затем войдите в человечность с помощью живого usb и создайте область подкачки и '/" (don' t знают что it' s названный) свободного пространства просто сделан? – larsvdb97 14 November 2017 в 09: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
ответ дан 28 June 2016 в 18:19
  • 1
    Спасибо! работавший отлично, но я должен был выключить Compiz сначала и затем повторно позволить ему иметь доступ к нему. – M. Loewenthal 16 November 2017 в 07:13

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

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

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

$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$> 

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

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

$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks                                                                                                  
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks  )                                                                                 
$> pwd
/sys/class/backlight

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

bookmark()
{ # bookmarks current dir
  pwd >> $HOME/.dirsbookmarks
}
7
ответ дан 28 June 2016 в 18:19
  • 1
    Как проинструктировано, я выполнил dpkg-l|grep amdgpu-про, и он действительно на самом деле перечисляет драйверы. Однако у меня есть последующий вопрос. Почему он, когда я включаю свой AMDGPU' s на пути приводимая в действие переходная плата после установки и перезагрузки я получаю каскад бесконечных ошибок PCI-E? – Mecca Miles 14 November 2017 в 11:14

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


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

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

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

Поскольку я упомянул по другому вопросу:

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

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

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

j apks

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

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

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

Переместил Вас в apks в td, вместо некоторого другого apks под другим деревом.

5
ответ дан 28 June 2016 в 18:19
  • 1
    То, что я не могу сказать Вам. It' s отдельный вопрос, и возможно ошибка где-нибудь, даже возможно с переходной платой. Не что-то, что могло быть решено с помощью комментариев к этому вопросу здесь. – dobey 14 November 2017 в 11:22

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

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

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

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

Можно установить переменную на имя каталога и затем измениться на него с $foo.

Zsh Install zsh имеет несколько хороших функций, которые не имеет удар. Некоторые из них могут быть эмулированы путем записи функций, которые делают то же задание. В особенности форма с двумя аргументами cd позволяет Вам удобно измениться на другой каталог с аналогичным именем, например, от /home/thina/teams/td/tech/app/release/apks/com.acme/v1, выполнение cd release beta переходит в /home/thina/teams/td/tech/app/beta/apks/com.acme/v1.

4
ответ дан 28 June 2016 в 18:19
  • 1
    Кажется, что это - модуль ядра и не пакет приложений. Предположим it' s просто не загруженный. Как я исправляю это? – Mecca Miles 14 November 2017 в 11:51

Псевдонимы

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

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

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

0
ответ дан 28 June 2016 в 18:19
  • 1
    Ну, AMDGPU Pro является большим количеством вещей. Главным образом это - более новые версии стороны с открытым исходным кодом драйвера (модуль ядра, мезаструктура, etc†¦), и несколько собственных битов для вулкана/GL/CL. Эти lsmod команда покажет Вам в настоящее время загруженные модули. Просто загружая модуль won' t помогают если ядро can' t определяют, что модуль должен быть загружен, все же. Ошибки, которые Вы утверждаете, что получили, предложили бы более глубокую проблему. Снова, не что-то, что может действительно быть решено в комментариях здесь. – dobey 14 November 2017 в 12:57

Как я уже ответил на , имел отношение вопрос на 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
ответ дан 28 June 2016 в 18:19
  • 1
    Дорогой @vidarlo; спасибо за Ваш подробный ответ. Я установил gsmart и попытался свериться с этим. Я получаю результат как это:! https://imgur.com/wx29jbW. Это, кажется, все, хорошо с жестким диском. С другой стороны, как Вы видите на снимке экрана, существует красная строка для " текущий незаконченный сектор считает ". это doesn' t говорят " failure" но так как это - красный цвет, я волновался с этим. Это - что-то, что я должен взволновать? – Ercan DÜZGÜN 14 November 2017 в 09:58

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

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

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

0
ответ дан 28 June 2016 в 18:19
  • 1
    I' ld обычно рекомендуют не использовать -y вообще.. но например, после выполнения sudo apt upgrade --dry-run it' s, вероятно, раздражающий для прохода через него снова – derHugo 14 November 2017 в 07:09

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*** псевдонимы под рукой для вещей как Desktop, Documents, Music, Downloads, и т.д. и это очень удобно!

1
ответ дан 28 June 2016 в 18:19
  • 1
    Нужно отметить, что Ваш диск является диском на 5400 об/мин. Они имеют тенденцию не быть быстрыми, особенно по сравнению с SSD' s, которым в наше время оборудованы много ноутбуков. – vidarlo 14 November 2017 в 18:55

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

  • Расположите свои пути, таким образом, Вы не должны cd в глубоко вложенные каталоги во-первых, или скорее: таким образом, местоположения, которые необходимо посетить часто, являются правильными под рукой. Способ достигнуть этого с символьными ссылками: сохраните явные, хорошо иерархически упорядоченные каталоги, как они, но делают быстрый канал доступа для Вашего собственного удобства.

    ln -s ~/teams/td/tech/app/release/apks ~/apks
    

    Затем вместо того, чтобы ввести длинный тракт к cd, просто используйте cd ~/apks, и cd ../teams (или, в том предпочтительном примере, ~/teams) возвращаться.

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

    • Используйте несколько окон терминала. Работы лучше всего, если окна живут на различных рабочих областях.
    • Используйте несколько вкладок в единственном окне. Это является особенно подходящим для того, чтобы только сделать несколько команд в некотором каталоге: для возвращения просто закройте терминальную вкладку!
    • (Едва ли разумный IMO, но для полноты:) используют оконечный мультиплексор как tmux.
    • Просто запустите действие в специализированной команде это cds вниз в папку, делает одну вещь там и сразу отдает управление на исходной папке: вместо

      $ cd /home/thina/teams/td/tech/app/release/apks
      $ some_command this_file_here
      $ cd ../../../../..
      

      просто сделайте остроту

      $ (cd ~/teams/td/tech/app/release/apks; some_command this_file_here)
      

      или эквивалентно

      $ sh -c 'cd ~/teams/td/tech/app/release/apks
      > some_command this_file_here'
      
  • Не делать cd вообще, но просто выполните команду прямо из Вашего корневого каталога. Расширения фигурной скобки могут помочь много здесь: Вместо

    $ cd /home/thina/teams/td/tech/app/release/apks
    $ some_command this_file_here other_file_also_apks
    $ cd ../../../../..
    

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

    $ some_command ~/teams/td/tech/app/release/apks/{this_file_here,other_file_also_apks}
    
1
ответ дан 28 June 2016 в 18:19
  • 1
    Ничто I' d быть очень взволнованным о там. Это просматривает все вроде it' s просто замедляются; не смерть. Какой I' ve, замеченный, когда диски умирают, обычно является ошибками чтения, и перераспределенные секторы идут канавка крыша. Это сказало - сохраняют хорошее резервное копирование... – vidarlo 14 November 2017 в 18:22

Попробуйте z.lua - новая команда CD, которая помогает Вам перейти быстрее путем изучения привычек.

  • CD к каталогу содержит нечто:

    z foo
    
  • CD к каталогу заканчивается нечто:

    z foo$
    
  • используйте несколько аргументов:

    Принятие следующей базы данных:

    10   /home/user/work/inbox
    30   /home/user/mail/inbox
    

    "z in" был бы CD в /home/user/mail/inbox как более высокая взвешенная запись. Однако можно передать несколько аргументов z.lua для предпочтения другой записи. В вышеупомянутом примере, "z w in" затем изменил бы каталог на /home/user/work/inbox.

  • CD с интерактивным выбором:

    Когда существует несколько найденных соответствий, с помощью z -i отобразит список:

    $ z -i soft
    3:  0.25        /home/data/software
    2:  3.75        /home/skywind/tmp/comma/software
    1:  21          /home/skywind/software
    > {CURSOR}
    

    Затем можно ввести число и выбрать, куда пойти перед фактическим CD. например, вход 3 к CD к /home/data/software. И если Вы просто нажмете ENTER и ничего не введете, то это просто выйдет и останется, где Вы были.

    z.lua также поддержки fzf для интерактивного выбора или завершения аргумента:

    завершение с fzf

  • быстро возвратитесь для порождения без ввода cd ../../..:

    Новая опция "-b" может быстро вернуться к определенному родительскому каталогу в ударе вместо того, чтобы ввести "CD../../.." избыточно:

    • (Никакой аргумент): cd в корень проекта проект базируется ближайший родительский каталог с .git/.hg/.svn в нем.

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

    • (Два аргумента): замените первое значение вторым (в текущем пути).

    ...

    Давайте запустимся путем искажения z -b кому: zb:

    # go all the way up to the project root (in this case, the one that has .git in it)
    ~/github/lorem/src/public$ zb
      => cd ~/github/lorem
    
    # cd into to the first parent directory named g*
    ~/github/vimium/src/public$ zb g
      => cd ~/github
    
    # substitute jekyll with ghost
    ~/github/jekyll/test$ zb jekyll ghost
      => cd ~/github/ghost/test
    

Желание это могло соответствовать Вашей потребности.

1
ответ дан 17 April 2019 в 02:40
  • 1
    @derHugo, как упомянуто это - часть сценария. Если Вы делаете apt-get install без -y в сценарии это просто won' t отвечают. – Philip Kirkbride 13 November 2017 в 21:10

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

У меня также есть функция удара, вызванная ccb (короткий для, создают bat-файл CD - это произошло в DOS/окнах, где .bat сценарий оболочки, ccb.bat создаст другой .bat файл для перехода к текущему каталогу), который создает/добавляет псевдонимы (в .bash_aliases файле) к текущему каталогу.

например: $ ccb myfav создаст псевдоним к текущему каталогу с псевдонимом myfav в .bash_aliases файле и получит .bashrc файл, таким образом, псевдоним будет сразу доступен.

Я сейчас нашел новое решение. Это - функция удара

## USAGE : lj <your_dir>
### lj -- short for LongJump -- (kinda similar to a C function which would jump to an address outside of your current function)
function lj() {
        pushd `find . -type d -name $1 -print | head -n 1`
}

$ lj deeply_nested_dir_name

это ни о чем не должно узнавать из предыдущего использования. Проблема, которую это не могло бы решить: если будет больше чем 1 каталог, названный "deeply_nested_dir_name" в дереве подкаталога, то это перейдет к 1-му из каталога, найденного находкой.

Кроме того, это решение не сможет к goto некоторое другое дерево каталогов.

между псевдонимами hardcoded и сгенерированными псевдонимами и этим новым lj () функция, большинство моих потребностей заботится о.

Вот является мой ccb () функцией удара для любого, кто хочет использовать его

function ccb() {
        foo=$PWD
        echo "" >> ~/.bash_aliases
        echo "alias $1='pushd $foo > /dev/null'" >> ~/.bash_aliases
        source ~/.bashrc
}
0
ответ дан 23 November 2019 в 02:26

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

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

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

cdd.png

На этом экране, если вы нажмете кнопку ОК эквивалентно:

cd Seven\ Mary\ Three

или:

cd "Seven Mary Three"

Когда вы вызываете cdd и есть только один подкаталог, он автоматически меняется на него:

rick@alien:~/Music/Seven Mary Three$ cdd
rick@alien:~/Music/Seven Mary Three/American Standard$ 

Когда вы вызываете cdd и подкаталогов нет выдается ошибка:

rick@alien:~/Music/Seven Mary Three/American Standard$ cdd
No subdirectories
rick@alien:~/Music/Seven Mary Three/American Standard$ 
0
ответ дан 20 September 2020 в 00:18

Другие вопросы по тегам:

Похожие вопросы: