Colocar o -exec grep [...] antes do -printf e enviar o stdout de grep para /dev/null (precisa de sh -c ) funciona bem:
find ./dir -type f -newermt 2017-04-01 ! -newermt 2018-06-30 \
-exec sh -c 'grep -E -l "pattern" "{}" 1>/dev/null' \; \
-printf "%TY/%Tm/%Td %TH:%TM:%.2TS %pfind ./dir -type f -newermt 2017-04-01 ! -newermt 2018-06-30 -print0 | \
xargs -0 -i -P6 grep -E -l "pattern" "{}" | \
xargs -i find "{}" -printf "%TY/%Tm/%Td %TH:%TM:%.2TS %pfind ./dir -type f -newermt 2017-04-01 ! -newermt 2018-06-30 \
-exec sh -c 'grep -E -l "pattern" "{}" 1>/dev/null' \; \
-printf "%TY/%Tm/%Td %TH:%TM:%.2TS %pfind ./dir -type f -newermt 2017-04-01 ! -newermt 2018-06-30 -print0 | \
xargs -0 -i -P6 grep -E -l "pattern" "{}" | \
xargs -i find "{}" -printf "%TY/%Tm/%Td %TH:%TM:%.2TS %p%pre%" | \
sort -z -n | tr '%pre%' '\n'
" | \
sort -z -n | tr '%pre%' '\n'
" | \
sort -z -n | tr '%pre%' '\n'
" | \
sort -z -n | tr '%pre%' '\n'
Graças à sua pergunta, aprendi algo novo. Eu nem sabia que é possível filtrar find resultados como esse.
Outra opção seria usar um pouco de tubulação e xargs . Os primeiros testes de desempenho mostram que isso é um pouco mais rápido, embora eu me pergunte por quê:
(Observe o -P6 - > Executando o comando grep em paralelo.)