Recherche de tous les liens symboliques et physiques vers un fichier sous UNIX

9

Si j'ai un fichier spécifique dans un système de fichiers UNIX, existe-t-il un moyen d'utiliser bash pour trouver tous les liens vers ce fichier, qu'ils soient symboliques ou physiques? Si j'ai besoin de commandes différentes pour chacune, quelles sont-elles?

colin.t.welch
la source

Réponses:

8

Essayez ceci avec GNU find:

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

Exemple de sortie:

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

Vous pouvez utiliser à la -lsplace de -execmais cela affichera l'inode et d'autres informations du fichier cible à la place des fichiers individuels.

Dennis Williamson
la source
Cette sortie montre des liens durs et sym? Liens Sym indiqués par -> flèche?
aaaidan
@aaaidan: Oui, c'est bien ça. Les numéros d'inode de x1 et x2 sont les mêmes, ce qui indique qu'il s'agit de liens physiques. La flèche indique un lien symbolique. Utiliser -Let -samefilefait en sorte que les deux soient listés. Si vous omettez, les -Lliens symboliques ne sont pas suivis (voir man find).
Dennis Williamson
2

Si vous n'avez pas GNU Find, vous pouvez le faire:

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

Mais cela ne fonctionnera pas pour les liens symboliques.

Ollie Saunders
la source
1
Oh, je vois maintenant que cette question répond déjà à cette question: superuser.com/questions/12972/to-see-hardlinks-by-ls
Ollie Saunders