Comment détecter (récursivement) tous les liens symboliques dans un répertoire qui identifient leur cible de manière absolue plutôt que relative?
Étant donné que ces liens sont très susceptibles de se rompre lorsqu'une arborescence de répertoires entière est déplacée, j'aimerais avoir un moyen de les identifier.
Même les liens relatifs peuvent se rompre si l'arborescence des répertoires est déplacée (s'ils se trouvent en dehors de la racine de l'arborescence des répertoires), mais je pense que cela est traité dans cette question .
Réponses:
Pour trouver des liens absolus, vous pouvez utiliser
find
l'-lname
option de si votrefind
supporte cela (il est disponible au moins dans GNUfind
, sur FreeBSD et macOS):Cela demande
find
d'imprimer les noms des fichiers qui sont des liens symboliques et dont le contenu (cible) correspond à l'/*
aide de la globalisation du shell.À proprement parler, POSIX spécifie que les chemins absolus commencent par un
/
ou trois ou plus/
; pour correspondre à cela, vous pouvez utiliserSur quels systèmes // foo / bar est-il différent de / foo / bar? a plus de détails à ce sujet.
(Merci à Sato Katsura d' avoir souligné qu'il
-lname
est spécifique à GNU, à fd0 d' avoir mentionné qu'il est en fait également disponible sur au moins FreeBSD et macOS, et à Stéphane Chazelas d'avoir évoqué la définition de nom de chemin absolu POSIX.)la source
find ./ -t l -exec ls -l {} \;
ce qui devrait être une alternative sûre. Il serait facile d'analyser sa sortie et de faire tout ce qui est nécessaire.ls
? ...Vous pouvez trouver l'
symlinks
utilitaire utile:Et peut réparer les liens pour vous. Ici avec
-t
pour dire ce que cela ferait :la source