Esta es una pregunta adicional que comenzó con esta: ¿Cómo editar enlaces simbólicos en OS X?
Ahora que sé cómo editar la ruta a la que apuntan los enlaces simbólicos, estoy tratando de averiguar cómo hacer esto recursivamente para cualquier enlace simbólico roto. Soy un tipo de PHP, por lo que este tema de CLI es un tanto extraño para mí ...
Parece que hay algunos elementos específicos para esto, a saber:
- Identifique un enlace simbólico roto y recupere su ubicación
- Obtenga el destino antiguo, ahora incorrecto, para el enlace simbólico
- Construya la nueva ruta correcta para que el enlace simbólico apunte a
- Editar el enlace simbólico
El primero es bastante fácil:
find /path/to/search -type l | while read f; do if [ ! -e "$f" ]; then ls -l "$f"; fi; done
Esto me proporciona una buena lista de todos los enlaces simbólicos rotos que se encuentran debajo del directorio provisto. Pero creo que necesitaría almacenar la ubicación de cada uno en una variable (¿matriz?) Para trabajar con ella.
A continuación, parece que cambiar la acción suministrada en la parte "entonces" de la lógica daría la solución.
El elemento 2 se puede recuperar usando:
readlink /path/to/broken/symlink
Parece que tenemos que meter eso en una variable. No tengo claro cómo hacer esto en la terminal.
El número 3 sería una simple edición de la ruta recuperada durante el paso 2. Necesito reemplazar el nombre de la unidad anterior con el nuevo. Tan cambiante:
/Volumes/Old\ Drive/path/to/symlink
a
/Volumes/New\ Drive/path/to/symlink
Tampoco está claro exactamente cómo hacerlo dentro de un script de CLI. Parece que se necesita algún tipo de reemplazo de cadena. Algo así como str_replace en el mundo de PHP.
Finalmente, el paso 4 se puede hacer a través de:
ln -f -s /path/to/new/location/of/original /path/to/location/of/broken/symlink/
como se detalla en mi otra pregunta, anteriormente vinculada.
¿Cómo exactamente uniré estos conceptos para lograr el resultado deseado al arreglar todos mis enlaces simbólicos de una sola vez?