Как я могу искать содержимое файлов PDF в каталоге / подкаталоге? Я ищу некоторые инструменты командной строки. Кажется, что grep
не может искать файлы PDF.
Как я могу искать содержимое файлов PDF в каталоге / подкаталоге? Я ищу некоторые инструменты командной строки. Кажется, что grep
не может искать файлы PDF.
Ответы:
Ваш дистрибутив должен предоставлять утилиту под названием pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
«-» необходимо для вывода pdftotext на стандартный вывод, а не на файлы. --with-filename
И --label=
опции будут ставить имя файла на выходе Grep. Необязательный --color
флаг хорош и говорит grep выводить, используя цвета на терминале.
(В Ubuntu pdftotext
предоставляется пакет xpdf-utils
или poppler-utils
.)
Этот метод, использующий pdftotext
и grep
, имеет преимущество перед тем, pdfgrep
если вы хотите использовать функции GNU, grep
которые pdfgrep
не поддерживают. Примечание : pdfgrep-1.3.x поддерживает -C
опцию для печати строки контекста.
grep
фильтрует напечатанные имена файлов.
pdfgrep
решение подходит для действительно быстрых и простых поисков, часто я хочу получить некоторый контекст, так как одна строка не будет достаточно полезной - поэтому, как я добавил в ответ: например, вы можете добавить опция -C5 перед «вашим шаблоном» включает 5 строк контекста в вывод - pdfgrep не поддерживает это
pdfgrep
бесполезен, он сообщает об огромном количестве мусора в файлах, которые он не может обработать. Ваше решение с другой стороны помогло. Поэтому, пожалуйста, не удаляйте его, даже через 3 года это все еще полезно!
Существует pdfgrep , который делает именно то, что предполагает его название.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Я использовал его для простых поисков, и он работал нормально.
(Есть пакеты в Debian, Ubuntu и Fedora.)
Начиная с версии 1.3.0 pdfgrep поддерживает рекурсивный поиск. Эта версия доступна в Ubuntu начиная с Ubuntu 12.10 (Quantal).
pdfgrep
теперь есть возможность рекурсии, в том числе -R
и по символическим
Recoll - фантастическое приложение для полнотекстового поиска с графическим интерфейсом для Unix / Linux, которое поддерживает десятки различных форматов, включая PDF. Он может даже передавать точный номер страницы и поисковый запрос в просмотрщик документов и, таким образом, позволяет переходить к результату прямо из его графического интерфейса.
Recoll также поставляется с жизнеспособным интерфейсом командной строки и интерфейсом веб-браузера .
recoll / xapian
в командной строке (без графического интерфейса)? Спасибо!
recoll
пользователя может содержать некоторые указатели, но предлагает довольно техническое и «не по теме» прочтение ...
pwd
ext: pdf 'neuro *' - переполнение стека сгребло галочки вокруг pwd.
Я сделал этот разрушительный маленький сценарий. Веселитесь с этим.
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
$filename.
вы пошли на это grep
.
Мне нравится ответ @ sjr, но я предпочитаю xargs vs -exec. Я нахожу Xargs более универсальным. Например, с помощью -P мы можем использовать преимущества нескольких процессоров, когда это имеет смысл.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
параллельной обработки. Обратите внимание, что ваш --label
параметр-аргумент будет в буквальном смысле {}
, потому что grep
команда больше не выполняется в контексте find
с exec
.
У меня была та же проблема, и поэтому я написал скрипт, который ищет строку во всех файлах pdf в указанной папке и печатает файлы PDF, которые соответствуют строке запроса.
Может быть, это будет полезно для вас.
Вы можете скачать его здесь
pdfgrep
решение или однострочная строка sjr, и у меня остался непрерывный процесс, использующий 100% потока ЦП, даже после того, как я Ctrl-C завершил его.
Если вы хотите увидеть имена файлов с pdftotext, используйте следующую команду:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
Существует еще одна утилита под названием ripgrep-all , которая основана на ripgrep .
Он может обрабатывать не только документы PDF, например документы Office и фильмы, и автор утверждает, что это быстрее, чем pdfgrep
.
Синтаксис команды для рекурсивного поиска в текущем каталоге, а второй ограничивается только файлами PDF:
rga 'pattern' .
rga --type pdf 'pattern' .
Существует общедоступный инструмент grep с открытым исходным кодом crgrep, который выполняет поиск в файлах PDF, а также в других ресурсах, таких как содержимое, вложенное в архивы, таблицы базы данных, метаданные изображений, зависимости файлов POM и веб-ресурсы, - и их комбинации, включая рекурсивный поиск.
Полное описание на вкладке Файлы в значительной степени охватывает то, что поддерживает инструмент.
Я разработал crgrep как инструмент с открытым исходным кодом.
Сначала преобразуйте все ваши PDF-файлы в текстовые файлы:
for file in *.pdf;do pdftotext "$file"; done
Тогда используйте grep
как обычно. Это особенно хорошо, так как это быстро, когда у вас есть несколько запросов и много файлов PDF.
ag
github.com/ggreer/the_silver_searcher . Способен анализировать у психоделиков Gb за микросекунды. Плоские файлы для жизни
Вам нужны некоторые инструменты, такие как pdf2text, чтобы сначала преобразовать ваш pdf в текстовый файл, а затем искать внутри текста. (Вы, вероятно, пропустите некоторую информацию или символы).
Если вы используете язык программирования, вероятно, для этой цели написаны библиотеки pdf. например, http://search.cpan.org/dist/CAM-PDF/ для Perl