如何通过符号链接搜索文件是否存在?

如何通过符号链接搜索文件是否存在?

作为后续问题,我试图确定哪个命令/命令序列可以为我提供下面列出的哪个网络接口是无线接口 - 通过搜索存在/sys/class/net符号链接(再次)的接口。wireless

  1. 我能得到的最接近的是 using ls -LR | grep wireless,尽管我想在第一个匹配处停止 - 尝试使用-m 1, 管道到head -1但后来我丢失了找到匹配的文件路径,这实际上就是我所追求的,匹配本身是没用的。没有设法解决这个问题(尝试添加 -H以及-m 1,没有交易)。

  2. 另外,为什么find /sys/class/net -type l单靠自己还不能实现这一点呢? (使用sudo给了我相同的结果,所以这不是这些链接不可见的问题)

答案1

  1. 您可以使用 glob 要求 shell 为您找到它,例如

    echo /sys/class/net/*/wireless
    

    当的行为无线接口的存在取决于您的 shell 及其通配配置选项。

  2. find默认情况下不遵循符号链接;添加-L将改变这一点,但随后你会明白为什么它默认不遵循符号链接:

    find -L /sys/class/net -name wireless
    

    (符号链接引入循环)。

您可以将完整的支票写为

for ifc in /sys/class/net/*; do
    if [ "$(cat ${ifc}/operstate)" = "up" ] && [ -d "${ifc}/wireless" ]; then
        echo "${ifc##*/}"
    fi
done

相关内容