Para procurar uma string (não uma expressão regular) sem se preocupar com caso, use grep -iF STRING (onde STRING deve ser a string citada que você está procurando).
Para recapitular todos os arquivos regulares em uma hierarquia de diretórios,
find . -type f -exec grep -iF STRING /dev/null {} +
A principal diferença entre este e seu comando é que isso executará grep para grupos de arquivos encontrados. Seu comando executaria grep uma vez para cada arquivo encontrado, o que pode ser mais lento se houver muitos arquivos. É o + no final que faz essa diferença.
A outra diferença é que, como grep é invocado com mais de um arquivo, sua saída conterá os nomes de caminho dos arquivos em que as correspondências são encontradas. O /dev/null está lá para forçar esse comportamento no caso de grep ser chamado com apenas um único arquivo. Você pode usar a opção grep -H em vez de incluir /dev/null se sua implementação de grep tiver essa opção não padrão (mas comum).
Alguma implementação de grep também tem a opção de recuperar diretórios por si só, sem a ajuda de find . Isso geralmente é feito com uma opção -R :
grep -R -iF STRING .
Observe que o GNU grep também tem uma opção -r que é um pouco diferente da opção -R (com -r , links simbólicos não serão seguidos, o que imitaria mais de perto o comportamento que você obteria com a execução de grep via find . -type f ).
Se o que você procura é encontrar apenas os nomes de caminho dos arquivos que contêm a string e não necessariamente as linhas reais daqueles arquivos que correspondem, então você pode fazer isso de várias maneiras diferentes (todas amplamente análogas a o que foi mencionado acima).
-
Use
grep -qcomo um teste em cada arquivo:find . -type f -exec grep -qiF STRING {} ';' -print -
Use
grep -lnos grupos de arquivos encontrados porfind:find . -type f -exec grep -ilF STRING {} + -
Use recursivo
grep -l:grep -R -ilF STRING .
Se você está querendo fazer mais processamento dos arquivos que contêm a string dada, então eu iria com a primeira destas alternativas:
find . -type f -exec grep -qiF STRING {} ';' -exec sh -c '
for pathname do
# Process "$pathname" here
done' sh {} +
ou, fazendo o grep dentro do script in-line:
find . -type f -exec sh -c '
for pathname do
if grep -qiF STRING "$pathname"; then
# Process "$pathname" here
fi
done' sh {} +
Relacionados: