Эй, я здесь на сервере 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"
Это:
Это не удастся, если имена файлов содержат пробелы или двоеточия, но в противном случае будет делать то, что вы хотите.
Может быть способ лучше, но, возможно, передать все файлы в цикл оболочки и сделать что-то вроде следующего с помощью команды file:
if file "$i" | grep text; then
...
fi
...?