Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm a linux newbie. I need to search for a string "teststring" in all *.java files coming under /home/user1/ (including subfolders). How can I do it in linux via shell command.

share|improve this question
There have been several questions regarding regex searching files in subdirectories from the command-line – RobotHumans Nov 28 '10 at 15:12
a quick search turned up this question:… not exactly what you are looking for, but instead of exec cp you could cat/grep whatever – RobotHumans Nov 28 '10 at 15:16
I can list the file having the extension with find /home/user1 -name *.java How to use grep on that? – darthvader Nov 28 '10 at 15:23
@aking1012 thanks for guiding. – darthvader Nov 28 '10 at 15:28
up vote 14 down vote accepted

The easiest way is to use GNU grep's features:

grep -r --include '*.java' teststring /home/user1

If you're ever on another unix variant that doesn't have GNU grep, here's a portable way:

find /home/user1 -name '*.java' -exec grep teststring {} +
share|improve this answer
nice didn't know about this grep feature – RobotHumans Nov 28 '10 at 15:52
If you're searching the current dir and all files it's grep -r teststring . – Chris Moschini Jun 25 '14 at 17:16

using ack you just type: cd /home/user01 && ack --java teststring

share|improve this answer
or ack --java teststring /home/user01 – Andy Lester Dec 1 '10 at 3:43

For this ack aka ack-grep its the killer app in my mind ;)

You can ack some_string /in/path_y to find some_string in path_y Or simpler ack some_other_string to find some_other_sting in current dir.

share|improve this answer

Found it. Posting it as it might help someone.

find /home/user01 -name *.java | xargs grep "teststring"

Please correct if there is any better way.

share|improve this answer
Generally, you should use -print0 and -0 when piping find into xargs to work properly with files that may have spaces or newlines in their names: find /home/user01 -name *.java -print0 | xargs -0 grep "teststring" – Dennis Williamson Nov 28 '10 at 15:38
grep -irl teststring *java
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .