我想删除损坏的链接,但在此之前我想确认链接文件是否存在于目录中。让我们把链接A
:删除损坏的链接Unix
if [ -a A ] then
print 'ya A is ther'
fi
但如果A
是断开的链接,然后我该怎么检查?
我想删除损坏的链接,但在此之前我想确认链接文件是否存在于目录中。让我们把链接A
:删除损坏的链接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)" ]
}
if readlink -qe A > /dev/null; then
echo "link works"
fi
请注意,这里假设(最近ish)GNU coreutils。有没有'readlink'命令的unix系统,或者有'readlink'命令可以选择不同的选项。 – Gilles 2010-09-03 17:41:50
看到这个unix.stackexchange.com回答为什么使用'find -L'来查找和删除这些可能是危险的:http://unix.stackexchange.com/a/38691 – 2014-02-06 14:37:40
@ OgrePsalm33的确,感谢您的错误报告。有一种使用'find -L'的方法,不用递归,而是使用'-prune'。看我的编辑。 – Gilles 2014-02-06 15:53:59