find -L -type l
trouve des liens symboliques brisés. Tout d'abord, confirmez que le fichier n'est pas un répertoire ou un lien symbolique vers un répertoire avec test -d
(si c'est un répertoire, find
se recurcirait dedans). Ainsi:
is_broken_symlink() {
case $1 in -*) set "./$1";; esac
! [ -d "$1" ] && [ -n "$(find -L "$1" -type l)" ]
}
Ceci est sujette à une condition de course, si le lien entre les changements de l'appel à test
et l'appel à find
. Une approche alternative consiste à dire find
de ne pas recurcir.
is_broken_symlink() {
case $1 in -*) set "./$1";; esac
[ -n "$(find -L "$1" -type l -print -o -prune)" ]
}
Voir cette réponse unix.stackexchange.com pourquoi utiliser 'find -L' pour trouver et supprimer ceux-ci pourrait être dangereux: http://unix.stackexchange.com/a/38691 –
@ OgrePsalm33 En effet, merci pour le rapport de bug . Il y a un moyen d'utiliser 'find -L' sans récurer, en utilisant' -prune'. Voir ma modification. – Gilles