Não é possível alterar o destino do link simbólico

21

Quero alterar o destino de um link simbólico existente, sem remover o link ou o destino antigo.

Eu criei anteriormente um link simbólico para um diretório da seguinte maneira:

$ 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/

Agora eu quero mudar isso, para vincular ao outro diretório:

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

Mas não funciona sem erros:

$ 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/

Qualquer ajuda ?

Seyed Mohammad
fonte
Talvez esse seja um pequeno detalhe, mas parece que o comando que você executou é sudo ln -s jdk1.7.0_04/ oracle-jdk-7. Observe a barra depois 04.
wjandrea

Respostas:

31

Para criar um link simbólico para um diretório , use a opção 'n':

ln -sfn DESTINATION_DIRECTORY LINK_NAME
  • DESTINATION_DIRECTORY é o nome do destino do link;
  • LINK_NAME é o nome do link.
  • A fopção significa substituir o link existente (ou seja, excluí-lo primeiro).

A nopção é um pouco complicada. Acredito que seu comando pode ter criado um link para jdk1.7.0_07dentro do diretório jdk1.7.0_04, através do link, em oracle-jdk-7vez de substituí-lo. Nesse caso, você deve excluir o link para evitar confusão.

Marty Fried
fonte
Você também pode usar a opção T, ou sejaln -sfT TARGET LINK_NAME
wjandrea