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

Я обычно использую трюк sudo bash -c, или просто сделаю sudo -s первым, чтобы остаться в корне, а затем запустите команду перенаправления.

Причина, по которой это не работает, заключается в том, что оболочка сначала обрабатывает перенаправление, затем запускает sudo. Поскольку ваша оболочка не имеет доступа к файлу, перенаправление не работает.

12
задан 6 September 2010 в 23:55

99 ответов

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

10
ответ дан 26 May 2018 в 01:22
  • 1
    Мне кажется, это лучший вариант. Теперь посмотрим, как установить эту штуку :) – nathanvda 10 September 2010 в 12:43
  • 2
    [F1] – koushik 10 September 2010 в 16:47
  • 3
    Ответ RandomMonkey позволяет использовать полную функцию замены пути в Bash's cd " встроенный. – kmarsh 12 January 2017 в 18:31

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

10
ответ дан 25 July 2018 в 23:13

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

10
ответ дан 27 July 2018 в 03:24

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

10
ответ дан 31 July 2018 в 10:44

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

10
ответ дан 31 July 2018 в 11:48

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

10
ответ дан 2 August 2018 в 04:31

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

10
ответ дан 4 August 2018 в 21:05

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

10
ответ дан 6 August 2018 в 04:35

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

10
ответ дан 7 August 2018 в 22:45

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

10
ответ дан 10 August 2018 в 10:51

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

10
ответ дан 13 August 2018 в 17:25
  • 1
    Мне кажется, это лучший вариант. Теперь посмотрим, как установить эту штуку :) – nathanvda 10 September 2010 в 12:43
  • 2
    sudo apt-get install zsh – koushik 10 September 2010 в 16:47
  • 3
    Ответ RandomMonkey позволяет использовать полную функцию замены пути в Bash's cd & quot; встроенный. – kmarsh 12 January 2017 в 18:31

Это должно работать в bash на ubuntu 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 выше, вы можете сделать такую ​​функцию

[ f3]

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

9
ответ дан 26 May 2018 в 01:22
  • 1
    Это 1/2 пути. Если вы посмотрите на ответ RandomMonkey, вы увидите, что полная функциональность возможна внутри встроенного Bash Cd. – kmarsh 12 January 2017 в 18:32

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

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

7
ответ дан 26 May 2018 в 01:22
  • 1
    Вам нужно нажать только второй раз, если включена опция histverify shopt. – Dennis Williamson 7 September 2010 в 01:56
  • 2
    @Dennis: Спасибо, я забыл --norc при тестировании. – Gilles 7 September 2010 в 02:42

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

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }
7
ответ дан 26 May 2018 в 01:22

Если вы являетесь поклонником vi, вы можете включить режим vi в своей оболочке (например, bash -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
3
ответ дан 26 May 2018 в 01:22
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

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

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

И затем называя это так:

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

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

3
ответ дан 26 May 2018 в 01:22
  • 1
    Вам, конечно, не нужно избегать точек с правой стороны замены. В большинстве случаев, не избегая точек слева, тоже будет безвредным, если у вас нет много одинаково названных папок. – frabjous 7 September 2010 в 02:39
 ^2.0.1^1.0.8 

Вышеупомянутая команда swap 2.0.1 - 1.0.8 в последней команде, ее работа в bash

3
ответ дан 26 May 2018 в 01:22

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

cd 2.0.1 1.0.8

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

1
ответ дан 26 May 2018 в 01:22
  • 1
    Это не сработало для меня: ubuntu 10.04, bash "GNU bash, версия 4.1.5 (1) -release (i486-pc-linux-gnu)", я пробовал следующие команды: 2048 cd 2049 cd ~ / src /local-ubuntu-patches/cdtest/dir-v1.0.9/gnome-control-center-2.30.1/capplets/network/ 2050 cd dir-v1.2.9 dir-v1.0.9 / home / ing02741 / src / local- ubuntu-patches / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / network - допустимый путь. – koushik 7 September 2010 в 17:52
  • 2
    @koushik: Он написал, что это трюк оболочки Korn. Вы используете bash. bash! = korn. В Ubuntu ksh доступен через пакет «ksh». – maxschlepzig 10 September 2010 в 13:22
  • 3
    opps, мой плохой. Извините, я пропустил это. @maxschlepzig - спасибо за указание. – koushik 10 September 2010 в 16:45

Для обеспечения работы -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
ответ дан 26 May 2018 в 01:22

Для обеспечения работы -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
ответ дан 25 July 2018 в 23:13

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

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

7
ответ дан 25 July 2018 в 23:13
  • 1
    Вам нужно нажать только второй раз, если включена опция histverify shopt. – Dennis Williamson 7 September 2010 в 01:56
  • 2
    @Dennis: Спасибо, я забыл --norc при тестировании. – Gilles 7 September 2010 в 02:42

Это должно работать в bash на ubuntu 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
ответ дан 25 July 2018 в 23:13
  • 1
    Это 1/2 пути. Если вы посмотрите на ответ RandomMonkey, вы увидите, что полная функциональность возможна внутри встроенного Bash Cd. – kmarsh 12 January 2017 в 18:32

Если вы являетесь поклонником vi, вы можете включить режим vi в своей оболочке (например, bash -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
3
ответ дан 25 July 2018 в 23:13

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

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }
7
ответ дан 25 July 2018 в 23:13
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

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

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

И затем называя это так:

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

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

3
ответ дан 25 July 2018 в 23:13
  • 1
    Вам, конечно, не нужно избегать точек с правой стороны замены. В большинстве случаев, не избегая точек слева, тоже будет безвредным, если у вас нет много одинаково названных папок. – frabjous 7 September 2010 в 02:39
^2.0.1^1.0.8

Вышеупомянутая команда swap 2.0.1 - 1.0.8 в последней команде, ее работа в bash

3
ответ дан 25 July 2018 в 23:13

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

cd 2.0.1 1.0.8

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

1
ответ дан 25 July 2018 в 23:13
  • 1
    Это не сработало для меня: ubuntu 10.04, bash "GNU bash, версия 4.1.5 (1) -release (i486-pc-linux-gnu)", я пробовал следующие команды: 2048 cd 2049 cd ~ / src /local-ubuntu-patches/cdtest/dir-v1.0.9/gnome-control-center-2.30.1/capplets/network/ 2050 cd dir-v1.2.9 dir-v1.0.9 / home / ing02741 / src / local- ubuntu-patches / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / network - допустимый путь. – koushik 7 September 2010 в 17:52
  • 2
    @koushik: Он написал, что это трюк оболочки Korn. Вы используете bash. bash! = korn. В Ubuntu ksh доступен через пакет «ksh». – maxschlepzig 10 September 2010 в 13:22
  • 3
    opps, мой плохой. Извините, я пропустил это. @maxschlepzig - спасибо за указание. – koushik 10 September 2010 в 16:45

Для обеспечения работы -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
ответ дан 27 July 2018 в 03:24

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

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

7
ответ дан 27 July 2018 в 03:24
  • 1
    Вам нужно нажать только второй раз, если включена опция histverify shopt. – Dennis Williamson 7 September 2010 в 01:56
  • 2
    @Dennis: Спасибо, я забыл --norc при тестировании. – Gilles 7 September 2010 в 02:42

Это должно работать в bash на ubuntu 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
ответ дан 27 July 2018 в 03:24
  • 1
    Это 1/2 пути. Если вы посмотрите на ответ RandomMonkey, вы увидите, что полная функциональность возможна внутри встроенного Bash Cd. – kmarsh 12 January 2017 в 18:32

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

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