Поиск всех файлов, содержащих текст

Поиск всех файлов, содержащих текст

Как с помощью Busybox выполнить рекурсивный поиск выражения в группе файлов по нескольким каталогам, но при этом просматривать только текстовые файлы?

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

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

решение1

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

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


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

решение2

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

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

с ценностями

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

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

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

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

Связанный контент