Encontrar todos los enlaces simbólicos y duros a un archivo en UNIX

9

Si tengo un archivo específico en un sistema de archivos UNIX, ¿hay alguna manera de usar bash para encontrar todos los enlaces a ese archivo, tanto simbólicos como duros? Si necesito diferentes comandos para cada uno, ¿cuáles son?

colin.t.welch
fuente

Respuestas:

8

Prueba esto con GNU find:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

Salida de ejemplo:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

Puede usar en -lslugar de, -execpero mostrará el inodo y otra información del archivo de destino en lugar de los archivos individuales.

Pausado hasta nuevo aviso.
fuente
¿Esta salida muestra enlaces duros y simbólicos? Enlaces Sym indicados por -> flecha?
aaaidan
@aaaidan: Sí, eso es correcto. El número de inodo de x1 y x2 es el mismo que indica que son enlaces duros. La flecha indica un enlace simbólico. El uso -Ly -samefilehace que ambos se enumeren. Si omite -L, los enlaces simbólicos no se siguen (ver man find).
Pausado hasta nuevo aviso.
2

Si no tiene GNU Find, puede hacer esto:

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"

Pero no funcionará para enlaces simbólicos.

Ollie Saunders
fuente
1
Oh, ahora veo que esta pregunta ya responde a esto: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders