gpt4 book ai didi

linux - Bash - 损坏的符号链接(symbolic link)

转载 作者:太空宇宙 更新时间:2023-11-04 03:40:48 25 4
gpt4 key购买 nike

我在 Debian 下编写 bash 脚本时遇到问题。我有一个文件夹,其中包含更多文件夹和文件(它是文件夹树)。该树包含符号链接(symbolic link)。我想递归地遍历整个结构,检测损坏的符号链接(symbolic link)并以这种方式(绝对路径)打印它们(不是它们的目标,而是链接本身):

/tmp/Foo/Bar/symlink1
/tmp/Foo/symlink2
/tmp/Foo/Goo/symlink3

但我不想也不能使用经典

find -L $(path) -type l

因为这遵循给定结构之外的正确链接,并检测结构之外的损坏链接,并且我不希望在打印输出中出现这些链接,因为我只想检测 $(path) 及其所有子目录中给出的结构内部损坏的符号链接(symbolic link)。你能帮我一下吗?我感觉这需要一些带有 readlink 和循环的黑魔法,但我不知道如何实现。谢谢你的建议! :)

最佳答案

以下命令将在不使用符号链接(symbolic link)的情况下完成该工作:

find /tmp/ -type l -printf '%p|' -exec stat -L {} \; 2>&1 | grep 'No such' | cut -d'|' -f1

stat-L 选项通过检查链接后面的文件来跟踪链接(但是,不要将其与 find-L 选项混淆)。当找不到链接时,您会收到错误消息:

stat: cannot stat `./symlink': No such file or directory

但是,我们还想打印文件的名称,因此我们使用 -printf '%p|'。这里的管道仅用作分隔符(我怀疑您的文件名称中是否有管道),以将文件名与否则将打印的 stat 错误分开。

关于linux - Bash - 损坏的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735712/

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