¿Cómo encontrar y enumerar todos los enlaces simbólicos creados para un archivo en particular?

52

Había creado muchos enlaces simbólicos en varias rutas para un archivo o directorio en particular. Quiero la lista completa de rutas de enlaces simbólicos creados (ubicación).

Ejemplo:

Creé enlaces simbólicos para el ~/Picturesdirectorio en muchos directorios. ¿Cómo enumero todos los enlaces simbólicos a ese ~/Picturesdirectorio?

¿Es eso posible? ¿Si es así, entonces cómo?

Avinash Raj
fuente
Debe buscar de forma exhaustiva, no hay un recuento almacenado como si hubiera enlaces duros. Vea una de las respuestas usando find.
ctrl-alt-delor

Respuestas:

42

Aquí hay un ejemplo:

find -L /dir/to/start -xtype l -samefile ~/Pictures

o, tal vez mejor:

find -L /dir/to/start -xtype l -samefile ~/Pictures 2>/dev/null

para deshacerse de algunos errores como Permission denied, Too many levels of symbolic linkso File system loop detectedque los findarroja cuando no tiene los permisos correctos u otras situaciones.

  • -L - Seguir enlaces simbólicos.

  • -xtype l - El archivo es un enlace simbólico

  • -samefile name- El archivo se refiere al mismo inodo que name. Cuando -Lestá vigente, esto puede incluir enlaces simbólicos.

Notas:

  • Use minúscula L -xtype l, no el dígito 1.
  • En macOS / Darwin, -xtypees -type.
Radu Rădeanu
fuente
¿Podría modificarse el comando para encontrar un enlace simbólico que contenga una ruta? por ejemplo, archivos en todo el sistema que pueden vincularse a ~ / Pictures / A, ~ / Pictures / A / B / C, o cualquier archivo en los subdirectorios de ~ / Pictures>
nevado
7

Muy simple, use la opción -lname:

find / -lname /path/to/original/dir

De man find:

-lname pattern
       File is a symbolic link whose contents match shell pattern pattern.  The
       metacharacters do not treat `/' or `.' specially.  If the -L option or the
       -follow option is in effect, this test returns false unless the symbolic link
       is broken.

Nota : Recuerde que los enlaces simbólicos pueden estar en cualquier lugar, lo que incluye un sistema remoto (si está compartiendo archivos), por lo que es posible que no pueda localizarlos a todos.

Abdennour TOUMI
fuente
Tenga en cuenta también que si el enlace simbólico es una ruta relativa como esta, ../direntonces no encontrará el absoluto, en /path/to/original/dirsu lugar puede usar un patrón y eliminar los falsos positivos-lname \*dir
Jason S
2

Prueba esto :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(buscar directorios con el mismo número de inodo )

Mostrará todas sus rutas de enlaces simbólicos.

nux
fuente
44
Esto encontrará enlaces duros, no enlaces simbólicos. Los enlaces duros comparten números de inodo. Los enlaces simbólicos tienen diferentes números de inodo. El inodo de un enlace simbólico tiene una ruta en lugar de una lista de bloqueo.
hildred
la pregunta no mencionó el enlace simbólico duro o blando
nux