Given this example folder structure:

/folder1/file1.txt
/folder1/file2.djd
/folder2/file3.txt
/folder2/file2.fha

How do I do a recursive text search on all *.txt files with grep from "/"?

("grep -r <pattern> *.txt" fails when run from "/", since there are no .txt files in that folder.)

link|improve this question

75% accept rate
feedback

5 Answers

up vote 18 down vote accepted

My version of GNU Grep has a switch for this:

grep -R foo --include '*.txt' *

"--include=GLOB Search only files whose base name matches GLOB (using wildcard matching as described under --exclude)."

link|improve this answer
feedback

If you have a large number of files it would be useful to incorporate xargs into the command to avoid an 'Argument list too long' error.

find . -name '*.txt' -print | xargs grep <pattern>
link|improve this answer
4  
If there are spaces in any of the file or directory names, use this form: find . -name '*.txt' -print0 | xargs -0 grep <pattern> – Jason Luther May 19 '09 at 13:37
And of course there's the issue of filenames that start with -. – T.J. Crowder Feb 7 '11 at 12:08
feedback
find . -name '*.txt' -type f -exec grep <pattern> {} \;
link|improve this answer
you might want to use "find . -name '*.txt' -type f -exec grep <pattern> {} +" instead so that it rather behaves similiar the verision with from Mark Robinson - works only with GNU find to my knowledge – Server Horror Jun 10 '09 at 8:49
feedback

Mannis answer would fork a new grep-process for every textfile. If you have lots of textfiles there, you might consider grepping every file first and pick the .txt-files when thats done:

grep -r <pattern> * | grep \.txt:

That's more disk-intensive, but might be faster anyway.

link|improve this answer
feedback

You may want to take a look at ack at http://betterthangrep.com, which has facilities for selecting files to search by filetype.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.