Sabemos que usar cd <directory>
abrirá el directorio, si existe.
Además, cd ..
nos llevará un nivel desde el directorio de trabajo actual.
Pero, cuando tenemos un directorio anidado con una ruta más larga como /home/thina/teams/td/tech/app/release/apks
, es agotador ir a la carpeta apks
y también es difícil volver a otro nodo, digamos aquí /home/thina/teams
.
¿Hay alguna forma de omitir el tipeo de cd
y cd ..
? Estoy usando Ubuntu 16.04.
command-line
bash
directory
gsthina
fuente
fuente
cd
ycd ..
?cd ../../../../..
CDPATH
variable en losbash
documentos.Respuestas:
Hay
pushd
ypopd
:Prueba
help pushd
yhelp popd
para más opciones. No hayman
página, porquepushd
ypopd
son comandos incorporados bash.fuente
cd -
haría lo mismo?pushd
ypopd
puede recordar más de una trayectoria anterior.dirs
enumerar su pila de directorios dentro de los comandospushd
/popd
.help pushd
yhelp popd
que usted ha mencionado (así comohelp dirs
) pero pensé que me gustaría mencionar que en el caso en que la gente se preguntaba estos comandos vienen.help pusdh
Además de las muy buenas respuestas ya proporcionadas, aquí hay algunos consejos sobre el uso
cd
efectivo.cd -
lo llevará de regreso al último directorio en el que estuvo.cd ../../..
te llevará 3 niveles a la vez, puedes usar la..
notación encadenada para 'subir' tantos directorios como quieras.cd ..
, luego use el historial de bash presionando la tecla de flecha hacia arriba para usar el comando nuevamente.~
para reemplazar el directorio de inicio de los usuarios actuales, si ha iniciado sesión como el usuario thinacd ~/teams
, lo llevará a/home/thina/teams
cd
comando, si escribe parte de un segmento de la trayectoria seguida por Tab, ese segmento se completará si no hay otra opción válida. Por ejemplo, si hubiera escritocd /home/thina/teams/td/t
entonces presionado Tab, la palabra tecnología se rellenará automáticamente, siempre y cuando no había otros archivos o directorios en el directorio td que se inició con la letra t.El uso de estos consejos juntos pueden hacer directorios de desplazamiento con
cd
mucho menos doloroso.fuente
~
, particularmente si es root, lo~user
llevará rápidamente aluser
directorio de inicio de.Para subir en el árbol varios niveles a la vez, puede usar la siguiente función (gracias a muru por la versión mejorada):
Entonces puedes hacer:
Adicionalmente:
up
sin un argumento es equivalente acd ..
, debido a${1:-1}
la cual sustitutos$1
cuando set y1
lo contrariocd ..
tiene como objetivo preservar el habitualcd -
comportamiento.fuente
-gt
lugar de>
.>
es lexicográfico, se compara como cadenas. Además, en lugar de construir un camino, por qué no hacerlocd ..
en un bucle:for i in $(seq "${1:-1}"); cd ..; done
? Eso también puede eliminar laif
condición.gt
comentario, pero con respecto a su segunda sugerencia, vea la viñeta final en la respuesta. Tiene sentido para mi.OLDPWD
la ruta original. Aquí hay una versión completa: paste.ubuntu.com/17990874Para nombres de directorio largos, use variables con ruta completa. Por ejemplo,
Entonces puedes hacer solo
cd "$APKS"
En cuanto a subir x número de directorios, tengo esta función definida en mi
.bashrc
Volver a
/home/thina/teams
deapks
ti haríaAquí hay un ejemplo de uso:
Otra pequeña función que se me ocurrió, pero que nunca usé tanto es la
bookmark
función.Así es como funciona: guarda su carpeta actual en algún archivo, y luego puede cd a un directorio específico basado en el número de línea en ese archivo. Ejemplo:
Y aquí está la función en sí:
fuente
ACTUALIZACIÓN: hay una herramienta aún más poderosa que
autojump
:fasd
pero no estoy familiarizado con ella.Me sorprende que nadie haya mencionado
autojump
todavía quéEs básicamente lo que ha construido @graipher, con algunas opciones adicionales.
Como ya he mencionado en otra pregunta:
Después de cd varias veces a un directorio (incluso una vez es suficiente):
cd /home/thina/teams/td/tech/app/release/apks
puede usar el acceso directo
j
para moverse rápidamente allí, independientemente del directorio en el que se encuentre actualmente:j apks
Tenga en cuenta que el uso de cualquier parte de la ruta funciona, siempre que sea el más alto de la lista:
j app
también lo llevará.../apks
si fue allí más veces que a otras.../app
.Lo recomendaría en lugar de tener su propio script, ya que está bien mantenido, distribuido para Ubuntu y tiene otras características interesantes, como saltar al niño :
Te ha mudado a ,
apks
entd
lugar de otroapks
debajo de un árbol diferente.fuente
Alias
Tengo una lista de directorios de uso frecuente disponibles directamente a través de alias. Esto también incluye accesos directos para los directorios de la jerarquía.
Ahora, cuando quiero subir tres niveles, simplemente
....<Enter>
escribo y ¡ahí estoy!fuente
Active la
autocd
opción (shopt -s autocd
), para que no tenga que escribircd
. Por ejemplo, solo necesita el comando de dos caracteres..
para ir al directorio principal.Si está navegando entre dos directorios, puede alternar entre ellos
cd -
, que va al directorio de trabajo anterior. Laautocd
opción no se-
ejecuta,cd -
pero puede definir un alias o función para eso.Puede memorizar directorios en una pila con los builtins
pushd
ypopd
. El incorporadodirs
enumera la pila de directorios (me parecedirs -v
más legible).Si con frecuencia cambia a subdirectorios de un directorio en particular, y estos subdirectorios tienen un nombre bastante único, agréguelos a la
CDPATH
variable. Sin embargo, tenga en cuenta que nunca he encontrado una situación en la queCDPATH
fuera realmente útil.Puede establecer una variable en un nombre de directorio y luego cambiarlo con
$foo
.Zsh tiene algunas características agradables que bash no tiene. Algunos de ellos se pueden emular escribiendo funciones que hacen el mismo trabajo. En particular, la forma de dos argumentos le
cd
permite cambiar convenientemente a otro directorio con un nombre similar, por ejemplo/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, desde , la ejecucióncd release beta
va a/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.fuente
Como ya respondí a una pregunta relacionada en UnixSE, utilizo un script llamado z [github] para esto.
Recuerda los directorios a los que ingresó, los clasifica según su frecuencia (frecuencia + actualidad) y le permite cambiar a una de las rutas recordadas utilizando alguna parte de su nombre.
Después de haber cd'ed a un directorio al menos una vez, puede hacer, por ejemplo, en lugar de:
Solo haz:
lo que funcionará, utilizando una coincidencia parcial de nombres (suponiendo que no tenga otro directorio que contenga en su ruta el término sub y que tenga una frecuencia más alta).
También definí una función como esta, que primero prueba un cd normal y si eso falla usa z:
Esto te da lo mejor de ambos. Si la carpeta está en el directorio actual o si se proporciona una ruta completa válida, solo aparecerá en el CD, pero si no, intentará encontrar una coincidencia en la base de datos y allí. Esto elimina el dolor (pequeño) de tener que usar a veces cd (para entrenar la base de datos, ir a una carpeta en la que nunca había estado antes) y a veces recordar usar z, cuando corresponda.
fuente
cd
tuyo no interfiere con la forma en que sez
acumula la base de datos de los directorios visitados con frecuencia?autojump
?Tres opciones más que encuentro que funcionan bien (aunque en el futuro pueda usar
pushd
más, solo acabo de enterarme de eso):Organice sus rutas para que no necesite
cd
en directorios profundamente anidados en primer lugar, o más bien: para que las ubicaciones que necesita visitar a menudo estén al alcance de su mano. La forma de lograr esto es con enlaces simbólicos : mantenga los directorios explícitos y bien jerarquizados tal como están, pero cree un enlace de acceso rápido para su propia conveniencia.Luego, en lugar de escribir el camino largo hacia
cd
, simplemente usecd ~/apks
, ycd ../teams
(o, en ese ejemplo preferible~/teams
) , para regresar.No use un solo shell y un CD de ida y vuelta entre las rutas, pero mantenga un shell en ejecución para cada una de las rutas en las que necesita trabajar. Hay varios niveles en los que puede lograr esta multitarea:
tmux
.Simplemente inicie una acción en un comando de propósito único que se encuentra
cd
en la carpeta, hace una cosa allí e inmediatamente devuelve el control de la carpeta original: en lugar desimplemente haz el one-liner
o equivalente
No
cd
en absoluto , sino simplemente ejecutar el comando derecha desde su directorio principal. Las expansiones de llaves pueden ayudar mucho aquí: en lugar detu puedes hacer
fuente
pushd
Es muy muy útil. Es posible que desee agregar más información sobre cómo usarlo para mejorar su respuesta.Pushd y Popd
Los comandos
pushd
ypopd
son mis favoritos. Elpushd
comando recordará los directorios que ha visitado, visibles con el comandodirs
, y cuando esté listo para saltar hacia atrás, usepopd
para regresar.Aquí hay un ejemplo usando las funciones de bash y los alias:
Constantemente uso una combinación de estos comandos de varias maneras.
Alias
Otra opción para los directorios a los que se accede con frecuencia es simplemente alias de los comandos
cd
opushd
. Entonces, usando los ejemplos de tu publicación:Combinación
Combina las dos ideas e incluso puedes tener esto:
Lo que le da mucha flexibilidad para atravesar directorios. Guardo las
cd***
ysd***
los alias en la mano para cosas comoDesktop
,Documents
,Music
,Downloads
, etc y es muy práctico!fuente
Prueba z.lua : un nuevo comando de CD que te ayuda a navegar más rápido aprendiendo tus hábitos.
cd a un directorio contiene foo:
cd a un directorio termina con foo:
usa múltiples argumentos:
Asumiendo la siguiente base de datos:
"z in"
sería cd en/home/user/mail/inbox
la entrada de mayor peso. Sin embargo, puede pasar múltiples argumentos a z.lua para preferir una entrada diferente. En el ejemplo anterior,"z w in"
cambiaría el directorio a/home/user/work/inbox
.cd con selección interactiva:
Cuando se encuentran varias coincidencias, el uso
z -i
mostrará una lista:Luego puede ingresar el número y elegir a dónde ir antes del cd real. p.ej. entrada 3 a cd a
/home/data/software
. Y si solo presiona ENTER y no ingresa nada, simplemente se cerrará y permanecerá donde estaba.z.lua
También admite lafzf
selección interactiva o la finalización de argumentos:terminación con fzf
rápido volver al padre sin escribir
cd ../../..
:La nueva opción
"-b"
puede volver rápidamente a un directorio padre específico en bash en lugar de escribir "cd ../../ .." de forma redundante:(Sin argumento) :
cd
en la raíz del proyecto, la raíz del proyecto es el directorio principal más cercano con.git
/.hg
/.svn
en él.(Un argumento) :
cd
en el padre más cercano que comienza con la palabra clave, si no encuentra, vaya al padre que contiene la palabra clave.(Dos argumentos) : reemplace el primer valor con el segundo (en la ruta actual).
...
Comencemos alias
z -b
azb
:Desearía que se ajuste a tu necesidad.
fuente
El pescado tiene varias instalaciones agradables para moverse rápidamente.
Además, mantengo mis directorios favoritos enlazados a ~ / f, por lo que puedo cd ~ / f / x para llegar a ~ / foo / bar / baz / experimental-data.
fuente
Durante mucho tiempo he usado alias para directorios de acceso frecuente.
También tengo una función bash llamada ccb (abreviatura de crear archivo bat de CD - esto se originó en dos / windows donde el script de shell .bat ccb.bat crearía otro archivo .bat para saltar al directorio actual) que crea / agrega alias (en el archivo .bash_aliases) al directorio actual.
por ejemplo: $ ccb myfav creará un alias en el directorio actual con un alias myfav en el archivo .bash_aliases y generará el archivo .bashrc para que el alias esté disponible de inmediato.
Acabo de encontrar una nueva solución. Es una función bash
Esto no necesita aprender nada del uso anterior. El problema que esto podría no resolver es: si hay más de 1 directorios llamados "deep_nested_dir_name" en el árbol del subdirectorio, entonces saltará al primero del directorio encontrado por find.
Además, esta solución no podrá pasar a otro árbol de directorios.
entre los alias codificados y los alias generados y esta nueva función lj (), la mayoría de mis necesidades están cubiertas.
Aquí está mi función bash ccb () para cualquiera que quiera usarla
fuente