Você quer a opção -T
:
$ mkdir v1
$ ln -s v1 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil 2 2011-09-05 01:58 foo -> v1/
$ mkdir v2
$ ln -s -T -f v2 foo
$ ls -FlA | grep foo
lrwxrwxrwx 1 phil phil 2 2011-09-05 01:59 foo -> v2/
Desejo atualizar o servidor do tomcat de 7.0.19 para 7.0.20.
Eu já tenho ln -s apache-tomcat-7.0.19 tomcat7
, então agora preciso vincular tomcat7
ao novo alvo usando o seguinte comando ln -s --force apache-tomcat-7.0.21 tomcat7
, mas ele não funcionou como eu esperava: criou um link simbólico tomcat7/apache-tomcat-7.0.21
em vez de substituir o link simbólico tomcat7
existente por um novo destino.
Exemplo
# mkdir v1 v2
# ln -s v1 v
# ln -s v2 v
# ll v*
lrwxrwxrwx. 1 root root 2 Sep 5 16:02 v -> v1
v1:
total 0
lrwxrwxrwx. 1 root root 2 Sep 5 16:02 v2 -> v2
v2:
total 0
Eu verifiquei o manual de ln
, acho que ln -s --force apache-tomcat-7.0.21 tomcat7
usa o terceiro formulário em vez do primeiro forma de explicar os parâmetros. Isso é tão ambíguo entre a 1ª e a 3ª forma. Então, como substituir o link simbólico neste caso?
Ao substituir links simbólicos para diretórios, devemos usar a opção -n
.
Exemplo: ln -sfn /path/to/directory /target/directory
Por que não apenas
rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7
?
Isso não tocará no diretório antigo apache-tomcat-7.0.19, mas apenas excluirá o link antigo. Então eu posso criar o novo.