Gostaria de grep todos os arquivos, exceto alguns tipos de arquivo?


36

Como greparquivos recursivamente dentro de uma determinada pasta, exceto alguns tipos de arquivo?

Por exemplo, estou procurando uma string na minha pasta da área de trabalho, mas ela acaba pesquisando dentro de arquivos sql e gera seqüências serializadas.

Portanto, neste caso, eu gostaria grepda pasta da área de trabalho, exceto arquivos sql.

De preferência, estou procurando uma linha, se possível.


5
Esteja ciente de que o Linux, o Unix e o unix-a-likes não têm realmente "tipos de arquivos" da maneira que você deseja. É apenas por convenção que os nomes de arquivos têm um sufixo ".c" ou ".txt" ou ".sql" - esses sufixos nem são "extensões" no estilo Windows, muito menos indicadores de que o código-fonte SQL ou de texto ou C vive dentro dos arquivos.
Bruce Ediger,

Respostas:



8

Isso fará isso por você e excluirá os arquivos .sql e .txt:

find /some/dir -type f ! -name '*\.sql' ! -name '*.txt' -print0 | xargs -0 grep 'foobar'

No entanto, parece que ack seria uma ferramenta muito melhor para o que você está tentando fazer:

ack -a --nosql 'foobar' /some/dir

Desculpe, eu não vi a parte 'ack' e a coloquei na minha resposta, que agora está excluída.
Chance

Outro usuário observa que ack - a --nobinaryinclui arquivos binários
Michael Mrozek

A barra invertida no padrão de nome de arquivo não é necessária.
Kusalananda
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.