48

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.)

7 Answers 7

64

My version of GNU Grep has a switch for this:

grep -R --include='*.txt' $Pattern 

Described as follows:

--include=GLOB 

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

0
20

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> 
3
  • 6
    If there are spaces in any of the file or directory names, use this form: find . -name '*.txt' -print0 | xargs -0 grep <pattern> Commented May 19, 2009 at 13:37
  • 2
    And of course there's the issue of filenames that start with -. Commented Feb 7, 2011 at 12:08
  • grep is faster of find. Commented Aug 16, 2018 at 5:18
2

you might be able to make use of your zsh's EXTENDED_GLOB option (docs)

grep <pattern> **/*.txt 
1
  • 1
    Only if OP is using zsh, but interesting nonetheless. Commented May 14, 2016 at 13:01
1
find . -name '*.txt' -type f -exec grep <pattern> {} \; 
1
  • 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 Commented Jun 10, 2009 at 8:49
1

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

0

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.

0

It's 2019 and there's no way I would still use grep for recursive text searching.

IMHO todays answers should include ripgrep:

rg <pattern> -ttxt 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.