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?

LiuYan 刘 研
fuente

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/
phs
fuente
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

Surya Prabhakar
fuente
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.

fschmitt
fuente
¡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 刘 研