Pesquisar todos os arquivos que contenham texto

2

Com o Busybox, como você procura por uma expressão dentro de um monte de arquivos recursivamente através de um monte de diretórios, mas apenas olha através de arquivos de texto?

Não sabemos qual será o sufixo do arquivo; poderia ser .sh, poderia ser nada, poderia ser outra coisa. Eu estava considerando de alguma forma basear a pesquisa na codificação, embora eu não tenha certeza do que seria a codificação.

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

    
por enthdegree 13.04.2012 / 07:13

2 respostas

2

grep suporta a opção --binary-files para tratar arquivos binários como binary , text ou without-match . A última opção deve pular arquivos binários. É equivalente a grep -I . Fiz um teste e parece que o grep do Busybox suporta -I para ignorar arquivos binários.

grep nã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 resto do arquivo (de acordo para man grep ).

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

    
por 13.04.2012 / 10:32
0

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 distinguir "Arquivos binários" de "Arquivos de texto".

Pode haver uma maneira de excluir arquivos que tenham o bit de execução ou apenas arquivos de pesquisa em um tamanho de arquivo (duvido que seu arquivo de texto tenha mais de 1 MB), mas não tenho conhecimento suficiente sobre como filtrar grep resulta para dar um exemplo de como fazer isso.

    
por 13.04.2012 / 08:00