¿Cómo puedo hacer grep de forma recursiva, pero sólo en archivos con determinadas extensiones?
Estoy trabajando en un script para grep
ciertos directorios:
{ grep -r -i CP_Image ~/path1/;
grep -r -i CP_Image ~/path2/;
grep -r -i CP_Image ~/path3/;
grep -r -i CP_Image ~/path4/;
grep -r -i CP_Image ~/path5/; }
| mailx -s GREP [email protected]
¿Cómo puedo limitar los resultados solo a extensiones .h
y .cpp
?
Simplemente use el --include
parámetro, así:
grep -inr --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]
Eso debería hacer lo que quieras.
Para tomar la explicación de la respuesta de HoldOffHunger a continuación:
grep
: dominio-r
: recursivamente-i
: ignorar caso-n
: cada línea de salida está precedida por su número de línea relativo en el archivo--include \*.cpp
: todos los archivos *.cpp: C++ (escape con \ en caso de que tenga un directorio con asteriscos en los nombres de los archivos)./
: Comienza en el directorio actual.
Algunas de estas respuestas parecían tener demasiada sintaxis o produjeron problemas en mi servidor Debian. Esto funcionó perfectamente para mí:
grep -r --include=\*.txt 'searchterm' ./
...o versión que no distingue entre mayúsculas y minúsculas...
grep -r -i --include=\*.txt 'searchterm' ./
grep
: dominio-r
: recursivamente-i
: ignorar caso--include
: todos *.txt: archivos de texto (escape con \ en caso de que tenga un directorio con asteriscos en los nombres de los archivos)'searchterm'
: Qué buscar./
: Comienza en el directorio actual.
Fuente: PHP Revolution: ¿Cómo grep archivos en Linux, pero solo ciertas extensiones de archivo?