Mover enlace símbolico de directorio?

Iniciado por Oppenheimer, 22 Junio 2015, 14:57 PM

0 Miembros y 1 Visitante están viendo este tema.

Oppenheimer

Hola, quería saber si es posible mover un enlace simbólico de directorio, sin que este pierda la referencia al archivo al que enlaza.

Por ejemplo tengo el archivo1 en el directorio Instancias, en la siguiente ruta:

Trabajos/modelos/Instancias/archivo1

creo el enlace símbolico desde el directorio modelos:

Trabajos/modelos$ ln -s Instancias/archivo1 enlace

luego el enlace se creara en modelos de la siguiente manera: enlace-> Instancias/archivo1
si lo muevo al directorio inmediatamente superior
Trabajos/modelos$ mv enlace ..

Este ahora se encontrara en el directorio Trabajos enlazando con la misma ruta a archivo1
enlace-> Instancias/archivo1, de manera que esa ruta ya no es válida desde ese directorio.

Por lo que me pregunto si hay alguna manera de hacer el enlace simbólico con una ruta absoluta, o algún comando que sirva para moverlos por los directorios actualizando su ruta de acceso al archivo que enlazan.

Gracias de antemano. Un saludo.

moikano→@

Hola.

Si que puedes moverlo donde quieras, y si que puedes hacer un enlace simbólico con una ruta absoluta.

Mira, sería algo así.

Para que lo pruebes tu mismo. digamos que estás en tu carpeta personal y tu usuario es User


echo "hola" > prueba.txt && mkdir pruebaDir && ln -s /home/User/prueba.txt  /home/User/pruebaDir/prueba && mv /home/User/pruebaDir/prueba /home/User/ && cat /home/User/prueba


El resultado

hola

Suerte.

MinusFour

Si estas trabajando con enlances dentro de un mismo sistema de archivos puedes hacer un hard link en lugar de un soft link. De esa forma no te tienes que preocupar por el lugar del archivo y puedes mover la copia a donde tu quieras (dentro del mismo sistema de archivos). Incluso puedes cambiar el nombre del archivo al cual hiciste el enlace y el hard link seguira funcionando.

Código (bash) [Seleccionar]

ln fuente hardlink


Donde fuente es el archivo al cual quieres hacer referencia y hardlink el nombre del archivo que contiene la referencia. Claro que los hard links tienen sus desventajas, por ejemplo la informacion no se borra a menos que borres los dos archivos.

Si quieres hacer uso de la ruta absoluta hay algunas funciones que te pueden ayudar:

Código (bash) [Seleccionar]

readlink -f nombredelarchivo


Código (bash) [Seleccionar]

realpath nombredelarchivo


Y las puedes usar con ln asi:

Código (bash) [Seleccionar]

ln -s "$(readlink -f nombredelarchivo)" symbolic_link_nombre

Oppenheimer


Estupendo, me ha funcionado perfectamente para mi caso particular moikano, lo de los enlaces duros ya lo había pensado MinusFour, pero claro como tu dices tiene la desventaja de que solo sirven para trabajar dentro de un mismo sistema de archivos.

Gracias a los dos. Un saludo.