¿Cómo detecto (recursivamente) todos los enlaces simbólicos en un directorio que identifican su objetivo de manera absoluta en lugar de relativa?
Dado que es muy probable que estos enlaces se rompan cuando se mueve un árbol de directorios completo, me gustaría tener una forma de identificarlos.
Incluso los enlaces relativos pueden romperse si se mueve el árbol de directorios (si resultan apuntar fuera de la raíz del árbol de directorios), pero creo que esto se aborda en esta pregunta .

Respuestas:
Para encontrar enlaces absolutos, puede usar
findla-lnameopción 'si esfindcompatible con eso (está disponible al menos en GNUfind, en FreeBSD y macOS):Esto le pide
findimprimir los nombres de los archivos que son enlaces simbólicos y cuyo contenido (objetivo) coincide/*con el globing de shell.Estrictamente hablando, POSIX especifica que los nombres de ruta absolutos comienzan con uno
/o tres o más/; para que coincida con eso, puedes usar¿En qué sistemas es // foo / bar diferente de / foo / bar? tiene más detalles al respecto.
(Gracias a Sato Katsura por señalar que
-lnamees específico de GNU, a fd0 por mencionar que en realidad también está disponible en al menos FreeBSD y macOS, y a Stéphane Chazelas por mostrar la definición absoluta del nombre de ruta POSIX).fuente
find ./ -t l -exec ls -l {} \;que debería ser una alternativa segura. Sería fácil analizar su salida haciendo lo que sea necesario.ls? ...Puede encontrar
symlinksútil la utilidad:Y puede arreglar los enlaces por usted. Aquí con
-tpara decir lo que haría :fuente