#!/bin/bash
# ideone boilerplate: run in temp dir
t=$(mktemp -d -t ideone.XXXXXXXX) || exit trap 'rm -rf "$t"' ERR EXIT
cd "$t"
mkdir -p files/poo files/bar/quux
echo AAA |
tee files/poo/aaa.txt files/bar/aaa.txt >files/bar/quux/aaa.txt
echo BBB | tee files/bbb.txt files/poo/bbb.txt >files/bar/quux/bbb.txt
printf '%s\n' "aaa" "bBb" |
tee files/poo/aaabbb.txt files/bar/aaabbb.txt >files/bar/quux/aaabbb.txt
echo "*** grep | xargs grep | xargs"
grep -ilrZ "AAA" ./files/* |
xargs -r0 grep -Zil "BBB" |
xargs -r0 -i echo "{} match"
echo "*** find -exec -exec -exec"
find ./files -type f \
-exec grep -qi "AAA" {} \; \
-exec grep -qi "BBB" {} \; \
-exec sh -c 'for f; do echo "$f matched"; done' _ {} +
IyEvYmluL2Jhc2gKCiMgaWRlb25lIGJvaWxlcnBsYXRlOiBydW4gaW4gdGVtcCBkaXIgCnQ9JChta3RlbXAgLWQgLXQgaWRlb25lLlhYWFhYWFhYKSB8fCBleGl0IHRyYXAgJ3JtIC1yZiAiJHQiJyBFUlIgRVhJVApjZCAiJHQiCgpta2RpciAtcCBmaWxlcy9wb28gZmlsZXMvYmFyL3F1dXgKZWNobyBBQUEgfAp0ZWUgZmlsZXMvcG9vL2FhYS50eHQgZmlsZXMvYmFyL2FhYS50eHQgPmZpbGVzL2Jhci9xdXV4L2FhYS50eHQKZWNobyBCQkIgfCB0ZWUgZmlsZXMvYmJiLnR4dCBmaWxlcy9wb28vYmJiLnR4dCA+ZmlsZXMvYmFyL3F1dXgvYmJiLnR4dApwcmludGYgJyVzXG4nICJhYWEiICJiQmIiIHwKdGVlIGZpbGVzL3Bvby9hYWFiYmIudHh0IGZpbGVzL2Jhci9hYWFiYmIudHh0ID5maWxlcy9iYXIvcXV1eC9hYWFiYmIudHh0CgplY2hvICIqKiogZ3JlcCB8IHhhcmdzIGdyZXAgfCB4YXJncyIKCmdyZXAgLWlsclogIkFBQSIgLi9maWxlcy8qIHwKeGFyZ3MgLXIwIGdyZXAgLVppbCAiQkJCIiB8CnhhcmdzIC1yMCAtaSBlY2hvICJ7fSBtYXRjaCIKCmVjaG8gIioqKiBmaW5kIC1leGVjIC1leGVjIC1leGVjIgoKZmluZCAuL2ZpbGVzIC10eXBlIGYgXAogICAgLWV4ZWMgZ3JlcCAtcWkgIkFBQSIge30gXDsgXAogICAgLWV4ZWMgZ3JlcCAtcWkgIkJCQiIge30gXDsgXAogICAgLWV4ZWMgc2ggLWMgJ2ZvciBmOyBkbyBlY2hvICIkZiBtYXRjaGVkIjsgZG9uZScgXyB7fSArCg==