The grep command supports recursive file pattern option as follows:
grep -R "pattern" /path/to/dir
To limit your search for *.txt, try passing the --include option to grep command
Syntax and examples for --include option
The syntax is:
grep -R --include=GLOB "pattern" /path/to/dir
grep -R --include="*.txt" "pattern" /path/to/dir
grep -R --include="*.txt" "foo" ~/projects/
You can include files whose base name matches GLOB using wildcard matching. A file-name glob can use *, ?, and […] as wildcards, and \ to quote a wildcard or backslash character literally. You can ignore case distinctions in both the PATTERN and the input files with -i optoon i.e. case-insensitive search. In this following example, search for all *.py, *.pl, and *.sh files for “main” word in my /raid6/projects/sysmanagement/ directory:
grep --color -Ri --include="*.py" --include="*.sh" --include="*.pl" "main" /raid6/projects/sysmanagement/
Or
grep --color -Ri --include=*.{py,pl,sh} "main" /raid6/projects/sysmanagement/
OR a safer option would be (note –color removed and * replaced with \*):
grep -Ri --include=\*.{py,pl,sh} "main" /raid6/projects/sysmanagement/
The --include option provides you the following advantages:
- Speed up the search.
- Only match given file pattern.
- Do not search for binary files such as compiled files or image files. In other words only look for *.txt or *.py file patterns and so on.