私は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
呼び出され、次を返します-exec
。grep
本物一致するものが見つかった場合は終了状態です。