【发布时间】:2010-09-03 17:06:04
【问题描述】:
我想删除一个损坏的链接,但在此之前我想确认链接文件是否存在于目录中。让我们调用链接A:
if [ -a A ] then
print 'ya A is ther'
fi
但是如果A 是一个断开的链接,那么我该如何检查呢?
【问题讨论】:
我想删除一个损坏的链接,但在此之前我想确认链接文件是否存在于目录中。让我们调用链接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)" ]
}
【讨论】:
find -L 查找和删除这些可能很危险:unix.stackexchange.com/a/38691
find -L 而无需递归,使用-prune。查看我的编辑。
if readlink -qe A > /dev/null; then
echo "link works"
fi
【讨论】:
readlink 命令,或者带有带有不同选项的 readlink 命令。