Find all files with specific extensions that contains a string

21,370

Solution 1

You can do it with grep only (without using find):

grep --include=\*.{xml,py} -Rl ./ -e "Jason"

And to exclude .po:

grep --exclude=*.po --include=\*.{xml,py} -Rl ./ -e "Jason"

Solution 2

Try the following command. It will search only in the .xml and .py files for your name:

find . -type f \( -iname \*.xml -o -iname \*.py \) | xargs grep "Jason"

Hope this helps!

Solution 3

This can be done with combining find and grep. Here is a small demo - I have test directory with 6 txt and rtf files, two of which contain string "Jason".

CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +                                        
./foo1.txt:Jason
./bar1.txt:Jason

CURRENT DIR:[/home/xieerqi/testdir]
$ ls                                                                                                                       
bar1.rtf  bar1.txt  bar2.rtf  bar2.txt  foo1.rtf  foo1.txt  foo2.rtf  foo2.txt

CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +                                        
./foo1.txt:Jason
./bar1.txt:Jason

We find all the files with txt and rtf extensions here and give them all as parameters to grep. The . means search in current directory, but you could specify another path and find will descend into that directory and subdirectories, to search recursively.

Replacing extensions with yours, the final answer is

find . -type f \( -iname "*.xml" -o -iname "*.py" \) -exec grep -iR 'jason' {} + 
Share:
21,370

Related videos on Youtube

Jonathan Solorzano
Author by

Jonathan Solorzano

Updated on September 18, 2022

Comments

  • Jonathan Solorzano
    Jonathan Solorzano over 1 year

    I'd like to know how could I find all files whose extension can be .xml and .py that contain the string "Jason" under a path "./" recursively?

    Or how could I exclude .po from the search?

  • Jonathan Solorzano
    Jonathan Solorzano over 8 years
    Hmm, i run the first line and it throws everything that contains py (all filers called py) and also didn't exclude .po
  • Sergiy Kolodyazhnyy
    Sergiy Kolodyazhnyy over 8 years
    Beaten me by a second :) I'm using -exec though
  • Terrance
    Terrance over 8 years
    @Serg LOL. I do like your answer by the way! +1
  • Terrance
    Terrance over 8 years
    Simple, to the point. Works well. Might I suggest error output suppression for files it can't read through? +1
  • nobody
    nobody over 8 years
    I would not do this because it searches in all files and that can take a long time. Why looking in files you know you do not want. Grep should be limited to search only in .xml and .py files.
  • Terrance
    Terrance over 8 years
    I like it Serg. =) It runs quickly on my system as well. Results were returned in a few seconds.