Astuce terminal : Trouver si un fichier ou un dossier est utilisé en tant que lien symbolique
Voici la solution pour réaliser une action très spécifique, mais qui a été très utile dernièrement. Ici, il s'agit de savoir si un fichier ou un dossier est utilisé en tant que lien symbolique à un autre endroit.
Pour cela nous allons utiliser le terminal, et en particulier la commande find.
Imaginons un dossier MaSource, dans lequel je veux savoir si il y a un lien vers le dossier MonDossierLie ou un fichier qu'il contiendrait.
Voici la commande à taper
find /chemin/vers/MaSource -type l -exec readlink {} \; | grep MonDossierLie
Si la commande renvoie des résultats, des fichiers ou le dossier lui-même sont liés quelque part dans MaSource. Le résultat vous donnera même les éléments liés.
Quelques explications ?
Regardons en détail la commande, que l'on va découper en 3 étapes.
La première application utilisée est find, une application qui permet de retrouver des éléments. On lui indique où chercher, puis l'on indique que l'on cherche les liens symboliques.
find /chemin/vers/MaSource -type l
Ensuite, appliquée sur les résultats, on execute la commande readlink qui va permettre d'indiquer le chemin source des liens trouvés.
find /chemin/vers/MaSource -type l -exec readlink {} \;
Enfin, sur les chemins trouvés, on ne récupère que les lignes dont le chemin contient l'élément recherché, avec la commande grep, pour obtenir la commande complète.
find /chemin/vers/MaSource -type l -exec readlink {} \; | grep MonDossierLie
Et si je souhaite aussi avoir le chemin du lien ?
Si en plus du fichier lié, vous souhaitez connaitre le chemin vers le lien, il suffit de remplacer la commande readlink, par une autre qui afficherait les deux valeurs. Il s'agira de la commande ls, tout simplement, qui dans son affichage "long" donne les deux valeurs.
find /chemin/vers/MaSource -type l -exec ls -l {} \; | grep MonDossierLie
En espérant que cela aide quelqu'un d'autre que moi :-)