2

С Busybox, как вы рекурсивно ищите выражение в группе файлов через группу каталогов, а просматриваете только текстовые файлы?

Мы не знаем, каким будет суффикс файла; это может быть .sh, это может быть ничто, это может быть что-то еще. Я думал о том, чтобы как-то основывать поиск на кодировке, хотя я не совсем уверен, какой будет кодировка.

Я попытался busybox grep -r но он также ищет в двоичных файлах, что тратит много времени.

2 ответа2

2

grep поддерживает параметр --binary-files для обработки двоичных файлов как binary , text или without-match . Последний вариант должен пропускать двоичные файлы. Это эквивалентно grep -I . Я сделал тест, и кажется, что grep Busybox поддерживает -I для пропуска двоичных файлов.

grep не является "волшебным" при определении, является ли файл двоичным или текстовым: он просто проверяет первые несколько байтов, чтобы увидеть, являются ли они текстовыми или нет, и предполагает то же самое для остальной части файла (согласно man grep).


Sidenotes: можно подражать этому, например, сравнивая, если head -1 myfile файла равен head -1 myfile | strings . Если file доступен, он еще более надежен, но его нет в Busybox и, скорее всего, нет в системе, если Busybox в основном используется.

0

В чем разница между двоичным файлом со структурой

struct MyBin
{
    byte a;
    byte b;
    byte c;
}

со значениями

myBin.a = 70;
myBin.b = 111;
myBin.c = 111;

А текстовый файл с текстом Foo?

Весь текстовый файл представляет собой двоичный файл, который вы интерпретируете с помощью специальных кодов поиска, называемых кодировками символов (ASCII, UTF-8, ect ...). Поэтому нет простого способа отличить "двоичные файлы" от "текстовых файлов".

Может быть способ исключить файлы с установленным битом выполнения или выполнять поиск только по размеру файла (я сомневаюсь, что ваш текстовый файл превышает 1 МБ), но у меня недостаточно знаний о том, как фильтровать результаты grep для приведи пример как это сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .