我运行find并迭代结果,[ \( -L $F \) ]以收集某些符号链接.
我想知道在这种情况下是否有一种简单的方法来确定链接是否被破坏(指向一个不存在的文件).
这是我的代码:
FILES=`find /target/ | grep -v '\.disabled$' | sort`
for F in $FILES; do
if [ -L $F ]; then
DO THINGS
fi
done
Run Code Online (Sandbox Code Playgroud)
小智 46
# test if symlink is broken (by seeing if it links to an existing file)
if [ ! -e "$F" ] ; then
# code if the symlink is broken
fi
Run Code Online (Sandbox Code Playgroud)
Sha*_*hin 30
这应打印出已损坏的链接:
find /target/dir -type l ! -exec test -e {} \; -print
Run Code Online (Sandbox Code Playgroud)
您还可以将操作find链接到命令,例如删除损坏的链接:
find /target/dir -type l ! -exec test -e {} \; -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
如果符号链接指向文件或目录,这将有效,但现在已损坏
if [[ -L "$strFile" ]] && [[ ! -a "$strFile" ]];then
echo "'$strFile' is a broken symlink";
fi
Run Code Online (Sandbox Code Playgroud)
readlink -q 如果链接错误,将无声地失败:
for F in $FILES; do
if [ -L $F ]; then
if readlink -q $F >/dev/null ; then
DO THINGS
else
echo "$F: bad link" >/dev/stderr
fi
fi
done
Run Code Online (Sandbox Code Playgroud)