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

6

No nosso servidor, temos várias estruturas de pastas duplicadas para teste, teste 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 plug-in do WordPress, estou dentro da estrutura de pastas de desenvolvimento (ex ~/dev/com/wp-content/plugins/myplugin ). Eu sei que ~/staging/com/wp-content/plugins/myplugin existe.

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

Eu gostaria de digitar algo como cdx ~/staging ou mesmo cdx ../../../../../staging e ter o comando tentando percorrer o novo diretório usando meu caminho de diretório atual. Obviamente, se a nova pasta não contiver a estrutura correta, isso causaria um erro.

Estou preso digitando toda a estrutura de diretórios? Ou há uma maneira melhor?

    
por Stephen Schrauger 17.11.2014 / 16:57

3 respostas

6

Use a 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}"
}

Em seguida, use cdx dev staging para alternar de uma pasta em dev para 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 #

Isso retém o comportamento usual de cd em todos os casos, com exceção de dois argumentos.

    
por 17.11.2014 / 17:34
2

Adicione esta função ao seu .bash_profile e digite cdstaging , você poderá alterar entre qualquer diretório dentro de ~/dev para o equivalente em ~/staging .

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

cdstaging ()
{
        OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
        NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
        cd $NEWPATH
}
    
por 17.11.2014 / 17:53
2

Em ksh ou zsh :

cd dev staging
    
por 18.11.2014 / 12:00