Linux 删除断开的Unix链接
我想删除一个断开的链接,但在此之前我想确认该链接文件是否存在于目录中。让我们调用链接Linux 删除断开的Unix链接,linux,unix,shell,Linux,Unix,Shell,我想删除一个断开的链接,但在此之前我想确认该链接文件是否存在于目录中。让我们调用链接A: if [ -a A ] then print 'ya A is ther' fi 但是如果A是一个断开的链接,那么我如何检查呢?看一个例子。find-L-typel查找断开的符号链接。首先用test-d确认文件不是目录或指向目录的符号链接(如果它是目录,find将递归到其中)。因此: 如果对test的调用和对find的调用之间的链接发生变化,则很容易出现争用情况。另一种方法是告诉find不要递归 i
A
:
if [ -a A ] then
print 'ya A is ther'
fi
但是如果
A
是一个断开的链接,那么我如何检查呢?看一个例子。find-L-typel
查找断开的符号链接。首先用test-d
确认文件不是目录或指向目录的符号链接(如果它是目录,find
将递归到其中)。因此:
如果对test
的调用和对find
的调用之间的链接发生变化,则很容易出现争用情况。另一种方法是告诉find
不要递归
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
[ -n "$(find -L "$1" -type l -print -o -prune)" ]
}
注意,这假设(最近的ish)GNU coreutils。有些unix系统没有使用
readlink
命令,或者使用了具有不同选项的readlink
命令。请参阅unix.stackexchange.com,了解使用find-L
查找和删除这些命令的原因可能很危险:@OgrePsalm33确实,感谢您的错误报告。有一种方法可以使用find-L
,而不用递归,即使用-prune
。请参阅我的编辑。
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
! [ -d "$1" ] && [ -n "$(find -L "$1" -type l)" ]
}
is_broken_symlink () {
case $1 in -*) set "./$1";; esac
[ -n "$(find -L "$1" -type l -print -o -prune)" ]
}