How do I recursively search all text files for a string such as foo under UNIX / Linux / *BSD / Mac OS X shell prompt?
You can use grep command or find command as follows.
grep command: Recursively Search All Files For A String
cd /path/to/dir
grep -r "word" .
grep -r "string" .
Ignore case distinctions:
grep -ri "word" .
To display print only the filenames with GNU grep, enter:
grep -r -l "foo" .
You can also specify directory name:
grep -r -l "foo" /path/to/dir/*.c
find command: Recursively Search All Files For A String
find command is recommend because of speed and ability to deal with filenames that contain spaces.
cd /path/to/dirOlder UNIX version should use xargs to speed up things:
find . -type f -exec grep -l "word" {} +
find . -type f -exec grep -l "seting" {} +
find . -type f -exec grep -l "foo" {} +
find /path/to/dir -type f | xargs grep -l "foo"
It is good idea to pass -print0 option to find command that it can deal with filenames that contain spaces or other metacharacters:
find /path/to/dir -type f -print0 | xargs -0 grep -l "foo"
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- My 10 UNIX Command Line Mistakes
- Linux: 20 Iptables Examples For New SysAdmins

- 25 PHP Security Best Practices For Sys Admins
- The Novice Guide To Buying A Linux Laptop
- 10 Greatest Open Source Software Of 2009
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
Facebook it - Tweet it - Print it -


{ 5 comments… read them below or add one }
That is fantastic, a command that says it does exactly what I’m looking for.
Unfortunately, when I copy and paste the example to recursivle search for files containing a string:
find . -type f -exec grep -l “word” {} +
in to my linux session I get a set of error message lines which all say this:
find: grep: Argument list too long
To fix this, simply add the following to hide any such error messages by oplacing them in the trash:
find . -type f -exec grep -l “word” {} + 2>>/dev/null
Perfect, had to search a joomla install for all occurrences of a string, used grep as i remember if from my uni days, thanks for the post.
Pete
Thank you this was very useful for debugging!
This tutorial is very useful .
it won’t work if you are trying to search for:
grep -r “test!!!” .
you need to use the single quotations. like:
grep -r ‘test!!!’ .