No se puede cambiar el destino del enlace simbólico

21

Quiero cambiar el destino de un enlace simbólico existente, sin eliminar el enlace o el destino anterior.

Anteriormente he creado un enlace simbólico a un directorio como el siguiente:

$ cd /usr/lib/jvm/

$ ls -lh
drwxr-xr-x 8 uucp  143 4.0K Sep 10 20:22  jdk1.7.0_04
drwxr-xr-x 8 uucp  143 4.0K Aug 29 05:42  jdk1.7.0_07

$ sudo ln -s jdk1.7.0_04 oracle-jdk-7

$ ls -lh
drwxr-xr-x 8 uucp  143 4.0K Sep 10 20:22  jdk1.7.0_04
drwxr-xr-x 8 uucp  143 4.0K Aug 29 05:42  jdk1.7.0_07
lrwxrwxrwx 1 root root   12 May 11 11:27  oracle-jdk-7 -> jdk1.7.0_04/

Ahora quiero cambiar esto, para vincular al otro directorio:

$ sudo ln --force -s jdk1.7.0_07 oracle-jdk-7

Pero no funciona sin ningún error:

$ ls -lh
drwxr-xr-x 8 uucp  143 4.0K Sep 10 20:36  jdk1.7.0_04
drwxr-xr-x 8 uucp  143 4.0K Aug 29 05:42  jdk1.7.0_07
lrwxrwxrwx 1 root root   12 May 11 11:27  oracle-jdk-7 -> jdk1.7.0_04/

Alguna ayuda ?

Seyed Mohammad
fuente
Tal vez este es un pequeño detalle, pero parece que el comando real que ejecutó es sudo ln -s jdk1.7.0_04/ oracle-jdk-7. Tenga en cuenta la barra después 04.
wjandrea

Respuestas:

31

Para crear un enlace simbólico a un directorio , use la opción 'n':

ln -sfn DESTINATION_DIRECTORY LINK_NAME
  • DESTINATION_DIRECTORY es el nombre del enlace de destino;
  • LINK_NAME es el nombre del enlace.
  • La fopción significa reemplazar el enlace existente (es decir, eliminarlo primero).

La nopción es un poco complicada. Creo que su comando puede haber creado un enlace jdk1.7.0_07dentro del directorio jdk1.7.0_04, a través del enlace en oracle-jdk-7lugar de reemplazar el enlace. Si es así, debe eliminar el enlace para evitar confusiones.

Marty Fried
fuente
También puede usar la opción T, es decirln -sfT TARGET LINK_NAME
wjandrea