find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}
это хорошее решение? для поиска TEXTSEARCH рекурсивно только в текстовых файлах
Вы можете использовать опции -r (рекурсивные) и -I (игнорировать двоичные) в grep:
-r
-I
grep
$ grep -rI "TEXTSEARCH" .
-I Обрабатывать двоичный файл, как если бы он не содержал совпадающих данных; это эквивалентно опции --binary-files=without-match. -r Рекурсивно читать все файлы в каждом каталоге; это эквивалентно опции -d recurse.
--binary-files=without-match
-d recurse
Другое, менее изящное решение, чем kevs, состоит в том, чтобы объединить команды -exec в find вместе без xargs и cut:
find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";"