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 apksy también es difícil volver a otro nodo, digamos aquí /home/thina/teams.
¿Hay alguna forma de omitir el tipeo de cdy cd ..? Estoy usando Ubuntu 16.04.
command-line
bash
directory
gsthina
fuente
fuente

cdycd ..?cd ../../../../..CDPATHvariable en losbashdocumentos.Respuestas:
Hay
pushdypopd:Prueba
help pushdyhelp popdpara más opciones. No haymanpágina, porquepushdypopdson comandos incorporados bash.fuente
cd -haría lo mismo?pushdypopdpuede recordar más de una trayectoria anterior.dirsenumerar su pila de directorios dentro de los comandospushd/popd.help pushdyhelp popdque 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 pusdhAdemás de las muy buenas respuestas ya proporcionadas, aquí hay algunos consejos sobre el uso
cdefectivo.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/teamscdcomando, 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/tentonces 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
cdmucho menos doloroso.fuente
~, particularmente si es root, lo~userllevará rápidamente aluserdirectorio 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:
upsin un argumento es equivalente acd .., debido a${1:-1}la cual sustitutos$1cuando set y1lo contrariocd ..tiene como objetivo preservar el habitualcd -comportamiento.fuente
-gtlugar 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 laifcondición.gtcomentario, pero con respecto a su segunda sugerencia, vea la viñeta final en la respuesta. Tiene sentido para mi.OLDPWDla 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
.bashrcVolver a
/home/thina/teamsdeapksti haríaAquí hay un ejemplo de uso:
Otra pequeña función que se me ocurrió, pero que nunca usé tanto es la
bookmarkfunció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:fasdpero no estoy familiarizado con ella.Me sorprende que nadie haya mencionado
autojumptodaví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/apkspuede usar el acceso directo
jpara moverse rápidamente allí, independientemente del directorio en el que se encuentre actualmente:j apksTenga en cuenta que el uso de cualquier parte de la ruta funciona, siempre que sea el más alto de la lista:
j apptambién lo llevará.../apkssi 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 ,
apksentdlugar de otroapksdebajo 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
autocdopció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. Laautocdopción no se-ejecuta,cd -pero puede definir un alias o función para eso.Puede memorizar directorios en una pila con los builtins
pushdypopd. El incorporadodirsenumera la pila de directorios (me parecedirs -vmá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
CDPATHvariable. Sin embargo, tenga en cuenta que nunca he encontrado una situación en la queCDPATHfuera 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
cdpermite 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 betava 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
cdtuyo no interfiere con la forma en que sezacumula 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
pushdmás, solo acabo de enterarme de eso):Organice sus rutas para que no necesite
cden 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
cden 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
cden 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
pushdEs 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
pushdypopdson mis favoritos. Elpushdcomando recordará los directorios que ha visitado, visibles con el comandodirs, y cuando esté listo para saltar hacia atrás, usepopdpara 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
cdopushd. 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/inboxla 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 -imostrará 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.luaTambién admite lafzfselecció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) :
cden la raíz del proyecto, la raíz del proyecto es el directorio principal más cercano con.git/.hg/.svnen él.(Un argumento) :
cden 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 -bazb: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