Grep только текстовые файлы

find . -type f | xargs file | grep text | cut -d':' -f1 | xargs grep -l "TEXTSEARCH" {}

Это хорошее решение? для поиска TEXTSEARCH рекурсивно только в текстовых файлах

Ответ 1

Вы можете использовать опции -r (рекурсивный) и -I (игнорировать двоичные) в grep:

$ grep -rI "TEXTSEARCH" .
  • -I Обработать двоичный файл, как если бы он не содержал соответствующие данные; это эквивалентно опции --binary-files=without-match.
  • -r Чтение всех файлов в каждом каталоге, рекурсивно; это эквивалентно опции -d recurse.

Ответ 2

Другим, менее элегантным решением, чем kevs, является цепочка -exec команды в поиске вместе без xargs и cut:

find . -type f -exec bash -c "file -bi {} | grep -q text" \; -exec grep TEXTSEARCH {} ";"