How can I grep recursively, but only in files with certain extensions?
I'm working on a script to grep
certain directories:
{ 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]
How can I limit results only to extensions .h
and .cpp
?
Just use the --include
parameter, like this:
grep -inr --include \*.h --include \*.cpp CP_Image ~/path[12345] | mailx -s GREP [email protected]
That should do what you want.
To take the explanation from HoldOffHunger's answer below:
-
grep
: command -
-r
: recursively -
-i
: ignore-case -
-n
: each output line is preceded by its relative line number in the file -
--include \*.cpp
: all *.cpp: C++ files (escape with \ just in case you have a directory with asterisks in the filenames) -
./
: Start at current directory.
Some of these answers seemed too syntax-heavy, or they produced issues on my Debian Server. This worked perfectly for me:
grep -r --include=\*.txt 'searchterm' ./
...or case-insensitive version...
grep -r -i --include=\*.txt 'searchterm' ./
grep
: command-r
: recursively-i
: ignore-case--include
: all *.txt: text files (escape with \ just in case you have a directory with asterisks in the filenames)'searchterm'
: What to search./
: Start at current directory.
Source: PHP Revolution: How to Grep files in Linux, but only certain file extensions?