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?
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?
Respuestas:
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 -ls
lugar de, -exec
pero mostrará el inodo y otra información del archivo de destino en lugar de los archivos individuales.
-L
y -samefile
hace que ambos se enumeren. Si omite -L
, los enlaces simbólicos no se siguen (ver man find
).
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.