Existe uma maneira fácil de alterar diretórios de uma estrutura de pastas duplicadas para outra?

Existe uma maneira fácil de alterar diretórios de uma estrutura de pastas duplicadas para outra?

Em nosso servidor, temos várias estruturas de pastas duplicadas para teste, preparação e produção. Além de pequenas alterações, a estrutura de pastas entre os três é geralmente a mesma.

Quando estou trabalhando em um plugin do WordPress, estou profundamente envolvido na estrutura da pasta de desenvolvimento (ex ~/dev/com/wp-content/plugins/myplugin.). Eu sei que isso ~/staging/com/wp-content/plugins/mypluginexiste.

Se meu diretório de trabalho atual for ~/dev/com/wp-content/plugins/myplugin, posso mudar facilmente para~/staging/com/wp-content/plugins/myplugin semdigitando toda a estrutura de diretórios?

Eu gostaria de digitar algo comocdx~/staging, ou mesmocdx../../../../../staginge faça com que o comando tente percorrer o novo diretório usando meu caminho de diretório atual. Obviamente, se a nova pasta não contiver a estrutura adequada, ocorrerá um erro.

Estou preso digitando toda a estrutura de diretórios? Ou há um jeito melhor?

Responder1

Use substituição de string em bash:

$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin

Então, uma função como:

cdx () 
{
    cd "${PWD/$1/$2}"
}

E então faça cdx dev stagingpara mudar de uma pasta devpara staging. Com algumas verificações, você poderia nomear a função cd:

cd ()
{
    if [ $# != 2 ]
    then
        builtin cd "$@"
    else
        builtin cd "${PWD/$1/$2}"
    fi
}

Efeito:

~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #

Isto mantém o comportamento usual de cdem todos os casos, exceto para dois argumentos.

Responder2

Adicione esta função ao seu .bash_profilee digitando cdstagingvocê poderá alternar entre qualquer diretório dentro ~/devdo equivalente em ~/staging.

Claro que você pode alterar o nome para o que quiser. Além disso, você pode criar uma função reversa apenas alterando o nome da função e "1s@dev@staging@"exatamente o oposto.

cdstaging ()
{
        OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
        NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
        cd $NEWPATH
}

Responder3

Em kshou zsh:

cd dev staging

informação relacionada