Posso modificar este comando de pesquisa para ignorar arquivos binários?

0

Eu tenho este comando que é gerado por um pequeno script que eu escrevi chamado "scan", que eu uso o tempo todo para procurar por conteúdo específico (nomes de variáveis, etc) dentro de arquivos de texto:

find "." \
  | awk '{print "\""$0"\""}' \
  | xargs grep -n --exclude-dir=.git "<iframe" \
  | awk 'length($0) < 1000'

aqui estou usando para procurar tags de início de iframe, por exemplo.

A última linha diz para considerar apenas linhas com menos de 1000 caracteres, já que arquivos com linhas longas são geralmente binários ou javascript concatenado, o que geralmente não me interessa. (Eu posso desligar essa condição com um opção se eu quiser ver linhas longas).

Existe uma maneira mais agradável de modificar isso para excluir arquivos binários? Ou, seria melhor listar explicitamente os tipos de arquivos que eu quero ignorar, como .mp4, .mp3, .swf, .jpg, .png etc etc?

    
por Max Williams 05.07.2017 / 11:42

1 resposta

1

man grep me diz:

--binary-files=TYPE

If the first few bytes of a file indicate that the file contains binary data, assume that the file is of type
TYPE. By default, TYPE is binary, and grep normally outputs either a one-line message saying that a binary file matches, or no message if there is no match. If TYPE is without-match, grep assumes that a >binary file does not match; this is equivalent to the -I option. If TYPE is text, grep processes a binary file as if it were text; this is equivalent to the -a option. Warning: grep --binary-files=text might output binary garbage, which can have nasty side effects if the output is a terminal and if the terminal driver interprets some of it as commands.

, então parece que -I pode funcionar para você? (Lembre-se, é totalmente possível que grep seja confundido por qualquer caractere não-ASCII no início do arquivo.)

Ah, e eu acho que você realmente não precisa do primeiro gawk , find … -exec deve trabalhar com isso, possivelmente com a opção -0 para finalizar os nomes dos arquivos encontrados com um byte nulo.

    
por 05.07.2017 / 11:59