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