¿Puedo acortar la escritura necesaria para `cd` en algunos directorios bien conocidos

11

Me encuentro abriendo una terminal y luego haciendo mucho CD en el mismo directorio cuya ruta es muy larga.

Esto significa que estoy haciendo mucho CD y estoy usando la pestaña para acelerar mucho las cosas.

Sería genial si pudiera tener algún tipo de enlace a este directorio y luego simplemente cd a eso para estar rápidamente en el directorio anidado profundo.

es posible?

Breako Breako
fuente
1
Tengo varios scripts (bash) que realizan tareas pequeñas (relacionadas) como cd'ing a un proyecto github y se ejecutan git status. También tengo algunos alias en mi .bash_profile. No es exactamente lo que estás pidiendo, pero está relacionado.
keyser

Respuestas:

24

Aquí está la forma de lidiar con caminos complejos con cdfrecuencia.

mkdir ~/Links
ln -s /complexpath/there ~/Links

esto creará el enlace simbólico

~/Links/there

Para utilizar este nuevo Linksdirectorio de manera eficiente, si su intérprete de ingreso se bash acaba de incluir este comando en el ~/.profile(que es utilizado por todas las conchas de estilo Bourne bash, ksh, zsh...):

CDPATH=~/Links:.
export CDPATH

Esto significa que para cada uno cd, su shell buscará dentro de 2 directorios para encontrar un nombre de ruta local:

~/Links
.

No necesitará reiniciar su sesión para probarla, solo ejecute:

. ~/.profile

lo que significa simplemente leer mi ~/.profile. (No tendrá que ponerlo en su ~/.bashrcpuesto, ya que no es necesario repetir la misma inicialización de variables cuando no la cambie).

Una vez que lo haya probado, podrá reiniciar su sesión;).

De ahora en adelante, cada vez que desee ir a thereusted tendrá que escribir:

cd there
dan
fuente
Esta es la solución general más elegante que he visto. Me suelen hacer los alias de destinos comunes (como aliasing cdoraa cd $ORACLE_HOMEy tal ...)
bmike
¿Alguien estaría interesado en un equivalente simple a través de la interfaz Finder?
dan
11

Definir un alias es una manera muy fácil de tener una abreviatura corta para un comando más largo. Una vez que tenga sus alias correctos, puede crear una sección en su archivo .bashrc (u otro archivo de inicio) para que no tenga que volver a escribir estos alias para cada nuevo shell que inicie:

en .bashrc:

alias ws4='ssh qsv-rhws4'
alias httpdlog='cd /var/log/httpd/'
alias EC2='ssh -i BMTestEC2.pem [email protected]'

etc.

Cierre la sesión y vuelva a iniciarla (o simplemente ejecute . ~/.bashrc) y ahora puede escribir httpdlogy ejecutar el CD. O ws4y realmente realiza el comando ssh, etc.

Esto elimina la necesidad de crear (una gran cantidad de) enlaces vacíos que harán que su directorio personal también parezca un desastre.

Dromendokter
fuente
10

Intenta usar autojump o z .

Después de instalar cualquiera de los dos, te encuentras cdcomo siempre y aprenden los directorios más visitados y te permiten acceder a ellos solo escribiendo una parte de la ruta:

$ cd /very/long/path/foobar
$ cd
$ z foobar
$ echo $PWD
/very/long/path/foobar

Prefiero z de los dos.

Tyilo
fuente
¡No sé sobre el salto automático, pero el script 'z' es genial!
Kris
7

Recomiendo encarecidamente fasd, que es similar a autojump y z pero mejor en mi humilde opinión. Desde el sitio web:

Fasd (pronunciado similar a "rápido") es un refuerzo de productividad de línea de comandos. Fasd ofrece acceso rápido a archivos y directorios para shells POSIX. Está inspirado en herramientas como autojump, z y v. Fasd realiza un seguimiento de los archivos y directorios a los que ha accedido, para que pueda consultarlos rápidamente en la línea de comandos.

El nombre fasd proviene de los alias sugeridos predeterminados f (archivos), a (archivos / directorios), s (mostrar / buscar / seleccionar), d (directorios).

Fasd clasifica los archivos y directorios por "frecuencia", es decir, tanto por "frecuencia" como por "actualidad". El término "experiencia" fue acuñado por primera vez por Mozilla y utilizado en Firefox (enlace).

Chauncey Garrett
fuente
4

Alternativamente, podría crear un alias. Agregue lo siguiente a algo como .bashrc o .aliases

alias shortcut='cd ~/path/to/deep/deep/deep/directory/'

Luego, asegúrese de que cualquier archivo en el que esté sea sourced. Mis alias están en .bashrc, que obtengo con esta línea en .bash_profile: source ~/.bashrc

Amory
fuente
2

Agregar enlaces simbólicos convenientes está bien para un directorio especial o dos, pero muy rápidamente puede ser difícil de manejar. Una solución mucho mejor es usar la variable de entorno CDPATH, disponible en bashy otros shells para este propósito.

CDPATHes una lista separada por dos puntos (como PATH) de lugares para buscar un nombre de directorio. Puede contener nombres de ruta absolutos y relativos. Tengo el mío puesto a algo así export CDPATH=".:..:$HOME/work/repos:$HOME/projects:<etc>".

Con esta configuración, puedo escribir cd pdftools desde cualquier lugar y me llevará a ~/projects/pdftools. (Con un enlace simbólico, tendría que escribir cd ~/pdftoolssi no estaba en mi directorio personal.) También puedo atajo en subdirectorios: cd pdftools/bin.

El ..en mi CDPATHme permite escribir en cd sisterdirlugar de cd ../sisterdir, etc. Como es de esperar, cuando creo nuevos directorios en cualquier lugar CDPATH, se encontrarán automáticamente cd, sin necesidad de crear nuevos enlaces simbólicos o alias.

Esta característica se vuelve aún mejor si usa el bash_completionarchivo distribuido, por ejemplo, con sistemas Debian. No venía con mi caja OS X, así que busqué una copia y funciona bien. (Obtener con brew, o simplemente descargarlo manualmente desde aquí .) Este archivo define mejoras a la finalización de comandos, de modo que pueda escribir cd pdf<TAB>y el pdftoolsdirectorio se encuentra y expandido desde cualquier lugar en CDPATH.

alexis
fuente
1

Claro: crea un enlace simbólico

ln -s /some/really/long/path/to/somewhere/ ~/shortcut
cd ~/shortcut
dstarh
fuente
1

Alternativamente, también puede intentar instalar fish shell.

http://fishshell.com/

Esto tiene una excelente predicción para los comandos. También le permite escribir de manera inteligente sin distinción entre mayúsculas y minúsculas sin ningún problema.

La desventaja de los peces es que tiene su propio lenguaje de secuencias de comandos y no son compatibles con bash.

kumar0us
fuente
1

Todo lo que hago es escribir "cd" y luego arrastrar la carpeta del Finder al Terminal que pega en la ruta completa. Quizás no sea tan elegante, pero ¿funciona para todas las carpetas frente a algunos atajos preestablecidos?

Ewan Makepeace
fuente