我想删除一个损坏的链接,但在此之前我想确认链接文件是否存在于目录中。我们称之为链接A
:
if [ -a A ] then
print 'ya A is ther'
fi
但如果A
是一个断开的链接,那我该怎么检查?
答案 0 :(得分:4)
find -L -type l
找到破损的符号链接。首先确认该文件不是目录或指向具有test -d
的目录的符号链接(如果它是一个目录,find
将递归到该目录中)。因此:
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
! [ -d "$1" ] && [ -n "$(find -L "$1" -type l)" ]
}
如果链接在调用test
和调用find
之间发生变化,则会出现竞争情况。另一种方法是告诉find
不要递归。
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
[ -n "$(find -L "$1" -type l -print -o -prune)" ]
}
答案 1 :(得分:2)
if readlink -qe A > /dev/null; then
echo "link works"
fi
答案 2 :(得分:0)