Reemplace el enlace simbólico que se vinculó al destino del directorio


17

Quiero actualizar el servidor Tomcat de 7.0.19 a 7.0.20.

Ya lo he hecho ln -s apache-tomcat-7.0.19 tomcat7antes, así que ahora necesito vincularme tomcat7 a un nuevo objetivo usando el siguiente comando ln -s --force apache-tomcat-7.0.21 tomcat7, pero no funcionó como esperaba: creó un enlace simbólico en tomcat7/apache-tomcat-7.0.21lugar de reemplazar tomcat7el enlace simbólico existente con un nuevo objetivo.

Ejemplo

# 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

Revisé el manual deln , creo que ln -s --force apache-tomcat-7.0.21 tomcat7uso el 3er formulario en lugar del 1er formulario para explicar los parámetros. Eso es tan ambiguo entre la primera y la tercera forma. Entonces, ¿cómo reemplazar el enlace simbólico en este caso?

Respuestas:


16

Quieres la -Topción:

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

Gracias, eso es exactamente lo que necesitaba. Qué pena, veo esta opción opcional en la ayuda, pero no sé qué hace exactamente.
LiuYan 刘 研

16

Al reemplazar los enlaces simbólicos a los directorios, debemos usar la -nopción.

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


1
Esta debería ser la respuesta aceptada. Resuelve la pregunta y one-liner / compact.
hasta

1
La respuesta aceptada también resuelve la pregunta y es un trazador de líneas ... a menos que me equivoque, puede ser igualmente compacto. No creo que sea necesario tener un -espacio separado antes de cada bandera como ellos tienen.
ArtOfWarfare

3

¿Por qué no solo

rm tomcat7
ln -s apache-tomcat-7.0.21 tomcat7

?

Esto no tocará el directorio anterior apache-tomcat-7.0.19 sino que simplemente eliminará el enlace anterior. Entonces puedo crear el nuevo.


¡Gracias! Hice esto actualmente en mi script, pero creo que es diferente cp -f/ mv -fque usa un solo comando para hacer una operación de sobrescritura, por lo que estoy buscando la solución de un solo comando .
LiuYan 刘 研
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.