Pregunta ¿Cómo puedo cambiar al directorio anterior en lugar de subir?


Actualmente paso muchas de mis horas de trabajo yendo y viniendo entre dos caminos que están muy abajo en el árbol y se desvían el uno del otro en la raíz. Me sorprende que mi vida sería mucho más fácil si hubiera un argumento para cd eso lleva al usuario al último directorio en el que se encontraba

Es decir, si estoy en:

/etc/foo/bar/baz/moo

y luego escribe:

cd /var/lib/fubarred_app/blargh/logs

Me gustaría poder volver al primer directorio sin tener que escribir toda la ruta nuevamente.

La clave de memoria no se corta, ya que uso suficientes comandos en cada lugar que es tan difícil volver y encontrar la ruta que quiero, ya que es para escribirla yo mismo.

¿Hay un comando corto que me permita ir al directorio anterior?


209


origen


además de @BryanEs una excelente respuesta, podrías considerar crear un par de alias para cada ruta, así que puedes escribir algo como: "bazmoo"o"blarghlog"en el prompt :) - warren
¿Por qué no solo usas Pantalla GNU? - Shi
¿Qué caparazón? Eso hace una gran diferencia. - Randal Schwartz
@warren ditto. esa es mi forma preferida de hacer todo. la mitad de lo que uso mi computadora tiene su propio alias ahora ... =) - ixtmixilix
Fasd es increíble. Echale un vistazo. - majkinetor


Respuestas:


El comando

cd -

llevará a cabo el intercambio que necesita en la mayoría de las capas principales, la variante más antigua es más larga

cd "$OLDPWD"

que usará la variable de entorno que contiene el directorio de trabajo anterior.


los Página de manual de POSIX para cd menciona:

DESCRIPCIÓN

Si, durante la ejecución de los pasos anteriores, se cambia la variable de entorno PWD, la variable de entorno OLDPWD también se cambiará al valor del antiguo directorio de trabajo (que es el directorio de trabajo actual inmediatamente anterior a la llamada a cd).

OPERANDS

-Cuando se usa un guion como operando, esto debe ser equivalente al comando:

cd "$OLDPWD" && pwd 

que cambia al directorio de trabajo anterior y luego escribe su nombre.


292



Tenga en cuenta que esto realmente depende del shell que está utilizando, y como no lo especificó, sería difícil dar la respuesta "portátil" que no existe. - Randal Schwartz
@Randall, Tal vez podrías combinar todos tus comentarios de shell individuales en una respuesta de Voltron-Shell. - hyperslug
@Randall. Estaba usando Bash. Funciona en ksh y zsh también. Por cierto, primero aprendí a programar desde la edición de 1994 de Perl de aprendizaje así que discúlpame mientras fanboy un poco. :) - Yitzchak
Hmm, yo usé cd $OLDPWD para esto. Es bueno que las conchas convencionales ofrezcan una forma mucho más corta. - ulidtko
@sinni Ciertos sabores hacer tener pushd, y al menos es un built-in en bash. - slhck


Además de la respuesta de Bryan, vale la pena mencionar que también hay pushd y popd, que crean directorios como una pila. Esto también está disponible en Windows NT; sin embargo, no está disponible en todas las conchas.

Por ejemplo, podemos ir a tres directorios diferentes, y siempre verá su pila cuando llame pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

Y cuando llamas popd tres veces seguidas, llegas a esos directorios en la pila en orden inverso. Al mismo tiempo, la pila se vaciará de nuevo.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Si está usando Zsh; tiene una opción AUTO_PUSHD, que automáticamente empujará cdestá en la pila.


105



pushd y popd no están disponibles en todos los shells. - Randal Schwartz
@ Wiesław: ¿De verdad? Desearía que bash tuviera eso ... Por supuesto, podría alias cd a pushd, y en su mayoría sería lo mismo. - Chris Charabaruk
O alias pd a pushd y tener ambos. BTW pushd (o pd, si lo alias) por sí mismo intercambia el directorio actual y el último directorio, esencialmente logrando lo que 'cd -' hace. - JRobert
Me gusta el concepto, pero nunca me acostumbré a ellos. - Thorbjørn Ravn Andersen


Hay algunos programas de "salto"

  • autojump (mantenido con características básicas)
  • j2  (aparentemente sin mantenimiento con algunas características avanzadas)
  • z (versión mantenida de "j" con características avanzadas)

Estos facilitan cualquier tipo de navegación de directorio. Lo usas dando una parte del camino y simplemente funciona.

En tu caso

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Puede asignar cualquier letra que desee a estos programas, "j" es tradición :)

j2 yz soportan múltiples términos de búsqueda, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... y más opciones.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

13



"j" es claramente específico de shell. Tú no dijiste eso. - Randal Schwartz
@Randal: ¿cómo es específico de la carcasa? Es un programa - Fixee
Soy un idiota. :) Ya lo veo. - Randal Schwartz


Además de cd - y cd $OLDPWD

Puede usar la búsqueda de historial presionando CTRL-R y escribiendo algunas letras del cd comando que ingresaste antes Prensado CTRL-R repetidamente traerá coincidencias más antiguas.

Este método será más útil si tiene más de dos rutas para cambiar.


10



CTRL-R no necesariamente ayudará. Es posible que haya estado en / some / obscure / directory / deep y haya realizado "cd evendeeperdir" y luego haya ido a ~ / somehere / different. - justintime
¡Estupendo! Funciona para otras cosas que cd, ¡gran ayuda! - Niloct


Puede usar esto para crear fácilmente alias para directorios:

a() { alias $1=cd\ $PWD; }

a 1

y después:

1

9



Solo en un shell que entiende alias y funciones. No todos lo hacen. - Randal Schwartz
así que esto se salta al escribir alias = ¿partes? hmmmm - Xen2050


Bashmarks te permitirá marcar una serie de carpetas y saltar entre ellas con la finalización de la pestaña:

Para marcar una carpeta, simplemente vaya a esa carpeta y luego márquela de la siguiente manera:

bookmark foo

El marcador se llamará "foo". Cuando desee volver a esa carpeta, use:

go foo

Para ver una lista de los marcadores:

bookmarksshow

La finalización de pestañas funciona, para ir al marcador shoobie, simplemente:

go sho[tab]

6





Otra posibilidad sería mantener abiertas dos ventanas, con una posicionada en cada directorio.


4



Sin embargo, no hay historia compartida, si usas / editas comandos previos regularmente (tal vez un reinicio los obtendría ...?) - Xen2050
@ Xen2050 Ver la opción de caparazón share_history en zsh. - Radon Rosborough


Sé que esto no es estrictamente una respuesta a su pregunta, pero es útil para alcanzar el objetivo de llevándote a tus directorios importantes.

en cualquier descenso UNIX-bash que puedas usar CDPATH para ampliar la carpeta en la que se encuentra el comando cd

de mi archivo .bashrc:

export CDPATH='.:~/source/'

discos compactos primero busca en su carpeta actual, luego busca en mi directorio de proyecto de codificación.

cd myproject

.. me lleva a ~ / sources / myproject desde donde estoy actualmente parado.

Pequeña característica simple que ha ayudado mucho a mi navegación de directorio.


4



+1 Esto agrega la carpeta CDPATH a cdlista de autocompletar (TAB), que es Bueno. Pero Si el . no esta incluido y si hay una carpeta en una carpeta CDPATH con el mismo nombre como uno en su directorio actual, entonces cd samename irá al directorio CDPATH y no el que está en el directorio actual, que es malo. Tengo que usar cd ./samename para entrar en una carpeta dup - Xen2050
Sí, buen comentario. Incluir siempre el primer ., o experimentarás cosas raras. - phareim