-exec
é um predicado que executa um comando (não um shell) e é avaliado como verdadeiro ou falso baseado no resultado do comando (zero ou não). status de saída zero).
Então:
find . -iname '*.csv' -exec grep foo {} \; -print
seria imprimir o caminho do arquivo se grep
encontrar foo no arquivo. Em vez de -print
, você pode usar outro predicado -exec
ou qualquer outro predicado
find . -iname '*.csv' -exec grep foo {} \; -exec echo {} \;
Veja também os operadores !
e -o
find para negação e ou .
Como alternativa, você pode iniciar um shell como:
find . -iname '*.csv' -exec sh -c '
grep foo "$1" && echo "$1"' sh {} \;
Ou para evitar ter que iniciar um shell para cada arquivo:
find . -iname '*.csv' -exec sh -c '
for i do
grep foo "$i" && echo "$i"
done' sh {} +