¿Existe una manera fácil de cambiar directorios desde una estructura de carpetas duplicadas a otra?

¿Existe una manera fácil de cambiar directorios desde una estructura de carpetas duplicadas a otra?

En nuestro servidor, tenemos varias estructuras de carpetas duplicadas para pruebas, preparación y producción. Aparte de cambios menores, la estructura de carpetas entre los tres es generalmente la misma.

Cuando trabajo en un complemento de WordPress, estoy profundamente inmerso en la estructura de carpetas de desarrollo (por ejemplo ~/dev/com/wp-content/plugins/myplugin). Sé que eso ~/staging/com/wp-content/plugins/mypluginexiste.

Si mi directorio de trabajo actual es ~/dev/com/wp-content/plugins/myplugin, ¿puedo cambiar fácilmente de alguna manera a~/staging/com/wp-content/plugins/myplugin sin¿Escribiendo toda la estructura del directorio?

Me gustaría escribir algo comocdx~/staging, o inclusocdx../../../../../stagingy haga que el comando intente recorrer el nuevo directorio usando la ruta de mi directorio actual. Obviamente, si la nueva carpeta no contiene la estructura adecuada, se producirá un error.

¿Estoy atascado escribiendo toda la estructura del directorio? ¿O hay un mejor camino?

Respuesta1

Utilice la sustitución de cadenas en bash:

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

Entonces una función como:

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

Y luego haga lo mismo cdx dev stagingpara cambiar de una carpeta deva staging. Con algunas comprobaciones, podrías nombrar la función cd:

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

Efecto:

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

Esto conserva el comportamiento habitual de cden todos los casos, excepto en dos argumentos.

Respuesta2

Agregue esta función a su .bash_profiley al escribir cdstagingpodrá cambiar entre cualquier directorio dentro ~/devdel equivalente en ~/staging.

Por supuesto puedes cambiar el nombre por el que quieras. Además, puede crear una función inversa simplemente cambiando el nombre de la función y "1s@dev@staging@"todo lo contrario.

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

Respuesta3

En ksho zsh:

cd dev staging

información relacionada