Comment trouver et lister tous les liens symboliques créés pour un fichier particulier?

52

J'avais créé de nombreux liens symboliques sur différents chemins pour un fichier ou un répertoire particulier. Je veux la liste complète des chemins de liens symboliques créés (emplacement).

Exemple:

J'ai créé des liens symboliques pour l' ~/Picturesannuaire sur plusieurs annuaires. Comment lister tous les liens symboliques vers ce ~/Picturesrépertoire?

Est-ce possible? Si oui, alors comment?

Avinash Raj
la source
Vous devez effectuer une recherche exhaustive, il n’ya pas de décompte stocké comme il en existe pour les liens physiques. Voir une des réponses en utilisant find.
ctrl-alt-delor

Réponses:

42

Voici un exemple:

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

ou peut-être mieux:

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

pour se débarrasser de certaines erreurs telles que Permission denied, Too many levels of symbolic linksou File system loop detectedqui les findjette alors qu’elles ne disposent pas des autorisations appropriées ou d’autres situations.

  • -L - Suivez les liens symboliques.

  • -xtype l - Le fichier est un lien symbolique

  • -samefile name- Fichier se réfère au même inode que name. Quand -Lest en vigueur, cela peut inclure des liens symboliques.

Remarques:

  • Utilisez L minuscule -xtype l, pas le chiffre 1.
  • Sur macOS / Darwin, -xtypeis -type.
Radu Rădeanu
la source
La commande peut-elle être modifiée pour rechercher un lien symbolique contenant un chemin? par exemple, des fichiers du système pouvant être liés à ~ / Images / A, ~ / Images / A / B / C, ou à tout fichier des sous-répertoires de ~ / Images>
snowbound le
7

Très simple, option d'utilisation -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.

Remarque : rappelez-vous que les liens symboliques peuvent se trouver n'importe où, ce qui inclut un système distant (si vous partagez des fichiers), de sorte que vous ne pourrez peut-être pas tous les localiser.

Abdennour TOUMI
la source
Notez également que si le lien symbolique est un chemin relatif, ../diril ne trouvera pas l'absolu, /path/to/original/dirvous pouvez utiliser un modèle et éliminer les faux positifs-lname \*dir
Jason S
2

Essaye ça :

ls -i ~/

277566 Pictures

find . -follow -inum 277566(trouver des répertoires avec le même numéro d' inode )

Il affichera tous les chemins de ses liens symboliques.

nux
la source
4
Cela trouvera des liens durs, pas des liens symboliques. Les liens durs partagent les numéros d'inode. Les liens symboliques ont des numéros d'inode différents. l'inode d'un lien symbolique a un chemin au lieu d'une liste de blocage.
hildred
la question ne mentionnait pas de lien symbolique dur ou mou
nux