最初のマッチ後に「検索」を終了する方法は?

最初のマッチ後に「検索」を終了する方法は?

私はwhileループでfindを使用しています。 ip.txtのIPリストを取得し、ファイルディレクトリからIPを検索し、見つかった各IPのファイル名をresults.resというファイルに書き込みます。

正常に検索するたびに停止し、次のIPに移動したいと思います。

私の現在のスクリプトは次のとおりです。

while read ip; do
    find . -type f -maxdepth 1 -not -name ips.txt -not -name results.res -print0  | xargs -0 grep "$ip" >> results.res
done < ips.txt

サイトで他の回答を調べたところ、以下を使用して発見しました。

-print -quit
-print | head -n 1

最初の成功した検索の後、検索を停止します。しかし、whileループを使用しているので、これはうまくいきません。誰でも可能な解決策を提案できますか?

ベストアンサー1

while IFS= read -r ip; do
  find . -maxdepth 1 \
         -type f \
         ! -name ips.txt \
         ! -name results.res \
         -exec grep -lwFe "$ip" {} \; \
         -quit
done < ips.txt > results.res

ファイルの各行を変数ips.txtとして読み取り、$ip基準に一致するファイルを参照しfind(特定の順序なしで)、$ip固定F文字列とordで区切られたw最初のファイルを報告します。成功すると-quit呼び出され、次を返します-execgrep本物一致するものが見つかった場合は終了状態です。

おすすめ記事