Remplacer le lien symbolique lié à la cible du répertoire

17

Je veux mettre à niveau le serveur tomcat de 7.0.19 à 7.0.20.

Je l'ai déjà fait ln -s apache-tomcat-7.0.19 tomcat7auparavant, alors maintenant je dois créer un lien tomcat7 vers une nouvelle cible à l'aide de la commande suivante ln -s --force apache-tomcat-7.0.21 tomcat7, mais cela ne fonctionne pas comme prévu: il a créé un lien symbolique tomcat7/apache-tomcat-7.0.21au lieu de remplacer tomcat7le lien symbolique existant par une nouvelle cible.

Exemple

# 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

J'ai vérifié le manuel deln , je pense ln -s --force apache-tomcat-7.0.21 tomcat7utiliser le 3ème formulaire au lieu du 1er formulaire pour expliquer les paramètres. C'est tellement ambigu entre la 1ère et la 3ème forme. Alors, comment remplacer le lien symbolique dans ce cas?

LiuYan 刘 研
la source

Réponses:

16

Vous voulez l' -Toption:

$ 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
la source
Merci, c'est exactement ce dont j'avais besoin. Quel dommage, je vois cette option optionnelle dans l'aide, mais je ne sais pas exactement ce qu'elle fait.
LiuYan 刘 研
16

En remplaçant les liens symboliques vers les répertoires, nous devons utiliser l' -noption.

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

Surya Prabhakar
la source
1
Cela devrait être la réponse acceptée. Résout la question et one-liner / compact.
jusqu'au
1
La réponse acceptée résout également la question et est une doublure ... sauf erreur de ma part, elle peut être tout aussi compacte. Je ne pense pas qu'il soit nécessaire d'avoir un -espace séparé avant chaque drapeau comme ils l'ont fait.
ArtOfWarfare
3

Pourquoi pas juste

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Cela ne touchera pas l'ancien répertoire apache-tomcat-7.0.19 mais supprimera simplement l'ancien lien. Ensuite, ln peut créer le nouveau.

fschmitt
la source
Merci! Je l'ai fait actuellement dans mon script, mais je pense que c'est différent de cp -f/ mv -fqui utilise une seule commande pour effectuer une opération de remplacement, donc je cherche la solution à commande unique .
LiuYan 刘 研