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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.