The grep
command has two channels for information out of it. The first and most obvious one is of course stdout
, where it sends matches it finds. But if it finds no matches, it also uses an exit value > 0 to inform you. Combined with the -q
(quiet) option, you can use this as a more intelligent option for find
:
$ find . -name '*.jar' -exec zgrep -sq BuildConfig {} \; -exec zip -d {} "*/BuildConfig.class" \;
This assumes that you want to search through the compressed file using grep -Z
, of course. :)
Or for easier reading:
find . -name '*.jar' \
-exec zgrep -sq BuildConfig {} \; \
-exec zip -d {} "*/BuildConfig.class" \;
Find operates by running each test in order. You can think of the options as a series of filters; the -name
option is the first filters, and a file only gets passed to the second -exec
if the preceding -exec
exited without errors.