Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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

How do I recursively generate a text file which has a list of all files on my server which contain a specific string anywhere in the files?

I know the following command can be used to replace a string recursively

find /var/www -type f -print0 | xargs -0 sed -i 's/old string/new string/g'

I do not want to replace the string, I just want a list of all files which contain the string.

share|improve this question
For a windows user I would have suggested to writes a batch file which saves the output to a file and put it in the scheduler . Try whatever is the linux substitute for this process – Shekhar Jan 18 '11 at 14:36
up vote 7 down vote accepted

Use grep instead of sed:

find /var/www -type f -print0 | xargs -0 grep -i 'old string'

From the way you phrase the question, it seems like you're not yet too familiar with grep. Read more about its options in its man page type: man grep at your command line.

update to answer comment -- try adding the -l option to show just file names. The -i makes the search case insensitive. The easy to use both is with a single dash: grep -il

share|improve this answer
This does not seem to give me just the paths/files containing the string I am looking for. For some reason, I am also getting the text from the files searched too. – oshirowanen Jan 18 '11 at 14:49
Added bit about -l – Doug Harris Jan 18 '11 at 15:49

You can also use grep alone without find:

grep -Rli 'old string' /var/www > list_of_files
share|improve this answer

You could try adding the -l flag to the command to only list the file names

find /var/www -type f -print0 | xargs -0 grep -li 'old string'
share|improve this answer

Try ack -- it's faster than grep and supports perl regex.

ack -la <pattern> /var/www

On some systems this package is called "ack" and sometimes its called "ack-grep".

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.