¿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
find
la-lname
opción 'si esfind
compatible con eso (está disponible al menos en GNUfind
, en FreeBSD y macOS):Esto le pide
find
imprimir 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
-lname
es 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
-t
para decir lo que haría :fuente