Buscar todos los archivos que contengan texto

Buscar todos los archivos que contengan texto

Con Busybox, ¿cómo se busca una expresión dentro de un grupo de archivos de forma recursiva a través de un grupo de directorios, pero solo se buscan archivos de texto?

No sabemos cuál será el sufijo del archivo; podría ser .sh, podría ser nada, podría ser otra cosa. Estaba considerando de alguna manera basar la búsqueda en la codificación, aunque tampoco estoy muy seguro de cuál sería la codificación.

Lo intenté busybox grep -rpero también busca en archivos binarios, lo que hace perder mucho tiempo.

Respuesta1

grepadmite la opción --binary-filesde tratar archivos binarios como binary, texto without-match. La última opción debería omitir los archivos binarios. Es equivalente a grep -I. Hice una prueba y parece que Busybox grepadmite -Iomitir archivos binarios.

grepno es "mágico" para determinar si un archivo es binario o de texto: simplemente verifica los primeros bytes para ver si parecen ser texto o no y asume lo mismo para el resto del archivo (según man grep).


Notas al margen: se podría emular esto, por ejemplo, comparando si head -1 myfileun archivo es igual a head -1 myfile | strings. Si fileestá disponible, es aún más dependiente, pero no está en Busybox y probablemente no esté en el sistema si se utiliza principalmente Busybox.

Respuesta2

¿Cuál es la diferencia entre un archivo binario con la estructura?

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

con los valores

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

¿Y un archivo de texto con el texto Foo?

Todo lo que es un archivo de texto es un archivo binario que se interpreta utilizando códigos de búsqueda especiales llamados codificaciones de caracteres (ASCII, UTF-8, etc.). Por lo tanto, no existe una manera fácil de distinguir los "archivos binarios" de los "archivos de texto".

Puede haber una manera de excluir archivos que tienen el bit de ejecución configurado, o solo buscar archivos con un tamaño de archivo menor (dudo que su archivo de texto tenga más de 1 MB), pero no tengo suficiente conocimiento sobre cómo filtrar los resultados de grep para da un ejemplo de cómo hacerlo.

información relacionada