HowTo: grep All Sub-directory For Files

How do I grep all sub directories? How can I use grep command through all sub-directories on Linux or Unix like operating systems? How do I use grep to find pattern including all subdirectories on OS X/BSD/Unix-like operating systems?

You can use grep command to search files for given words on a Linux or Unix-like system. The basic syntax is as follows:

grep 'word' file
grep 'word1 word2' file1 file2
grep [option] 'word1 word2' file1 file2

You can search all text files in the current directory with wild cards:

grep 'word-to-search' *

Search sub directories recursively using grep

Pass the -r option to grep command to search recursively through an entire directory tree. With this option one can search the current directory and and all levels of subdirectories by passing the -r or -R to the grep command. The syntax is:

grep -r 'word-to-search' *

OR

grep -R 'word-to-search' *

Examples

For example, the following would search all files in the current directory and in all of its subdirectories for every line containing the word ‘main()’:

grep -r 'main()' *

The following example would search for /etc/ and all of its subdirectories for every line containing the ip address ‘192.168.1.254’:

grep -r '192.168.1.254' /etc/

Other options

You can use the find command as follows:

find /dir/to/search -type f -iname "pattern" -print0 | xargs -I {} -0 grep --color 'word-to-search' "{}"

For example, search for an IP address ‘192.168.1.254’ in all *.conf files located in /usr:

## must run as root #
find /usr/ -type f -iname '*.conf' -print0 | xargs -I {} -0 grep -H --color '192.168.1.5' "{}"
Recommend readings

Posted by: SXI ADMIN

The author is the creator of SXI LLC and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.