删除断开的链接Unix

时间:2010-09-03 17:06:05

标签: linux unix shell

我想删除一个损坏的链接,但在此之前我想确认链接文件是否存在于目录中。我们称之为链接A

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

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

3 个答案:

答案 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)