Shell-Script
如何在符號連結上搜尋文件是否存在?
作為對這個問題的跟進,我試圖確定哪些命令/命令序列可以為我提供下面列出的哪些網路介面
/sys/class/net
是無線介面 - 通過搜尋符號連結(再次)命名的那些wireless
存在。
- 我能得到的最接近的是 using
ls -LR | grep wireless
,雖然我想在第一次匹配時停止 - 嘗試使用-m 1
, 管道到head -1
但後來我失去了找到匹配項的文件路徑,這實際上是我所追求的,匹配項本身沒用。沒有設法解決這個問題(嘗試添加 -H
以及-m 1
,沒有交易)。- 另外,為什麼
find /sys/class/net -type l
單靠自己做不到呢?(使用sudo
給了我相同的結果,所以這不是這些連結不可見的問題)
- 您可以要求 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