I’m trying to find a way to scan my entire Linux system for all files containing a specific string of text. Just to clarify, I’m looking for text within the file, not in the file name.

grep -rnw ‘/path/to/somewhere/’ -e “pattern”

-r or -R is recursive, -n is line number and -w stands match the whole word. -l (lower-case L) can be added to just give the file name of matching files.

Along with these, –exclude or –include parameter could be used for efficient searching. Something like below:

grep –include=\*.{c,h} -rnw ‘/path/to/somewhere/’ -e “pattern”

This will only search through the files which have .c or .h extensions. Similarly a sample use of –exclude:

grep –exclude=*.o -rnw ‘/path/to/somewhere/’ -e “pattern”

Above will exclude searching all the files ending with .o extension. Just like exclude file it’s possible to exclude/include directories through –exclude-dir and –include-dir parameter; for example, the following shows how to integrate –exclude-dir:

grep –exclude-dir={dir1,dir2,*.dst} -rnw ‘/path/to/somewhere/’ -e “pattern”

This works very well for me, to achieve almost the same purpose like yours.

For more options :

man grep