Substitua o link simbólico vinculado ao destino do diretório

17

Quero atualizar o servidor tomcat de 7.0.19 para 7.0.20.

Já fiz ln -s apache-tomcat-7.0.19 tomcat7isso antes, agora preciso vincular tomcat7 ao novo destino usando o comando a seguir ln -s --force apache-tomcat-7.0.21 tomcat7, mas ele não funcionou como o esperado: ele criou um link simbólico em tomcat7/apache-tomcat-7.0.21vez de substituir tomcat7o link simbólico existente pelo 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 deln , acho que ln -s --force apache-tomcat-7.0.21 tomcat7use o terceiro formulário em vez do primeiro formulário para 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?

LiuYan 刘 研
fonte

Respostas:

16

Você quer a -Topção:

$ 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/
phs
fonte
Obrigado, é exatamente o que eu precisava. Que pena, vejo essa opção opcional em ajuda, mas não sei exatamente o que ela faz.
LiuYan # 6/09/11
16

Ao substituir links simbólicos para diretórios, devemos usar a -nopção

Exemplo: ln -sfn /path/to/directory /target/directory

Surya Prabhakar
fonte
1
Essa deve ser a resposta aceita. Resolve a pergunta e one-liner / compact.
até
1
A resposta aceita também resolve a questão e é única: a menos que eu esteja enganado, pode ser igualmente compacto. Eu não acho que é necessário ter um -espaço separado antes de cada bandeira como elas têm.
ArtOfWarfare
3

Por que não apenas

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Isso não tocará o diretório antigo apache-tomcat-7.0.19, mas apenas excluirá o link antigo. Então, eu posso criar o novo.

fschmitt
fonte
Obrigado! Eu fiz isso atualmente no meu script, mas acho que é diferente cp -f/ mv -fque usa o comando único para fazer a operação de substituição, por isso estou procurando a solução de comando único .
LiuYan #