¿Cuál es una forma rápida de línea de comando para cambiar entre múltiples directorios para la administración del sistema? Quiero decir, puedo usar pushd .
y popd
alternar, pero ¿qué pasa si quiero almacenar múltiplos y recorrerlos, en lugar de sacarlos permanentemente del fondo de la pila?
bash
shell-script
administration
Volomike
fuente
fuente
$CDPATH
¿quizás?cd -
después de buscar en Google instigado por esta pregunta.cd
todas partes a mano. Fue doloroso Sin embargo, se utilizó la finalización automática con la tecla de tabulación.Respuestas:
Uso
pushd
y luego los nombres especiales para los directorios en su pila de directorios:~1
,~2
, etc.Ejemplo:
La forma más efectiva de usar
pushd
de esta manera es cargar su lista de directorios, luego agregar un directorio más para que sea su directorio actual, y luego puede saltar entre los números estáticos sin afectar la posición de los directorios en su pila.También vale la pena señalar que
cd -
lo llevará al último directorio en el que estuvo. También lo harácd ~-
.La ventaja de
~-
más de simplemente-
es que-
es específica paracd
, mientras que~-
se expande por su cáscara de la misma manera que~1
,~2
, etc. son. Esto es útil cuando se copia un archivo entre rutas de directorio muy largas; p.ej:Lo anterior es equivalente a:
fuente
cd -
cd -
actúa como un ForthDROP DUP
, por ejemplo, si uno comienza con el directorio a , con stack abcd , acd -
cambia la pila a bbcd .bash
Sin embargo, tal vez sea un error, ya que un segundocd -
cambia la pila a abcd . De esto podemos inferir quecd -
usa una estructura de datos separada para almacenar el directorio anterior, además de cambiar la pila.cd -
usos$OLDPWD
y nada más.cd -
fue la característica de bash anterior , luego agregaron una pila, pero temieron romper el código anterior más de lo que querían un diseño más simple. Corrección a la anterior,cd -
actúa algo así como un ForthOLDPWD @ SWAP OLDPWD ! DUP .
A diferenciacd foo
,cd -
imprime el nombre del directorio intercambiado.bash
La función integradapushd
con las opciones+
y-
puede rotar la pila de directorios. La sintaxis puede ser un poco confusa, quizás porque esa pila es una matriz basada en cero . Estas funciones de contenedor simples recorren la pila de directorios:Prueba: configure una pila de cuatro directorios.
Ahora / tmp es el directorio actual, y la pila se ve así:
Cambie al siguiente directorio en la pila, (y muéstrelo), cuatro veces:
Salida:
Cambie al directorio anterior en la pila, (y muéstrelo), cuatro veces:
Salida:
Una nota sobre
cd -
: La respuesta de Wildcard ayudó a ilustrar cómocd -
no se usa la matriz $ DIRSTACK (usa la variable $ OLDPW ), por lo quecd -
no afecta a $ DIRSTACK de la forma en que debería hacerlo un intercambio basado en pila. Para corregir eso, aquí hay una simple función de intercambio basada en $ DIRSTACK :Prueba:
Salida:
fuente
popd
, para eliminarlo sin cambiar los directorios, hagapopd -n
. Para limpiar la pila, hazlodirs -c
. Lástima que los diseñadores de bash enterraron funciones tan útiles en una sintaxis no intuitiva. Verman bash
debajopushd
,dirs
etc.Te sugiero que instales fasd . Le brinda la capacidad de saltar rápidamente a cualquier directorio en el que ya haya estado escribiendo solo una pequeña fracción de su nombre.
Ejemplo: si ha visitado
/home/someName/scripts/
, puede saltar allí simplemente escribiendo,z scr
por ejemplo. Es mucho más conveniente recordar el orden en la pila de historial o algo similar.fuente
Cuando
cd
en alguna parte, Bash almacena el directorio de trabajo de edad una variable de entorno,$OLDPWD
.Puede volver a ese directorio con
cd -
, que es equivalente acd "$OLDPWD"
.Puede rebotar de un lado a otro entre los directorios de esta manera:
fuente
Escribí un script llamado
xyzzy
para hacer esto:La forma en que uso esto es copiar en la
/usr/bin
carpeta y luegochmod a+x
en ella. Luego, edito mi~/.bashrc
archivo de cuenta raíz y de usuario para incluir estas líneas en la parte inferior:El 'xy' es una forma abreviada del comando para escribir más rápido.
Entonces, puedo almacenar el directorio actual en la lista con ...
... y repita según sea necesario. Una vez que complete esta lista con los directorios que necesito, permanecerán allí hasta que reinicie la computadora porque es cuando / tmp se borra nuevamente. Entonces puedo escribir ...
... para enumerar los directorios guardados actualmente. Para cambiar a un directorio, tengo dos opciones. Una opción es especificar la ruta por índice (y es un índice basado en 1) así:
... que cambiaría al directorio que es el segundo elemento de la lista. O bien, podría dejar el número de índice y simplemente hacer:
... para que recorra cada directorio como lo necesito. Para más comandos que puede hacer, escriba:
Por supuesto, el trabajo es más divertido con las tontas declaraciones de eco que agregué.
Tenga en cuenta que xyzzy es una referencia a la aventura de texto Collosal Cave , donde escribir xyzzy le permitiría cambiar entre dos salas en el juego para evitar grues.
fuente
Utilizo un pequeño script llamado z [link] , que también podría ser de interés, a pesar de que no hace exactamente lo que me pediste.
fuente
También hay
cd_func
de Petar Marinov, básicamentecd
con un historial de hasta 10 entradas: http://linuxgazette.net/109/misc/marinov/acd_func.htmlSimplemente use
cd --
para mostrar una lista de los últimos 10 directorios a los que editócd
ycd -N
(dóndeN
está el índice de la entrada) para ir allí.fuente
Principalmente uso ZSH con el perfil oh-my-zsh . Puede escribir en una terminal la siguiente coincidencia:
Luego, simplemente puede usar flechas (arriba y abajo) para recorrer todo el historial de shell que muestra solo aquellas entradas que comienzan con los caracteres anteriores. Entonces, por ejemplo, si fue a
/home/morfik/Desktop/
y/home/morfik/something/
, puede cambiar entre los directorios muy rápido. No importa cuántas entradas en el historial de shell tenga, pero cuando tenga muchas, simplemente use una mejor expresión, es decir,cd /home/morf
y aquí presione las flechas arriba / abajo en su teclado.También hay otra forma de lograr la solución. En este caso, debe usar tmux y FZF . Luego solo crea una tecla de acceso rápido, por ejemplo ctrl-r, y cuando la presiona, su ventana actual se dividirá y verá esto:
Ahora puede usar expresiones para buscar en la lista. Acabo de escribir
^cd /media
, que devuelve solo las entradas que comienzan con la frase. Por supuesto, puede escribir'cd 'home
para que coincida con el comando y también con el nombre completo del directorio (no la ruta, solo el nombre):fuente
Puede lograr esto con un montón de alias en su
~/.bashrc
(o equivalente)El objetivo principal es escribir casi al mínimo (por ejemplo,
d5
salta al directorio número 5 en el grupo) para cambiar entre directorios en el grupo. También queremos facilitar la adición / eliminación de directorios a / del grupo:Ahora, cada vez que inserta un directorio en la pila, se agrega al grupo numerado en la posición 0 (el directorio actual) y puede saltar (cambiar directorios) con muy poca escritura (
d<N>
) y puede ver su grupo actual numerado en cualquier tiempo simplemente escribiendod
.Algunos ejemplos de uso de estos alias:
Mostrar el grupo de directorios numerado, (el directorio actual es # 0)
Cambiar entre directorios: usar
d<N>
Agregar un nuevo directorio al grupo
Salta un poco más:
Eliminar / abrir el directorio superior (actual) del grupo
fuente
Si tiene instalado iselect , puede hacer algo como esto:
Esto le proporcionará un menú navegable interactivo con teclas de flecha basadas en ncurses en pantalla completa para seleccionar un directorio
cd
.Si no ha utilizado
pushd
en la sesión de shell actual, la lista de directorios en el menú comienza con una sola entrada, su directorio actual. Si solo hay una entrada, estedirselect
alias solo aparecerácd
sin la pantalla del menú, por lo que efectivamente no hace nada (excepto evitarcd -
hacer algo útil)Para agregar un nuevo directorio a la lista, use
pushd dir
(opushd -n dir
para agregar un directorio sincd
tocarlo al mismo tiempo)Puede rellenar previamente la
pushd
pila haciendo algo como lo siguiente en su.bashrc
o~/.bash_profile
:Puede eliminar entradas con
popd
opopd -n
.Ver
help pushd
,help popd
yhelp dirs
en bash para más información. Y, por supuesto,man iselect
.Por cierto,
iselect
es probable que esté disponible preenvasado para su distribución. Es para Debian y Ubuntu, etc., y probablemente también para otros.fuente
Si tiene 5 o 10 directorios que usa mucho, y no necesariamente se preocupa por los 5 o 10 directorios usados recientemente , configure algunos alias de comando como
Entonces, cuando quiero ir al directorio de la página de inicio de Apache, simplemente escribo
cdw
como respondí en Equivalente de alias para un enlace simbólico. .fuente
Estoy usando jump para cambiar rápidamente el directorio de trabajo.
Para agregar el directorio actual:
Para enumerar todos sus marcadores:
p.ej:
Ahora puede saltar fácilmente a otro directorio:
Admite autocompletado para bash y zsh.
Editar (en respuesta a @Joe): el binario
jump-bin
se almacena en/usr/local/bin
, y con el script de integración bash (en mi PC ubicado en/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
) crea una función bashjump
que llamajump-bin
.fuente
Yo uso
alias
para navegar. Si tiene pocos directorios a los que se accede con frecuencia, simplemente configure los alias. Por ejemplo,Entonces simplemente
le llevará a
/etc
.fuente