Trabajo mucho en Magento, y muchas de las personas con las que trabajo, y es molesto tener que escribir:
discos compactos ../../../../../../
Para descubrir que todavía tiene algunos directorios de su carpeta raíz 'httpdocs', entonces estoy tratando de hacer un script que siga este pseudocódigo:
while lowest level directory != httpdocs
cd ../
end while;
Parece bastante simple, supongo que tendría que hacer algún tipo de grep para verificar si la última parte del directorio de trabajo actual es httpdocs, si no, simplemente continúe subiendo un nivel hasta que sea cierto.
He estado buscando aprender bash para esto, aunque parece que ya debe haber algo similar que sea similar, y la sintaxis me desconcierta.
fuente
cd -
tarde para volver a donde estabas.Tengo una función llamada
upto
en mi .bashrc que le permite ir a cualquier directorio en la ruta actual por nombre:También tengo finalización para esta función, de modo que me da nombres de directorio válidos y finalización cuando presiono la pestaña:
Además, tengo otra función
jd
que me permite saltar a cualquier directorio debajo del actual:Ejemplo:
fuente
upto httpdocs
.jd
no parece funcionar en todos los casos, ¿te importaría explicar cómo funciona?**
). Para habilitar esta función en su uso bash shellshopt -s globstar
.jd
función, consulte gist.github.com/Rob--W/5888648 . Solo lo probé con Bash 4.2.45, así que YMMV.La función bash más simple que puedes poner en tu
.bashrc
que puedo pensar (simple porque no usa bucles o procesos externos) es:Este sistema utiliza la sustitución del modelo de expansión de parámetros para reemplazar todo lo que después
/httpdocs/
de$PWD
la `/ httpdocs'. Se ve muy desordenado porque tenemos que escapar de las barras diagonales en el camino para diferenciarlas de las barras diagonales en la sintaxis de expansión bash. Además, no escape las barras diagonales en la cadena de reemplazo, por lo que también parece inconsistente.Si no hay ninguna
/httpdocs/
en la ruta actual, no se realizarán sustituciones y solo cambiará al directorio actual.Por ejemplo, la sustitución reemplazará
/a/b/c/httpdocs/e/f/g
con/a/b/c/httpdocs
ycd
en ese directorio.La función debe estar en su entorno de shell actual (ya sea como una función o alias) ya que un proceso secundario no puede cambiar el directorio actual de su padre. Es por eso que digo ponerlo en su
.bashrc
y no en un script de shell.fuente
También podría poner algo como esto en su perfil:
Simplemente escribiendo
cdh
te llevará alhttpdocs
directorio más alto en tu ruta actual.fuente
No trata completamente su problema, pero ahorrará
cd ../../../../../../
un poco. He tomado prestado esto de la publicación del usuario desconocido aquí .arriba N
saltar N directorios hacia arriba en el árbol de directorios
En lugar de escribir
solo escribes
y un
te traerá de vuelta
Ponga la función en su .bashrc para usarla.
fuente