¿Hay alguna forma de reemplazar el valor del enlace simbólico?

¿Hay alguna forma de reemplazar el valor del enlace simbólico?

¿Existe alguna forma de reemplazar el valor de un enlace simbólico?

Por ejemplo, quiero cambiar un enlace simbólico de este:

first -> /home/username/foo/very/long/directories/that/I/do/not/want/to/type/again

a esto:

second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again

Quiero cambiar solo fooa bar.

Por supuesto que puedo crear un enlace nuevamente, pero si es posible reemplazar el valor del enlace, será más fácil.

Respuesta1

Puede usar la -fopción --forcepara lneliminar el enlace simbólico existente antes de crear uno nuevo. Si el destino es un directorio, debe agregar la -nopción --no-dereferencepara indicarle lnque trate el enlace simbólico como un archivo normal.

ln -sfn target existing_link

Sin embargo, esta operación no es atómica, como lnlo será unlink()el antiguo enlace simbólico antes de llamar symlink(), por lo que técnicamente no cuenta como cambio del valor del enlace. Si le importa esta distinción, entonces la respuesta es no, no puede cambiar el valor de un enlace simbólico existente.

Dicho esto, puedes hacer algo como lo siguiente para crear un nuevo enlace simbólico, cambiando parte del valor del enlace anterior:

  ln -sfn "$(readlink existing_link | sed s/foo/bar/)" "existing_symlink"

Respuesta2

second -> /home/username/bar/very/long/directories/that/I/do/not/want/to/type/again

Si estás ejecutando dentro de X:

stat second

Imprimirá el enlace y alguna otra información. Escriba ln -sy luego resalte /home/username/bar/very/long/directories/that/I/do/not/want/to/type/againcon el cursor del mouse. Presione el botón central (o ambos botones si solo tiene dos). La línea larga que no querías volver a escribir se pegará en el cursor de texto.

Si no estás en X, puedes hacer lo mismo instalando gpm.

información relacionada