Sostituisci collegamento simbolico collegato alla destinazione della directory


17

Voglio aggiornare il server Tomcat dalla 7.0.19 alla 7.0.20.

Ho già fatto ln -s apache-tomcat-7.0.19 tomcat7, quindi ora devo collegarmi tomcat7 a un nuovo target usando il seguente comando ln -s --force apache-tomcat-7.0.21 tomcat7, ma non ha funzionato come mi aspettavo: ha creato un link simbolico tomcat7/apache-tomcat-7.0.21invece di sostituire tomcat7un link simbolico esistente con un nuovo target.

Esempio

# 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

Ho controllato il manuale diln , penso che ln -s --force apache-tomcat-7.0.21 tomcat7usare il 3o modulo invece del 1o modulo per spiegare i parametri. È così ambiguo tra la prima e la terza forma. Quindi, come sostituire il collegamento simbolico in questo caso?

Risposte:


16

Vuoi l' -Topzione:

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

Grazie, è esattamente quello di cui avevo bisogno. Che peccato, vedo questa opzione opzionale in aiuto, ma non so cosa fa esattamente.
LiuYan 刘 研

16

Durante la sostituzione dei collegamenti simbolici alle directory dovremmo usare l' -nopzione.

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


1
Questa dovrebbe essere la risposta accettata. Risolve la domanda e one-liner / compact.
fino al

1
La risposta accettata risolve anche la domanda ed è una soluzione ... a meno che non mi sbagli, può essere ugualmente compatto. Non penso che sia necessario avere uno -spazio separato e prima di ogni bandiera come hanno.
ArtOfWarfare il

3

Perché non solo

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Questo non toccherà la vecchia directory apache-tomcat-7.0.19 ma eliminerà solo il vecchio link. Quindi posso crearne uno nuovo.


Grazie! L'ho fatto attualmente nel mio script, ma penso che sia diverso cp -f/ mv -fche usa il comando singolo per eseguire l'operazione di sovrascrittura, quindi sto cercando la soluzione a comando singolo .
LiuYan 刘 研
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.