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.
Asked
Active
Viewed 7,028 times
25
-
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: http://superuser.com/questions/208271/find-document-files-and-copy-them-to-another-directory 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? – softwarematter Nov 28 '10 at 15:23
-
[find . -type f -print0 | xargs -0 grep -l "some string"](https://superuser.com/questions/614526/finding-files-which-contain-a-certain-string-using-find-1-and-grep-1) – Nick Dong Dec 08 '22 at 07:12
5 Answers
27
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 {} +
Gilles 'SO- stop being evil'
- 69,786
- 21
- 137
- 178
-
-
2If you're searching the current dir and all files it's `grep -r teststring .` – Chris Moschini Jun 25 '14 at 17:16
5
3
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.
softwarematter
- 3,949
- 21
- 63
- 88
-
3Generally, 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