删除一个断开的链接Unix

我想删除一个断开的链接,但在此之前,我想确认链接文件是否存在于目录中。 我们来调用链接A

 if [ -a A ] then print 'ya A is ther' fi 

但是,如果A是一个断开的链接,那我该如何检查?

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)" ] } 
 if readlink -qe A > /dev/null; then echo "link works" fi 

看看这个页面的例子7-4:测试断开的链接 。