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.

chrisjlee
fonte
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
Mark McKinstry
fonte
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