gpt4 book ai didi

bash - 如何在 bash 中找到指向符号链接(symbolic link)的符号链接(symbolic link)

转载 作者:行者123 更新时间:2023-11-29 09:15:09 25 4
gpt4 key购买 nike

我正在准备一个bash 脚本来验证符号链接(symbolic link)的正确性。我想在以下时间诊断:

  1. @symlink 坏了
  2. @symlink 指向另一个@symlink --(用符号链接(symbolic link)链的最终目标修复它)
  3. @symlink 指向另一个已损坏的@symlink
  4. @symlinks 链是一个循环

当符号链接(symbolic link)指向符号链接(symbolic link)时,我在诊断第 2) 点时遇到了很大的问题。

我试图使用 readlink,但它返回符号链接(symbolic link)链的最终目标而不是指向的符号链接(symbolic link)名称。我试图在没有 -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

更新

测试文件结构(其中讨论了 bash 脚本的 symlinks.sh):

**hook-tests**

最佳答案

从您的问题描述中不清楚应该如何处理传递链末端的断开链接。我将简单地报告一个错误并继续。

#!/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"

我是否正确理解您想要一个符号链接(symbolic link)到一个符号链接(symbolic link)(等递归地)被一个到最终目标的符号链接(symbolic link)替换?这个脚本就是这样做的,尽管有点过分,因为它会重写所有解析的符号链接(symbolic link);对此进行优化以避免不必要的操作留作练习。

关于bash - 如何在 bash 中找到指向符号链接(symbolic link)的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34221753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com