Como você já está usando o código bash
específico, faça (assumindo o GNU grep
ou compatível):
find . -name '*.o3g' -print0 | grep -z pattern |
while IFS= read -rd '' file; do
process "$file"
read -n1 -p 'Press any key to continue' < /dev/tty
done
(onde o caractere (observe que algumas chaves enviam mais de um caractere) é lido no terminal de controle).
Ou, melhor, porque isso também evita que stdin de process
seja o canal de grep
:
while IFS= read -u 3 -rd '' file; do
process "$file"
read -n1 -p 'Press any key to continue'
done 3< <(find . -name '*.o3g' -print0 | grep -z pattern)
(onde o caractere é lido do stdin não modificado).
Veja também Por que o loop é uma má prática de saída? para outros possíveis problemas com a maneira como você processa find
output.
Aqui, talvez você possa simplesmente fazer:
find . -name '*.o3g' -path '*pattern*' -ok process {} \;
Veja também, para evitar qualquer GNUism exceto o bash
:
find . -name '*.o3g' -exec bash -c '
for file do
[[ $file =~ pattern ]] || continue
process "$file"
read -n1 -p "Press any key to continue"
done' bash {} +