В данной статье я расскажу о поиске нужного слова или фразы в документах .doc, .odt и .pdf. Команды поиска locate, grep и find сами по себе не дадут положительного результата, потому что файлы, которые создавались в текстовых процессорах, они напрямую не смогут прочитать с декодированием.Для этого нам понадобятся следующие утилиты — catdoc, antiword, odt2txt, pdftotext и grep. Так как Grep идет по умолчанию в системе, то установим все недостающие команды одной командой в Терминале:
sudo apt-get update && sudo apt-get install catdoc antiword odt2txt poppler-utils
Ну а теперь по-порядку.
Для более быстрого поиска желательно зайти в Терминале в каталог с файлами, которые нужно найти, хотя бы приблизительно. Например файлы, которые мы будем искать, находятся в каталоге Документы. Тогда чтобы зайти в данный каталог, выполним команду:
cd ~/Документы
Ваш путь может быть другой. Теперь для поиска файлов .doc с искомой фразой нужно выполнить команду в Терминале:
find . -name "*.doc" | while read i; do catdoc "$i" | grep -H --label="$i" -n "Фраза поиска"; done
Также можно произвести поиск в файлах .doc утилитой antiword. Для этого выполняем команду:
find . -name "*.doc" | while read i; do antiword "$i" | grep -H --label="$i" -n "Фраза поиска"; done
Для поиска в файлах .odt (Libre Office, Open Office) выполним команду:
find . -name "*.odt" | while read i; do odt2txt "$i" | grep -H --label="$i" -n "Фраза поиска"; done
Для поиска по .pdf документам нужно учесть один момент. Файлы должны иметь текстовый слой, т.е. текст в этих файлах вы сможете выделить, скопировать. Если PDF файлы создавались из графических форматов (png, jpg и т.д.), то в таких документах поиск будет неудачным. Итак, для поиска в .pdf файлах выполним команду:
find . -name '*.pdf' -exec pdftotext {} - \; | grep "Фраза поиска"
Красно дякую!