10.04.2012

Поиск в консоли в текстовых документах по содержимому

Иногда нужно найти нужный файл по содержимому, созданный в текстовых процессорах MS Word, OpenOffice Writer, LibreOffice Writer. 
Команды locate, grep, find в отдельности не дадут результата, так как файлы, созданные в текстовых процессорах ими напрямую не могут быть прочитаны с декодированием.
Но выход есть.
Поиск по документам MS Word начиная с текущего каталога используя утилиту catdoc для чтения doc файлов
find . -name "*.doc" | while read i; do catdoc "$i" | grep -H --label="$i" -n "Искомая фраза"; done
или, используя утилиту antiword для чтения doc файлов
find . -name "*.doc" | while read i; do antiword "$i" | grep -H --label="$i" -n "Искомая фраза"; done
Поиск по документам OpenOffice Writer и LibreOffice Writer начиная с текущего каталога используя утилиту odt2txt для чтения odt файлов
find . -name "*.odt" | while read i; do odt2txt "$i" | grep -H --label="$i" -n "Искомая фраза"; done
Поиск по текстовым PDF файлам (не будет работать с файлами созданными из графических форматов, например отсканированные книни без текстового слоя):
find . -name '*.pdf' -exec pdftotext {} - \; | grep "Искомая фраза"
После работы однострочника выдается путь к файлу и номер строки с искомой фразой.
Прочитать документ можно так:
antiword "имя файла" | less
odt2txt "имя файла" | less
в less по "/" работает поиск.