¿Existe alguna forma de comprobar si hay enlaces simbólicos que apuntan a un directorio?

StackOverflow https://stackoverflow.com/questions/100170

  •  01-07-2019
  •  | 
  •  

Pregunta

Tengo una carpeta en mi servidor a la que apuntan varios enlaces simbólicos.Desde entonces, creé una nueva carpeta y quiero cambiar todos esos enlaces simbólicos para que apunten a la nueva carpeta.Había considerado reemplazar la carpeta original con un enlace simbólico a la nueva carpeta, pero parece que si continuaba con esa práctica podría volverse muy complicado muy rápidamente.

Lo que he estado haciendo es cambiar manualmente los enlaces simbólicos para que apunten a la nueva carpeta, pero es posible que me haya perdido un par.

¿Hay alguna forma de comprobar si hay enlaces simbólicos que apunten a una carpeta en particular?

¿Fue útil?

Solución

Usaría el comando de búsqueda.

find . -lname /particular/folder

Eso buscará recursivamente en el directorio actual enlaces simbólicos a /particular/folder.Tenga en cuenta que sólo encontrará enlaces simbólicos absolutos.Se puede utilizar un comando similar para buscar todos los enlaces simbólicos que apuntan a objetos llamados "carpeta":

find . -lname '*folder'

A partir de ahí, sería necesario eliminar los falsos positivos.

Otros consejos

Puede auditar enlaces simbólicos con el symlinks programa escrito por Mark Lord: escaneará un sistema de archivos completo, normalizará las rutas de enlaces simbólicos a forma absoluta y las imprimirá en la salida estándar.

Realmente no existe ninguna forma directa de comprobar dichos enlaces simbólicos.Considere que es posible que tenga un sistema de archivos que no esté montado todo el tiempo (p. ej.una unidad USB externa), que podría contener enlaces simbólicos a otro volumen del sistema.

Podrías hacer algo con:

for a in `find / -type l`; do echo "$a -> `readlink $a`"; done | grep destfolder

Observo que FreeBSD find no apoya la -lname opción, razón por la cual terminé con lo anterior.

find . -type l -printf '%p -> %l\n'

Aparte de mirar todas las demás carpetas si hay enlaces que apuntan a la carpeta original, no creo que sea posible.Si es así, me interesaría.

find / -lname 'fullyqualifiedpathoffile'
find /foldername -type l -exec ls -lad {} \;

Para enlaces físicos, puede obtener el inodo de su directorio con una de las opciones "ls" (-i, Creo).

Entonces un find con -inum localizará todos los enlaces duros comunes.

Para enlaces suaves, es posible que tengas que hacer un ls -l en todos los archivos buscando el texto después de "->" y normalizándolo para asegurarse de que sea una ruta absoluta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top