¿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 popdalternar, 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.cdtodas partes a mano. Fue doloroso Sin embargo, se utilizó la finalización automática con la tecla de tabulación.Respuestas:
Uso
pushdy luego los nombres especiales para los directorios en su pila de directorios:~1,~2, etc.Ejemplo:
La forma más efectiva de usar
pushdde 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 .bashSin 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$OLDPWDy 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.bashLa función integradapushdcon 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 bashdebajopushd,dirsetc.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 scrpor ejemplo. Es mucho más conveniente recordar el orden en la pila de historial o algo similar.fuente
Cuando
cden 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
xyzzypara hacer esto:La forma en que uso esto es copiar en la
/usr/bincarpeta y luegochmod a+xen ella. Luego, edito mi~/.bashrcarchivo 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_funcde Petar Marinov, básicamentecdcon 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ócdycd -N(dóndeNestá 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/morfy 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 'homepara 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,
d5salta 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
pushden 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, estedirselectalias solo aparecerácdsin 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 dirpara agregar un directorio sincdtocarlo al mismo tiempo)Puede rellenar previamente la
pushdpila haciendo algo como lo siguiente en su.bashrco~/.bash_profile:Puede eliminar entradas con
popdopopd -n.Ver
help pushd,help popdyhelp dirsen bash para más información. Y, por supuesto,man iselect.Por cierto,
iselectes 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
cdwcomo 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-binse 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 bashjumpque llamajump-bin.fuente
Yo uso
aliaspara 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