Назад | Перейти на главную страницу

Как заставить grep (не GNU-) игнорировать двоичные файлы?

Эй, я здесь на сервере HP-UX. При рекурсивном поиске дерева каталогов у меня возникают проблемы, когда дерево также содержит двоичные файлы: grep рассматривает их как текстовые файлы и отображает очень длинные строки, содержащие множество непечатаемых символов. Это не только затрудняет сканирование вывода, но также часто делает мой терминал непригодным для использования (и записывает забавные строки в его заголовок).

GNU-grep имеет возможность --binary-file= что могло бы помочь (и он все равно не печатает соответствующую строку для двоичных файлов), но у меня нет доступных инструментов GNU.

Есть ли способ имитировать поведение GNU-grep или игнорировать файлы, которые выглядят как двоичные?

Кстати. если есть простой способ сделать это в perl, это тоже будет хорошо.

Основываясь на предыдущем ответе, вы можете использовать команду «file» для идентификации текстовых файлов, а затем ограничить использование grep только этими файлами. Например:

  find dir -type f -print |
    xargs file |
    grep text |
    cut -f1 -d: |
    xargs grep "expression"

Это:

  • Найдите все файлы в каталоге "dir"
  • Передайте их как аргументы в "файл"
  • Найдите вывод из "файла", содержащий слово "текст"
  • Вырежьте первое поле, разделенное двоеточиями, и используйте его как имя файла
  • Найдите эти файлы с помощью grep.

Это не удастся, если имена файлов содержат пробелы или двоеточия, но в противном случае будет делать то, что вы хотите.

Может быть способ лучше, но, возможно, передать все файлы в цикл оболочки и сделать что-то вроде следующего с помощью команды file:

if file "$i" | grep text; then
  ...
fi

...?