删除断开的链接Unix
收藏

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

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)" ]
}

公众号