Me gustaría grep todos los archivos excepto algunos tipos de archivos?

36

¿Cómo recursivamente greparchivos dentro de una carpeta dada, excepto un par de tipos de archivos?

Por ejemplo, estoy buscando una cadena dentro de mi carpeta de espacio de trabajo pero termina buscando dentro de archivos sql y genera cadenas serializadas.

Entonces, en este caso, me gustaría grepla carpeta del espacio de trabajo, excepto los archivos sql.

Preferiblemente estoy buscando una línea si es posible.

chrisjlee
fuente
55
Tenga en cuenta que Linux y Unix y unix-a-likes realmente no tienen "tipos de archivos" en la forma en que parece querer. Es solo por convención que los nombres de archivo tienen un sufijo ".c" o ".txt" o ".sql"; esos sufijos ni siquiera son "extensiones" de estilo Windows, y mucho menos indicadores de que el código fuente de SQL o texto o C dentro de los archivos.
Bruce Ediger

Respuestas:

8

Esto lo hará por usted y excluirá los archivos .sql y .txt:

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

Sin embargo, parece que ack sería una herramienta mucho mejor para lo que estás tratando de hacer:

ack -a --nosql 'foobar' /some/dir
Mark McKinstry
fuente
Lo siento, no vi la parte 'ack' y la puse en mi respuesta, que ahora está eliminada.
Oportunidad
Otro usuario señala que ack - a --nobinaryincluye archivos binarios
Michael Mrozek
La barra invertida en el patrón de nombre de archivo no es necesaria.
Kusalananda