find -L -type l
findet defekte symbolische Links. Vergewissern Sie sich zunächst, dass es sich bei der Datei nicht um ein Verzeichnis oder einen symbolischen Link auf ein Verzeichnis mit test -d
(wenn es ein Verzeichnis ist, find
würde darin rekursieren). Daher:
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
! [ -d "$1" ] && [ -n "$(find -L "$1" -type l)" ]
}
Dies ist anfällig für eine Race Condition, wenn sich der Link zwischen dem Aufruf von test
und die Aufforderung an find
. Ein alternativer Ansatz besteht darin, zu sagen find
nicht zu rekursieren.
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
[ -n "$(find -L "$1" -type l -print -o -prune)" ]
}