grep
コマンドには、2つの情報チャネルがあります。最初の最も明白なものはもちろんstdout
であり、見つかったマッチを送信します。しかし、にはと一致しないと判明した場合は、終了値> 0を使用して通知します。 -q
(静かな)オプションと組み合わせることで、あなたはfind
のために、よりインテリジェントなオプションとしてこれを使用することができます。
$ find . -name '*.jar' -exec zgrep -sq BuildConfig {} \; -exec zip -d {} "*/BuildConfig.class" \;
これはもちろん、grep -Z
を使用して圧縮ファイルを検索することを想定しています。 :)
それとも読みやすい:
find . -name '*.jar' \
-exec zgrep -sq BuildConfig {} \; \
-exec zip -d {} "*/BuildConfig.class" \;
検索は順番に各テストを実行することによって動作します。オプションは一連のフィルタと考えることができます。 -name
オプションが最初のフィルタであり、前の-exec
がエラーなしで終了した場合にのみ、ファイルは2番目の-exec
に渡されます。
関連:https://stackoverflow.com/q/9612090/1531971 – jdv
「RESULTPATH」は「findコマンドで特定された各ファイル」を意図していますか?また、 '.jar'ファイルはzipです。あなたは 'grep -z'を意味しますか?また、あなたの 'zip'行の引用符は何ですか? – ghoti
はい、resultpathの場所は、findコマンドで見つかったパスでなければなりません。引用符がありません – user269721