altere o diretório (cd), mas substituindo apenas uma parte do caminho

12

Não tenho certeza se é possível, mas parece que me lembro dos meus velhos tempos usando o AIX, era possível mudar meu caminho apenas dizendo qual parte do caminho precisava ser substituída por outra coisa. Por exemplo, digamos que eu tenha dois caminhos:

/etc/application-2.0.1/options/default

e

/etc/application-1.0.8/options/default

que eu poderia mudar da pasta 1 para 2 usando um comando como

cd /2.0.1/1.0.8 /

que substituiria, no caminho, a string 2.0.1 to 1.0.8 . Obviamente, isso não funciona para mim agora. Mas há uma maneira de fazer isso?

    
por nathanvda 06.09.2010 / 20:55

9 respostas

10

Se você usar o zsh como shell, basta digitar cd 1.0.8 2.0.1 .

    
por qbi 06.09.2010 / 23:14
9

Isso deve funcionar no bash no Ubuntu 10.04: cd ${PWD/old/new} . Basicamente, isso substitui a primeira ocorrência de old no seu diretório de trabalho atual com new . 2 exemplos abaixo.

Exemplo 1

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

Exemplo 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$ 

Emprestando a ideia de sepp2k acima, você poderia fazer uma função como essa

function mycd { cd ${PWD//} }

e, em seguida, use algo como mycd 2.0.1 1.0.8 para alternar.

    
por koushik 07.09.2010 / 15:29
7

Você provavelmente está se lembrando da expansão do histórico. Eu não sei o que estava disponível em seu shell no AIX, mas uma maneira de fazer isso no bash é ^2.0.1^1.0.8 .

A expansão do histórico é menos útil com shells como bash e zsh, que possuem uma poderosa edição de linha de comando. Você pode usar as teclas de seta para chamar comandos anteriores, e Alt + . para inserir a última palavra do comando anterior (pressione duas vezes para alcançar o comando antes e assim por diante) ).

    
por Gilles 06.09.2010 / 21:49
7

Eu mesmo usei (e perdi) esse recurso. Depende de qual sabor e / ou lançamento do * nix você está usando. Se você usar o bash, aqui está uma maneira prática de estender o cd embutido para incluir essa funcionalidade. Coloque isso no seu .bashrc (ou para testar cole no seu bash shell e aperte enter).

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD//}; else builtin cd ; fi }
    
por RandomMonkey 22.05.2012 / 23:56
3

Se você é um fan do vi você pode habilitar o modo vi no seu shell (bash set -o vi por exemplo) e usar o modo de comando do vi ...

Ou você pode fazer uma expansão louca do histórico (testado em zsh, talvez também em 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
    
por maxschlepzig 06.09.2010 / 21:16
3
cd 'pwd | sed 's/2\.0\.1/1\.0\.8/''

No entanto isso não é muito bonito. Você pode muito bem, colocando-o em uma função:

function mycd { cd 'pwd | sed s' }

E, em seguida, chamando assim:

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

Você ainda precisa escapar dos pontos, mas eu tenho certeza que isso pode ser contornado também com um pouco de pensamento.

    
por sepp2k 06.09.2010 / 21:16
3
 ^2.0.1^1.0.8 

O comando acima troca 2.0.1 para 1.0.8 no último comando, seu trabalho no bash

    
por SergioAraujo 13.10.2010 / 19:17
1

Não tenho certeza sobre o AIX, mas lembro-me disso como um antigo truque de shell Korn nas caixas do Solaris que eu costumava administrar. No seu exemplo, você digitaria o comando:

cd 2.0.1 1.0.8

Mais algumas informações aqui .

    
por Trieu 07.09.2010 / 01:29
0

Para garantir que -P|-L|- work use o seguinte:

function cd () {
    typeset arg=
    case  in -|-L|-P) arg= ; shift ;; esac
    [ $# -gt 1 ] && {
        builtin cd $arg "${PWD//}"
    } || {
        builtin cd $arg "$@"
    }
}
    
por Brett Ryan 28.01.2015 / 07:01

Tags