Pesquise todos os arquivos que contêm texto

Pesquise todos os arquivos que contêm texto

Com o Busybox, como você pesquisa uma expressão em vários arquivos recursivamente em vários diretórios, mas apenas procura em arquivos de texto?

Não sabemos qual será o sufixo do arquivo; poderia ser .sh, poderia ser nada, poderia ser outra coisa. Eu estava pensando em basear a pesquisa na codificação, embora também não tenha certeza de qual seria a codificação.

Eu tentei busybox grep -r, mas ele também pesquisa arquivos binários, o que desperdiça muito tempo.

Responder1

grepsuporta a opção --binary-filesde tratar arquivos binários como binary, textou without-match. A última opção deve pular os arquivos binários. É equivalente a grep -I. Fiz um teste e parece que o Busybox grepsuporta -Ipular arquivos binários.

grepnão é "mágico" para determinar se um arquivo é binário ou texto: ele simplesmente verifica os primeiros bytes para ver se eles parecem ser texto ou não e assume o mesmo para o restante do arquivo (de acordo com man grep).


Notas laterais: pode-se emular isso, por exemplo, comparando se head -1 myfilede um arquivo é igual a head -1 myfile | strings. Se fileestiver disponível, é ainda mais confiável, mas não está no Busybox e provavelmente não está no sistema se o Busybox for usado principalmente.

Responder2

Qual é a diferença entre um arquivo binário com a estrutura

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

com os valores

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

E um arquivo de texto com o texto Foo?

Tudo o que um arquivo de texto é é um arquivo binário que você interpreta usando códigos de pesquisa especiais chamados codificações de caracteres (ASCII, UTF-8, ect...). Portanto, não há uma maneira fácil de diferenciar "Arquivos Binários" de "Arquivos de Texto".

Pode haver uma maneira de excluir arquivos que tenham o bit de execução definido ou apenas pesquisar arquivos com tamanho de arquivo (duvido que seu arquivo de texto tenha mais de 1 MB), mas não tenho conhecimento suficiente sobre como filtrar os resultados do grep para dê um exemplo de como fazer.

informação relacionada