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.

I'm using bash under Ubuntu.

Currently this works well for the current directory:

catdoc *.doc | grep "specificword" 

But I have lots of subdirectories with .doc files.

How can I search for, let's say, "specificword" recursively?

share|improve this question
    
and maybe also return the name of the file that contains the word? –  Tom Aug 31 '11 at 12:02

3 Answers 3

up vote 3 down vote accepted

Use find for recursive searches:

find -name '*.doc' -exec catdoc {} + | grep "specificword"

This will also output the file name:

find -name '*.doc' | while read -r file; do
    catdoc "$file" | grep -H --label="$file" "specificword"
done

(Normally I would use find ... -print0 | while read -rd "" file, but there's maybe a .0001% chance that it would be necessary, so I stopped caring.)

share|improve this answer
    
Thanks grawity, the first suggestion works quit well. Is there a way to print the file name? it's only printing the phrase in which it has been found. –  Tom Aug 31 '11 at 12:09
    
@user: Try the second suggestion, which, by the way, is titled "This will also output the file name". –  grawity Aug 31 '11 at 12:10
    
Oh sweet :) thanks –  Tom Aug 31 '11 at 12:11
    
can probably simplify a bit: find -name \*.doc -exec sh -c "catdoc '{}' | grep -q 'specificword' && echo {}" \; –  glenn jackman Aug 31 '11 at 14:20

You might want to look at recoll which is a full-text search tool for Linux and Unix systems supporting many different document formats. However, it is index-based, i.e., it has to index the documents you want to search in before the actual search. (Thanks to pabouk for pointing this out).

There is a GUI and a command line, too.

See the documentation for further infos.

share|improve this answer
    
Maybe it is worth to note that Recoll provides indexed search. First it has to index the documents then it can search through the indexes. –  pabouk Dec 17 '13 at 8:25

Grep should find binary matches with:

find /path/to/dir -name '*.doc' exec grep -l "specificword" {} \;
share|improve this answer

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.