Shell-Script

如何在符號連結上搜尋文件是否存在?

  • November 18, 2021

作為對這個問題的跟進,我試圖確定哪些命令/命令序列可以為我提供下面列出的哪些網路介面/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. 您可以要求 shell 用 glob 為您找到它,例如
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

引用自:https://unix.stackexchange.com/questions/678064