MV un archivo sin romper un enlace simbólico a ese archivo

24

¿Es posible que mvun archivo sin romper un enlace simbólico a ese archivo? Mi respuesta inicial a esto es no, y estoy trabajando en una solución basada en script para cambiar los enlaces inmediatamente después del movimiento, pero me preguntaba cómo otros han abordado este problema. Las rutas y los nombres de los enlaces simbólicos se conocen de antemano, por lo que, en teoría, todo lo que necesito hacer es:

  1. obtener el objetivo del enlace
  2. mv el objetivo
  3. recrear el enlace al nuevo objetivo
  4. crear un nuevo enlace al nuevo objetivo (diferente al enlace original, que todavía quiero mantener por ahora)

En una fecha posterior:

  1. eliminar el enlace anterior

1-4 se encapsulará en un script bash, pero me pregunto si alguien tiene un enfoque más elegante, o sabe de un comando o comando incorporado que no conozco.

gabe
fuente
2
Los enlaces duros no tienen este problema. Sin embargo, tienen otros inconvenientes. :-)
Stéphane Gimenez
3
Sí, no puedo usar enlaces duros ya que los archivos están en varios sistemas de archivos.
Gabe.
2
Además: no se puede vincular a un directorio.
sampablokuper

Respuestas:

8

Estás en el camino correcto, no creo que haya una manera más fácil que la secuencia que describes.

Los pasos 3 y 4 son un poco confusos. Si desea reorientar los enlaces existentes, mantenga el mismo nombre que puede usar ln -fpara sobrescribir los archivos existentes. Si desea que el nombre de sus enlaces también cambie para reflejar el nuevo nombre de destino, su secuencia es correcta.

Caleb
fuente
1
Je, sí, solo vuelvo a leer esa parte y ahora también me he confundido. Lo ajustaré para que tenga más sentido. Gracias.
Gabe.
Estoy un poco confundido sobre el uso de ln -f, pero creo que el script que @fred publicó puede ayudar a aclarar cómo funciona. La página del manual no fue de mucha ayuda, sorprendentemente.
Gabe.
@gabe. La versión original de mi respuesta tenía la correcta -s -f, pero mientras la mofificaba, "perdía" la -s: ¡equivocada! De wikipedia : 'ln' sin opciones crea un enlace duro, 'ln -f' fuerza un enlace duro ... así que gracias por la pregunta, realmente ha confirmado la sintaxis para mí ahora. Ciertamente me hizo verificar dos veces cosas ... Requiere ln -s -f... (He hecho el ajuste)
Peter.O
4

Para su situación:

# change target of a symbolic link
# -------------
# ln -s, --symbolic    make symbolic links instead of hard links
# ln -f, --force       remove existing destination files
#
# Setup: make junk.link to  file junk
  echo hello > ~/junk
  ln -s ~/junk ~/junk.link;  cat ~/junk.link
#
# move file and point the link to it.
  org="$(readlink ~/junk.link)"
  new="$org".moved
  mv "$org" "$new"
  ln -s -f "$new" "$new".link  # '-s' for a soft link
Peter.O
fuente
Nota: será más complicado si se trata de una cadena de enlaces.
Peter.O
0

Tengo el siguiente problema Encontré un tema de iconos muy bueno llamado "Suru ++"

Suru ++ 20 [Oficialmente libre de errores y compatible con 11 DE]

Pero este tema de icono está hecho en svg all image. Ahora quiero usarlo en Fluxbox y generar entradas de menú, pero esto solo es posible con la imagen de icono png. Descargo el maestro dentro que son todos los iconos en formato svg, y sí, puedo convertir de la línea de comando svg a png todo bien generar para cada tamaño de carpeta como 16x16, 24x24 px. Pero en esas carpetas hay enlaces simbólicos a un archivo svg:

extensiones svg dentro de enlaces simbólicos que quiero cambiar a png

Si hay una manera posible de cambiar la extensión svg a png dentro de todos los enlaces de symbolix, el tema del icono funcionaría bien en el menú de Fluxbox y en los Administradores de archivos. Hice una entrada sobre este tema de icono usando en Xubuntu pero en español

Dios bendiga

Indacochea Wachín
fuente