С помощью GNU grep передайте - двоичные файлы=без совпадения
, чтобы игнорировать двоичные файлы. Файлы с исходным кодом являются текстовыми файлами, поэтому они будут включены в результаты.
Если вы хотите игнорировать текстовые файлы с определенными расширениями, вы можете использовать опцию --exclude
, например,
grep -r --exclude='*.html' --exclude='*.js' …
или вместо этого включить только явно совпадающие файлы, например,
grep -r --include='*.txt' …
Если вы хотите игнорировать текстовые файлы, являющиеся исходным кодом, вы можете использовать команду file
для того, чтобы угадать, какие файлы являются исходным кодом. При этом используется эвристика, так что он может обнаружить исходный код как не исходный код или наоборот. В качестве альтернативы можно использовать
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" {} +
или
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" {} +
ackack вместо grep. Ack интегрирует систему классификации файлов, основанную на именах файлов. По умолчанию она ориентирована на поиск в исходном коде, но вы можете указать ей искать разные типы, передав опцию --type
. --type может помочь поиск ВСЕХ файлов с помощью ack.
Если вы хотите ограничить только по расширению файла, вы можете использовать опцию grep --include:
grep -R --include="*.txt" "pattern" /path/to/dir/
Другой подход - это исключить файлы, которые не являются текстом, но он будет включать в себя файлы HTML и JS, который после обновления исключен с вариантом --exclude, например:
find /path/to/dir -type f -print | xargs file | grep text | cut -f1 -d: | xargs grep --exclude=\*.{js,html} "pattern"
Где, как уже упоминалось в комментарии, также вы можете использовать опцию --exclude-from = файл.