如何在bash中找到指向符号链接的符号链接
发布时间:2020-12-16 01:58:40 所属栏目:安全 来源:网络整理
导读:我正在准备一个bash脚本来验证符号链接的正确性.我想诊断时间: @symlink坏了 @symlink指向另一个@symlink – (用symlinks链的最终目标修复它) @symlink指向另一个@symlink,它被破坏了 @symlinks链是一个循环 在诊断symlink指向符号链接的时候,我遇到了第2点
我正在准备一个bash脚本来验证符号链接的正确性.我想诊断时间:
> @symlink坏了 在诊断symlink指向符号链接的时候,我遇到了第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 UPDATE 测试文件结构(其中讨论了bml脚本的symlinks.sh): 解决方法
从您的问题描述中不清楚如何处理传递链末端的断开链接.我将简单地报告错误并继续前进.
#!/bin/sh rc=0 for file in path/*; do if [ -L "$file" ]; then nfile=$file while [ -L "$nfile" ]; do nfile=$(cd $(dirname "$nfile"); abspath $(readlink "$nfile")) done if ! [ -r "$nfile" ]; then echo "$0: $file eventually resolves to nonexistent target $nfile" >&2 rc=1 else # FIXME: maybe avoid doing this needlessly? rm "$file" ln -s "$nfile" "$file" fi fi done exit "$rc" 我是否正确理解您希望将符号链接符号链接(递归等)用符号链接替换为最终目标?这个脚本可以做到这一点,虽然有些过分,但它会重写所有解析的符号链接;优化这一点,以避免不必要地做它是一个练习. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |