Иногда нужно найти нужный файл по содержимому, созданный в текстовых
процессорах 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 по "/" работает поиск.
Источник:http://surrender-zen-way.blogspot.com/2012/04/blog-post.html
|