我想删除一个断开的链接,但在此之前,我想确认链接文件是否存在于目录中。 我们来调用链接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:测试断开的链接 。