Shell - Переместитесь 'n' по каталогам

Я часто делаю команды как это

cd ../../../../../

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

4
задан 10 January 2020 в 18:10

9 ответов

Нет, нет никакой существующей команды для этого, но это тривиально для записи того. Добавьте эти строки к Вашему ~/.bashrc файл:

function ncd(){
  path=""
  for ((i=1;i<=$1;i++)); do
    path="../$path"
  done
  echo "Moving to $path" >&2
  cd "$path"
}

Сохраните файл, откройте новый терминал, и можно теперь переместить каталоги N с помощью ncd N. Например:

$ pwd
/home/terdon/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
$ ncd 5
Moving to ../../../../../
$ pwd
/home/terdon/dir1/dir2/dir3/dir4
$ ncd 2
Moving to ../../
$ pwd
/home/terdon/dir1/dir2
5
ответ дан 11 January 2020 в 09:38

Можно легко создать псевдонимы или окружить функции для выполнения данной задачи. Я лично использую их:

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

и так далее, вручную определенный для много-многих точек в моем .bashrc.

Функция оболочки могла вместо этого легко взять числовой параметр и выполниться cd .. в цикле это много раз.

2
ответ дан 11 January 2020 в 09:38

Исходя из мира Windows, Alt + стрелка вверх позволяет перейти к родительский каталог в проводнике Windows. Итак, я сделал что-то подобное в ~ / .inputrc :

"\33\33[A": "cd ..\n"

, затем нажатие Alt + стрелка вверх перемещает в родительский каталог в терминале. Ты конечно, нужно нажимать несколько раз, чтобы подняться выше, но я обнаружил, что это очень быстро. Также вы можете изменить ярлык по своему вкусу.

15
ответ дан 11 January 2020 в 16:43

Другая возможность - это физическая отправка клавиш, если у вас есть xdotool :

xdotool type ../

Назначьте ее горячей клавише через диалоговое окно «Клавиатура» -> «Горячие клавиши». Затем вы можете нажать горячую клавишу необходимое количество раз.

2
ответ дан 11 January 2020 в 18:24

Подобно ответу @terdon, с немного более естественным использованием и выводом:

# go up
up() {
  local count="${1:-1}"
  local path=../
  while (( --count > 0 )) ; do
    path="$path"../
  done
  echo "cd -- $path"
  cd -- "$path"
}

Это определяет функцию up , которая имеет следующие свойства:

  • up n поднимется n каталогов
  • вверх поднимется ровно на один каталог (т. Е. Значение по умолчанию для n равно 1).
  • вывод имитирует то, что когда используя shopt -s autocd (отсюда - , которые являются технически не требуется)
  • как и раньше, OLDPWD правильно настроен на текущее значение PWD , скорее чем один из промежуточных каталогов. Это означает, что до 5; cd - работает как и ожидалось.
6
ответ дан 11 January 2020 в 19:32

Если вы используете zsh, вы можете использовать повторение:

repeat 5 { cd ..}
2
ответ дан 11 January 2020 в 20:08

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

function updir(){
    cd $(printf '../%.0s' {1..$1})
}

E.G. updir 5 переместит вас на 5 каталогов вверх.

4
ответ дан 13 January 2020 в 04:10

Я использовал это в течение многих лет:

alias up=" cd .."
alias up2="cd ../.."
alias up3="cd ../../.."
alias up4="cd ../../../.."
alias up5="cd ../../../../.."
alias up6="cd ../../../../../.."
alias up7="cd ../../../../../../.."
alias up8="cd ../../../../../../../.."
alias up9="cd ../../../../../../../../.."
1
ответ дан 15 January 2020 в 19:51

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

  • кд ... равно кд ../ .. и
  • cd ...... равно cd ../../../../ ..

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

cd ...../foo

не работают.

См. Также дополнительные советы по команде cd в Zsh .

1
ответ дан 16 January 2020 в 10:55

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

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