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.)