Puedo hacer esto:
$ pwd
/home/beau
$ ln -s /home/beau/foo/bar.txt /home/beau/bar.txt
$ readlink -f bar.txt
/home/beau/foo/bar.txt
Pero me gustaría poder hacer esto:
$ pwd
/home/beau
$ cd foo
$ ln -s bar.txt /home/beau/bar.txt
$ readlink -f /home/beau/bar.txt
/home/beau/foo/bar.txt
es posible? ¿Puedo de alguna manera resolver el nombre de ruta relativo y pasarlo ln
?
ln -s $(pwd)/bar.txt ~/
o incluir un script de instalación.ln -s foo/bar.txt /home/beau/bar.txt
Respuestas:
Si crea un enlace simbólico a una ruta relativa, lo almacenará como un enlace simbólico relativo, no absoluto como muestra su ejemplo. Esto generalmente es algo bueno. Los enlaces simbólicos absolutos no funcionan cuando el sistema de archivos está montado en otro lugar.
La razón por la que su ejemplo no funciona es que es relativo al directorio padre del enlace simbólico y no a dónde
ln
se ejecuta.Tu puedes hacer:
O para eso importa:
Es importante darse cuenta de que el primer argumento posterior
ln -s
se almacena como el objetivo del enlace simbólico. Puede ser cualquier cadena arbitraria (con las únicas restricciones de que no puede estar vacía y no puede contener el carácter NUL), pero en el momento en que se usa y resuelve el enlace simbólico, esa cadena se entiende como una ruta relativa al directorio padre del enlace simbólico (cuando no comienza con/
).fuente
~
funcionaría.Si usa coreutils más nuevos (estoy usando coreutils-8.22-11), tiene una opción para hacerlo:
puede contener texto arbitrario; si luego se resuelve, un enlace relativo es -r, --relativo crea enlaces simbólicos relativos a la ubicación del enlace
Por ejemplo:
fuente
-r
. Sin embargo, usando Mac.coreutils
> = 8,16 (fuente: superuser.com/a/837935/403979 )Lo siento, no. Los enlaces simbólicos son relativos a la ubicación en la que se encuentra el enlace, no a la ubicación en la que se encontraba cuando creó el enlace. Hay varias buenas razones para este comportamiento, la mayoría de las cuales implican montar sistemas de archivos remotos.
fuente
Hay una pequeña utilidad conveniente llamada
symlinks
(originalmente por Mark Lords, ahora mantenida por J. Brandt Buckley), presente en muchas distribuciones de Linux.Para convertir todos los enlaces simbólicos absolutos en un directorio para que sean relativos:
Lamentablemente, no hay una opción para convertir un solo enlace, primero debería moverlo a su propio directorio.
fuente
Tu podrías intentar:
Pero, hace un enlace simbólico al nombre de ruta absoluto. Su pregunta textual pregunta menciona nombre de ruta relativo ...
Normalmente, un nombre de ruta relativo es lo que desea y lo que
ln -s
le proporciona. Creo que lo que quieres es:fuente
A medida que los shells más comunes expanden las rutas, para crear un enlace simbólico relativo, debe citar la "ruta de origen".
Además, el
-s
parámetro significa--symbolic
.ln
crea enlaces duros por defecto.fuente
Si está seguro de que no hay posibilidad de que sus puntos de montaje cambien, puede lograr lo que está tratando de hacer en un shell de bash como este:
Esto supone que usted está en el directorio de destino al hacer el enlace simbólico.
fuente