Entrar en un directorio vinculado por un enlace

12

Cuando hago cdun enlace, mi ruta actual tiene como prefijo la ruta del enlace, en lugar de la ruta del directorio al que se vincula el enlace. P.ej

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Me gustaría cambiar mi ruta actual a la ruta del directorio vinculado, para poder trabajar también con los directorios principales del directorio vinculado. Además lsdel enlace para averiguar el directorio vinculado, y luego cden él, ¿cuáles son algunas formas más simples de lograrlo? Por ejemplo, después de cdun enlace, ¿cómo cambia su ruta actual a la ruta del directorio vinculado?

Tim
fuente

Respuestas:

22

Con el shell POSIX, puede usar la -Popción de cd incorporado:

cd -P <link>

Con bash, desde man bash:

La opción -P dice que use la estructura de directorio físico en lugar de seguir enlaces simbólicos (vea también la opción -P para el comando set set)

Cuonglm
fuente
77
Puedes hacer esto cd -P .después del original cd.
ctrl-alt-delor
5

Puede utilizar readlinkpara determinar dónde apunta su enlace y proporcionar esta salida como el objetivo de su cd.

cd "$(readlink <link>)"

En el caso de enlaces simbólicos adicionales que apuntan a enlaces simbólicos, readlinksimplemente proporcionará el objetivo, a menos que especifique una de sus opciones para seguir enlaces simbólicos a un destino de archivo canónico, por ejemplo readlink -f <link>.

readlink : valor de impresión de un enlace simbólico o nombre de archivo canónico

-f, --canonicalize
canonicalize siguiendo cada enlace simbólico en cada componente del nombre dado de forma recursiva; todos menos el último componente debe existir

-e, --canonicalize-
canonicalize existente siguiendo cada enlace simbólico en cada componente del nombre dado de forma recursiva, todos los componentes deben existir

-m, --canonicalize-
canonicalize missing siguiendo cada enlace simbólico en cada componente del nombre dado de forma recursiva, sin requisitos de existencia de componentes

Jon Surrell
fuente
5

Los shells tipo Korn realizan un seguimiento de los enlaces simbólicos en la ruta al directorio actual (esto se conoce como seguimiento lógico del directorio actual). Si desea expandir todos los enlaces simbólicos, pase la opción -Pal cdbuiltin incorporado (para el seguimiento del directorio físico actual):

cd -P logic

Si está en un directorio al que ha accedido a través de un enlace simbólico y desea cambiar el directorio actual rastreado a la ruta con enlaces simbólicos expandidos, ejecute

cd -P .

Si desea imprimir la ruta al directorio actual con enlaces simbólicos expandidos, ejecute pwd -P. En bash, si desea desactivar el seguimiento lógico, ejecute set -P; en zsh, ejecuta set -wo setopt chase_links.

Gilles 'SO- deja de ser malvado'
fuente