¿Cómo puedo crear un comando (o alias) para ir al directorio que contiene el archivo de destino de un enlace simbólico? Por ejemplo, si tengo un enlace simbólico
symFile@ -> /Users/zhermes/some/dir/someFile
Me gustaría poder correr <command> symFile
y tenerlo cd
conmigo./Users/zhermes/some/dir/
Respuesta1
La siguiente función comprueba si el enlace simbólico existe y cd
va a su directorio principal. Por supuesto, también funciona con archivos normales. Podría ser más inteligente con errores de readlink
o cd
, pero es un comienzo.
GNU/Linux:
En GNU/Linux, puedes usar readlink -f
:
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }
BSD/OS X:
Lo siguiente debería funcionar en Unix/OS X, donde no hay -f
opción para readlink
. Por supuesto, esto significa que no seguirá enlaces simbólicos anidados.
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }
En OS X, puede instalar coreutils
concerveza caseray utilizar greadlink -f
en su lugar.