¿Cómo cambiar un enlace simbólico en OS X?

20

¿Cómo cambio a dónde apunta un enlace simbólico, sin eliminar y crear uno nuevo (con ln -s "/path/to/point/to" "/path/where/symlink/is")?

Cuando intenté hacer eso en el enlace simbólico "Actual" de Java, Java ni siquiera funcionó (desde la línea de comando, al menos, dijo 'Fallo de segmentación'), pero volvió a la normalidad cuando restauré el enlace simbólico "Actual" anterior con Time Máquina (pero más tarde descubrí que debería usar de /Applications/Utilities/Java Preferences.apptodos modos para cambiar la versión actual de Java).

mk12
fuente

Respuestas:

8
mkdir /path/where/newsymlink
ln -s /path/to/point/to /path/where/newsymlink/is
mv /path/where/newsymlink/is /path/where/symlink/
rmdir /path/where/newsymlink

Sin embargo, la utilidad de Preferencias de Java cambia más que un simple enlace simbólico; debe usar eso para asegurarse de que se cambie la versión de Java.

mark4o
fuente
¿no sería el comando mv simplemente renombrarlo ...?
mk12
Intenté eso, simplemente mueve el nuevo enlace simbólico a la carpeta a la que apunta el anterior.
mk12
El primer comando crea el enlace simbólico que apunta hacia donde desea, y el segundo comando reemplaza el puntero existente al lugar anterior con el puntero al nuevo lugar. El mv es atómico, por lo que el enlace simbólico siempre existirá.
mark4o
... Pero aún no funciona ... mueve el nuevo puntero a la carpeta a la que apunta el anterior.
mk12
/path/where/symlink/ises el enlace simbólico que está cambiando. El uso de estos comandos lo cambiará para que apunte /path/to/point/to. La carpeta a la que apunta el enlace simbólico original no se toca en absoluto.
mark4o
29
ln -hfs newlocation existinglink

o

ln -nfs newlocation existinglink

cambiará el enlace existente para que apunte a nueva ubicación

(los -n y -h son idénticos en operación)

De 'man ln'

-h Si el target_file o target_dir es un enlace simbólico, no lo siga. Esto es más útil con la opción -f, para reemplazar un enlace simbólico que puede apuntar a un directorio.

-f Si el archivo de destino ya existe, desvinculelo para que se produzca el enlace. (La opción -f anula cualquier opción -i anterior).

-s Crea un enlace simbólico

Maxxx
fuente
La -nfsversión también funciona en Linux, por lo que es más portátil si a alguien le importa.
Cromax
10

Tratar:

unlink /path/to/current/link
ln -s /path/to/target /path/to/symbolic/link
mota
fuente
1
En mi MacBook Pro de finales de 2013 con Mavericks, tuve que cambiar los dos parámetros: ln -s / path / to / symbolic / link / path / to / target
Marius Waldal
1

El comando ln no te permite cambiar enlaces, solo crear nuevos.

mk12
fuente
0

¿Ha comparado los permisos en los enlaces y en los objetivos antes y después de cambiar el enlace? Es posible que solo necesite realizar un seguimiento con los comandos chown y chmod adecuados para que funcione.

Josh
fuente
Bueno, ni siquiera sé cómo cambiarlo, así que no. Y no sé qué hacen chown y chmod.
mk12
2
chown cambia la propiedad de un archivo y / o directorio. chmod cambia los permisos de un archivo y / o directorio. Estos son estándar en casi todas las plataformas Unix. Demasiados detalles para explicar cada uno aquí, por lo que recomendaría buscar en Google cada uno para obtener tutoriales. También puede hacer "man chown" o "man chmod" para leer el manual real del comando (presione q para salir del manual).
churnd