シンボリックリンクを介してファイルが存在するかどうかを検索するには?

シンボリックリンクを介してファイルが存在するかどうかを検索するには?

フォローアップとしてこれ/sys/class/net質問、私はシンボリックリンクが存在するインターフェイスを(再)検索して、どのコマンド/コマンドシーケンスが下にリストされているどのネットワークインターフェイスがワイヤレスインターフェイスであるかを知らせることができるかどうかを確認します。wireless

  1. 私が得ることができる最も近いのは、使用することでしたls -LR | grep wireless。最初の一致で停止したかったのですが、試してみてパイピングを試みましたが、-m 1一致を見つけるhead -1ためのファイルパスを失いました。実際、私が探しているのは、一致するもの自体は使用されていないことです。 。この問題を解決できませんでした(追加しようとしましたが、H取引-m 1はありませんでした)。

  2. また、なぜfind /sys/class/net -type l自分でこの目標を達成できないのですか? (を使用するとsudo同じ結果が得られるため、これらのリンクが表示されないことは問題になりません。)

ベストアンサー1

  1. globを使用してシェルに代わりに探すように依頼できます。例えば

    echo /sys/class/net/*/wireless
    

    適切な行動いいえワイヤレスインターフェイスの存在は、シェルとそのワイルドカード設定オプションによって異なります。

  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

おすすめ記事