Reparar enlaces simbólicos rotos a una nueva ubicación

Reparar enlaces simbólicos rotos a una nueva ubicación

Me mudé de un servidor web antiguo a uno nuevo. Ahora algunos enlaces simbólicos no funcionan porque cambiamos la estructura de la carpeta. Quiero saber si existe una manera fácil de reparar estos enlaces. Encontré los enlaces con este comando:

find -L . -type l -ls

Los enlaces se ven así:

./example/vondercode/releases/example.com/2.0/www/img/uploads -> /home/example/vondercode/uploads
./example2/www/img/uploads -> /home/example2/vondercode/uploads

Ahora los enlaces deben verse así:

./example/vondercode/releases/example.com/2.0/www/img/uploads -> /var/www/html/example/vondercode/uploads
./example2/www/img/uploads -> /var/www/html/example2/vondercode/uploads

Es muy fácil decirlo, todo /homedebería ser reemplazado por /var/www/html ¿Es esto posible?

Respuesta1

si es "simplemente reemplace /home con /var/www/html", entonces este enfoque debería funcionar:

find . -type l -exec sh -c 'lnk="{}"; target="$(readlink '{}' | sed 's#/home#/var/www/html#')"; unlink "${lnk}"; ln -s "${target}" "${lnk}" ' \;

Gracias a Toby Speight por señalar que la primera versión no funcionó como se esperaba; esto ya está solucionado.

Respuesta2

Escribí una herramienta. Puedes usarlo así:

fix_broken_symlinks . /home /var/www/html --force

Vea todos los detalles en mi respuesta principal aquí:¿Cómo puedo "volver a vincular" muchos enlaces simbólicos rotos?

información relacionada