5

Какие хорошие команды Linux облегчают переключение между разными каталогами в командной строке?

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

cd foo/20100801-rev124-test2
ls 
cd ../20100801-rev124-test1
ls 
cd ../20100802-rev126-bar

Обычно я использую завершение табуляции, так что это примерно так:

cd ../2010080<TAB>2<TAB>-rev12<TAB>6-<TAB>bar

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

Какие приемы вы используете, чтобы минимизировать ввод в таких ситуациях?

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

ОБНОВИТЬ:

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

function cd2 { select a in $1*; do cd $a; break; done }

Он перечислит все возможные дополнения сразу:

$ cd2 2010080
(1) 20100801-rev124-test2
(2) 20100801-rev124-test1
(3) 20100802-rev126-bar

и вы можете выбрать один, набрав его номер.

10 ответов10

3

Команда dirs -v список каталогов с номерами перед каждым каталогом, и вы можете дать числовому аргументу команду pushd чтобы она перешла в этот каталог. Например, если dirs -v показывает, что каталог, который вы хотите изменить, имеет 2 перед ним (т. Е. Является третьим каталогом в списке), выполнение pushd +2 изменит этот каталог.

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

alias dv="dirs -v"
alias pd=pushd
2

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

cd ../*test1 or even cd *t1
cd ../2010*test2
cd ../*bar

Они гораздо более гибкие, и вам не нужно планировать сценарий для каждой отдельной ситуации, как только вы привыкнете к ним, вы будете использовать их для всех видов каталогов. Примеры:

cd /e*/n*k will take you to /etc/network
cd /h* to /home

Они могут использоваться в любом месте ls также, конечно , так что вы можете выбирать , что посмотреть)

подстановочные знаки

1
  1. Попробуйте использовать команду hist, чтобы просмотреть историю всех выполненных вами команд.
  2. Создайте сценарий оболочки с командами cd для каждого каталога, к которому вы часто обращаетесь.
1
  • Завершение вкладки
  • Доступ к истории (особенно в тех оболочках, которые предоставляют доступ с помощью клавиш со стрелками)
  • В bash рассмотрите возможность использования popd и pushd
1

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

Кроме того, для «Frank Computer» вы не можете использовать скрипт оболочки, он создает собственный процесс, диски в этом процессе, завершается, и ваша текущая оболочка все еще там, где вы находитесь.

Я думаю, что псевдоним твой друг. добавить что-то вроде:

alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2'

на ваш .bashrc (или .kshrc, или zshrc)

В bash также есть env var CDPATH , который можно использовать как якорь для cd'ing в относительные пути. Например:

CDPATH=/usr:.; cd bin

увидит, что есть /usr/bin и поместит вас туда, а если нет, поместит вас в ./bin . Это, вероятно, не поможет вам, потому что вам, вероятно, придется набрать весь subdir, чтобы это работало:

CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2

Псевдоним Methinks - лучшее, что вы можете получить, по крайней мере, в bash. Там могут быть лучшие инструменты в Zsh.

1

Midnight Commander (mc) - это файловый менеджер на основе терминала. Он имеет функцию горячего списка, которая позволяет вам добавлять каталоги в список тех, которые вы часто используете, и выбирать их из списка для перехода на CD. Он также имеет быструю функцию компакт-диска, которая позволяет вам вводить полный каталог для компакт-диска, даже когда вы вводите команду в командной строке mc . Вы также можете сделать обычный файловый менеджер навигации.

Еще одна возможность нажатия клавиш - использовать переменную оболочки CDPATH (она доступна в большинстве оболочек).

CDPATH=/some/top/dir:/another/one
cd foo

Если в текущем каталоге существует "foo", то cd переместит вас туда. Если нет, он будет искать каталоги в CDPATH и переместит вас к первому "foo", который он там найдет.

0

quickcd - это хороший скрипт для быстрой смены каталога, сохраняющий много печатания.

0

Взгляните на fastcd https://github.com/frazenshtein/fastcd Кажется, что это более полезно, чем псевдонимы

0

anc был разработан именно для этого варианта использования.

https://github.com/tobimensch/anc

Вот выдержка из README.md:

Примеры:# сделать текущий каталог привязкой по умолчанию:$ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

Полное раскрытие: я автор anc

0

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

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