
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/myplugin
existe.
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
../../../../../staging
y 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 staging
para cambiar de una carpeta dev
a 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 cd
en todos los casos, excepto en dos argumentos.
Respuesta2
Agregue esta función a su .bash_profile
y al escribir cdstaging
podrá cambiar entre cualquier directorio dentro ~/dev
del 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 ksh
o zsh
:
cd dev staging