Com o GNU grep, passe --binary-files=without-match
para ignorar arquivos binários. Os arquivos de código-fonte são arquivos de texto, então eles serão incluídos nos resultados.
Se você quiser ignorar arquivos de texto com determinadas extensões, use a opção --exclude
, por exemplo,
grep -r --exclude='*.html' --exclude='*.js' …
ou você pode incluir apenas arquivos explicitamente correspondentes, por exemplo,
grep -r --include='*.txt' …
Se você deseja ignorar os arquivos de texto que são código-fonte, use o comando file
para adivinhar quais arquivos são o código-fonte. Isso usa heurística para detectar o código-fonte como código não-fonte ou vice-versa.
find -type f exec sh -c '
for x do
case $(file <"$x") in
*source*) :;; # looks like source code
*text*) grep -H -e "$0" "$x";; # looks like text
# else: looks like binary
esac
done
' "REGEXP" {} +
ou
find -type f exec sh -c '
for x do
case $(file -i <"$x") in
text/plain\;*) grep -H -e "$0" "$x";; # looks like text
# else: looks like source code or binary
esac
done
' "REGEXP" {} +
Como alternativa, você pode usar ack em vez de grep. Ack integra um sistema de classificação de arquivos baseado em nomes de arquivos. Ele é voltado para a pesquisa no código-fonte por padrão, mas você pode informá-lo para pesquisar tipos diferentes passando a opção --type
. A pesquisa de todos os arquivos com ack pode ajudar.