【发布时间】:2016-03-17 06:15:48
【问题描述】:
我正在准备一个 bash 脚本来验证符号链接的正确性。我想诊断什么时候:
- @symlink 已损坏
- @symlink 指向另一个@symlink --(用符号链接链的最终目标修复它)
- @symlink 指向另一个已损坏的@symlink
- @symlinks 链是一个循环
在诊断符号链接指向符号链接时,我对第 2 点有很大的问题。
我尝试使用 readlink,但它返回符号链接链的最终目标,而不是指向符号链接名称。我试图在没有-f 参数的情况下运行它,但没有帮助。然后与 find 的组合给了我糟糕的结果...
谁能帮我解决这个问题?
下面我将我的代码粘贴到当前版本中。
failed=0
for file in path/*
do
if [[ -L "$file" ]]
then
if [[ ! -a "$file" ]]
then
echo "Symlink '$file' is broken -- target object doesn't exists."
failed=1
elif [[ -L "$(readlink -f $file)" ]]
then
echo "Symlink '$file' points to another symlink: '$(readlink $file)'"
failed=1
fi
fi
done
exit $failed
更新
测试文件结构(其中 symlinks.sh 是讨论 bash 脚本):
【问题讨论】:
-
挑剔:你所有的分号都是无用的,可以删除而不会产生不良影响。 (只有在同一行写
if ...; then时才需要它们。) -
感谢您的提示 :)
标签: bash