HowTo: grep All Sub-directory For Files

last updated in Categories , , , , ,

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' *


grep -R 'word-to-search' *


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 ‘’:

grep -r '' /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 ‘’ in all *.conf files located in /usr:

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


Posted by: Vivek Gite

The author is the creator of nixCraft 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.

2 comment

  1. First example is incorrect and everything with * as a current directory. “grep -r ‘main()’ *” wouldn’t search all files in the current directory and in all of its subdirectories for every line, containing the word ‘main()’, but would search in all visible files and visible directories and their subdirectories in the current directory, it would ignore files/dirs starting with a dot (invisible files). To do what you want in the example, you should use dot ‘.’ instead of the asterisk:

    grep -r ‘main()’ .

  2. Hi,

    How do I search a keyword in all jar files inside an directory?
    Please do let me know. Thanks in advance.

    Still, have a question? Get help on our forum!