Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

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 –  Shakehar Jan 18 '11 at 14:36
add comment

4 Answers

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
1  
Added bit about -l –  Doug Harris Jan 18 '11 at 15:49
add comment

You can also use grep alone without find:

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

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
add comment

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
add comment

Your Answer

 
discard

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.