сменить каталог (cd), но заменив только часть пути

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

/etc/application-2.0.1/options/default

и

/etc/application-1.0.8/options/default

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

cd /2.0 .1 / 1.0.8 /

, который заменит в пути строку 2.0.1 - 1.0.8. Очевидно, это не работает для меня сейчас. Но есть ли способ сделать это?

14
задан 6 September 2010 в 22:55

9 ответов

Если вы используете zsh в качестве оболочки, вы можете просто ввести cd 1.0.8 2.0.1.

0
ответ дан 6 September 2010 в 22:55

Это должно работать в ударе над человечностью 10.04: cd ${PWD/old/new}. В основном это заменяет первое вхождение old в Вашем существующем рабочем каталоге с new. 2 примера ниже.

Пример 1

ing02741@hoster:~$ cd /home/ing02741/Videos/
ing02741@hoster:~/Videos$ cd ${PWD/ing02741/koushik}
ing02741@hoster:/home/koushik/Videos$ 

Пример 2

ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
ing02741@hoster:~/src/cdtest$ cd dir-v1.0.1/ind/
ing02741@hoster:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
ing02741@hoster:~/src/cdtest/dir-v2.2.2/ind$ 

Одалживая на идее sepp2k выше, Вы могли сделать функцию как это

function mycd { cd ${PWD/$1/$2} }

и затем используйте что-то как mycd 2.0.1 1.0.8 переключаться.

9
ответ дан 6 September 2010 в 22:55

Я использовал (и пропустил) эту функцию сам. Это зависит от того, какой аромат и / или выпуск * nix вы используете. Если вы используете bash, вот удобный способ расширить встроенный компакт-диск, чтобы включить эту функцию. Поместите это в ваш .bashrc (или для проверки вставьте его в оболочку bash и нажмите Enter).

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }
0
ответ дан 6 September 2010 в 22:55

Вы, вероятно, помните расширение истории. Я не знаю, что было доступно в вашей оболочке в AIX, но один из способов сделать это в bash - ^2.0.1^1.0.8.

Расширение истории менее полезно с такими оболочками, как bash и zsh, которые имеют мощное редактирование командной строки. Вы можете использовать клавиши со стрелками, чтобы вызвать предыдущие команды, и Alt + . , чтобы вставить последнее слово предыдущей команды (дважды нажмите ее, чтобы получить команду до этого и т. Д. ).

0
ответ дан 6 September 2010 в 22:55

Если вы фанат vi, вы можете включить режим vi в вашей оболочке (например, bash set -o vi) и использовать командный режим vi ...

Или вы можете сделать сумасшедшее расширение истории (протестировано в zsh, возможно, и в bash):

$ cd /etc/application-1.0.8/options/default
cd: no such file or directory: /etc/application-1.0.8/options/default

$ !!:s/1.0.8/2.0.1/
cd /etc/application-2.0.1/options/default
cd: no such file or directory: /etc/application-2.0.1/options/default
0
ответ дан 6 September 2010 в 22:55
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

Однако это не очень красиво. Вы можете немного подправить его, поместив его в функцию:

function mycd { cd `pwd | sed s$1` }

И затем вызывая его следующим образом:

mycd '/2\.0\.1/1.0.8/'

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

0
ответ дан 6 September 2010 в 22:55
 ^2.0.1^1.0.8 

Приведенная выше команда поменяет 2.0.1 на 1.0.8 в последней команде, ее работа в bash

0
ответ дан 6 September 2010 в 22:55

Не уверен насчет AIX, но я помню это как старый трюк с оболочкой Korn для ящиков Solaris, которые я использовал для администрирования. В вашем примере вы должны ввести команду:

cd 2.0.1 1.0.8

Дополнительная информация здесь .

0
ответ дан 6 September 2010 в 22:55

Для обеспечения работы -P|-L|- используйте следующее:

function cd () {
    typeset arg=
    case $1 in -|-L|-P) arg=$1 ; shift ;; esac
    [ $# -gt 1 ] && {
        builtin cd $arg "${PWD/$1/$2}"
    } || {
        builtin cd $arg "$@"
    }
}
0
ответ дан 6 September 2010 в 22:55

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

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