Как я могу искать содержимое файлов PDF в каталоге / подкаталоге? Я ищу некоторые инструменты командной строки. Кажется, что grepне может искать файлы PDF.
«-» необходимо для вывода pdftotext на стандартный вывод, а не на файлы. --with-filenameИ --label=опции будут ставить имя файла на выходе Grep. Необязательный --colorфлаг хорош и говорит grep выводить, используя цвета на терминале.
(В Ubuntu pdftotextпредоставляется пакет xpdf-utilsили poppler-utils.)
Этот метод, использующий pdftotextи grep, имеет преимущество перед тем, pdfgrepесли вы хотите использовать функции GNU, grepкоторые pdfgrepне поддерживают. Примечание : pdfgrep-1.3.x поддерживает -Cопцию для печати строки контекста.
@Kurt Pfeifle Правка "(Edit by -kp-)", которую вы сделали, не работает, так как grepфильтрует напечатанные имена файлов.
Рафаэль Аренс
@ sjr нет, хотя pdfgrepрешение подходит для действительно быстрых и простых поисков, часто я хочу получить некоторый контекст, так как одна строка не будет достаточно полезной - поэтому, как я добавил в ответ: например, вы можете добавить опция -C5 перед «вашим шаблоном» включает 5 строк контекста в вывод - pdfgrep не поддерживает это
Colin D Bennett
о, это круто, рад знать, что в этом есть свои преимущества, хотя для большинства людей это гораздо менее очевидно, чем он занимается
sjr
2
@sjr Просто для справки: я использую Ubuntu 12.10 и pdfgrepбесполезен, он сообщает об огромном количестве мусора в файлах, которые он не может обработать. Ваше решение с другой стороны помогло. Поэтому, пожалуйста, не удаляйте его, даже через 3 года это все еще полезно!
Али
Я смог использовать его и в cygwin, хотя для того, чтобы сделать его функцией с параметром, мне пришлось сделать your_pattern '$ 1'
Koshmaar
215
Существует pdfgrep , который делает именно то, что предполагает его название.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Я использовал его для простых поисков, и он работал нормально.
(Есть пакеты в Debian, Ubuntu и Fedora.)
Начиная с версии 1.3.0 pdfgrep поддерживает рекурсивный поиск. Эта версия доступна в Ubuntu начиная с Ubuntu 12.10 (Quantal).
У @pavon pdfgrepтеперь есть возможность рекурсии, в том числе -Rи по символическим
ссылкам
30
Recoll - фантастическое приложение для полнотекстового поиска с графическим интерфейсом для Unix / Linux, которое поддерживает десятки различных форматов, включая PDF. Он может даже передавать точный номер страницы и поисковый запрос в просмотрщик документов и, таким образом, позволяет переходить к результату прямо из его графического интерфейса.
Recoll также поставляется с жизнеспособным интерфейсом командной строки и интерфейсом веб-браузера .
@Glutanimate Было бы полезно (и мне, и, возможно, другим) также, если бы вы могли добавить пример, относящийся к исходному вопросу (инструмент командной строки для поиска нескольких PDF-файлов): я также хотел бы посмотреть, как выполнять поиск по шаблону и как искать текущий каталог , включая все подкаталоги . Как это будет выглядеть recoll / xapianв командной строке (без графического интерфейса)? Спасибо!
сумасшедший о изящном
@ LeszekŻarna Возможно, вы могли бы опубликовать пример, который вы тестировали?
Сумасшедший о хорошей
Руководство recollпользователя может содержать некоторые указатели, но предлагает довольно техническое и «не по теме» прочтение ...
чокнутый про natty
1
@nutty: recoll -t -q dir: pwdext: pdf 'neuro *' - переполнение стека сгребло галочки вокруг pwd.
Медок
13
Моя актуальная версия pdfgrep (1.3.0) позволяет следующее:
+1. Но вместо того, чтобы $filename.вы пошли на это grep.
Рафаэль Аренс
3
Мне нравится ответ @ sjr, но я предпочитаю xargs vs -exec. Я нахожу Xargs более универсальным. Например, с помощью -P мы можем использовать преимущества нескольких процессоров, когда это имеет смысл.
Интересный момент о возможности xargsпараллельной обработки. Обратите внимание, что ваш --labelпараметр-аргумент будет в буквальном смысле{} , потому что grepкоманда больше не выполняется в контексте findс exec.
mklement0
2
У меня была та же проблема, и поэтому я написал скрипт, который ищет строку во всех файлах pdf в указанной папке и печатает файлы PDF, которые соответствуют строке запроса.
может быть полезно поставить скрипт в комментарии?
Baxx
Я попробовал ваш сценарий, и он оказался намного медленнее, чем pdfgrepрешение или однострочная строка sjr, и у меня остался непрерывный процесс, использующий 100% потока ЦП, даже после того, как я Ctrl-C завершил его.
Джейсон
2
Если вы хотите увидеть имена файлов с pdftotext, используйте следующую команду:
Существует общедоступный инструмент grep с открытым исходным кодом crgrep, который выполняет поиск в файлах PDF, а также в других ресурсах, таких как содержимое, вложенное в архивы, таблицы базы данных, метаданные изображений, зависимости файлов POM и веб-ресурсы, - и их комбинации, включая рекурсивный поиск.
Полное описание на вкладке Файлы в значительной степени охватывает то, что поддерживает инструмент.
Я разработал crgrep как инструмент с открытым исходным кодом.
Крейг - есть ли у вас связь с этим проектом? Если это так, вы должны указать это в своем ответе. Я говорю это, потому что вы только что опубликовали практически идентичный ответ на два других старых вопроса ...
Стивен С.
Обновленный пост, чтобы уточнить, что я являюсь автором crgrep
Крейг
1
Сначала преобразуйте все ваши PDF-файлы в текстовые файлы:
for file in *.pdf;do pdftotext "$file"; done
Тогда используйте grepкак обычно. Это особенно хорошо, так как это быстро, когда у вас есть несколько запросов и много файлов PDF.
Это, когда сделано в комбинации с aggithub.com/ggreer/the_silver_searcher . Способен анализировать у психоделиков Gb за микросекунды. Плоские файлы для жизни
NVRM
0
Вам нужны некоторые инструменты, такие как pdf2text, чтобы сначала преобразовать ваш pdf в текстовый файл, а затем искать внутри текста. (Вы, вероятно, пропустите некоторую информацию или символы).
Если вы используете язык программирования, вероятно, для этой цели написаны библиотеки pdf. например, http://search.cpan.org/dist/CAM-PDF/ для Perl
Ответы:
Ваш дистрибутив должен предоставлять утилиту под названием
pdftotext
:«-» необходимо для вывода 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 , который делает именно то, что предполагает его название.
Я использовал его для простых поисков, и он работал нормально.
(Есть пакеты в 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.Моя актуальная версия pdfgrep (1.3.0) позволяет следующее:
При выполнении
pdfgrep --help
:Это хорошо работает на моем Ubuntu.
источник
Я сделал этот разрушительный маленький сценарий. Веселитесь с этим.
источник
$filename.
вы пошли на этоgrep
.Мне нравится ответ @ sjr, но я предпочитаю xargs vs -exec. Я нахожу Xargs более универсальным. Например, с помощью -P мы можем использовать преимущества нескольких процессоров, когда это имеет смысл.
источник
xargs
параллельной обработки. Обратите внимание, что ваш--label
параметр-аргумент будет в буквальном смысле{}
, потому чтоgrep
команда больше не выполняется в контекстеfind
сexec
.У меня была та же проблема, и поэтому я написал скрипт, который ищет строку во всех файлах pdf в указанной папке и печатает файлы PDF, которые соответствуют строке запроса.
Может быть, это будет полезно для вас.
Вы можете скачать его здесь
источник
pdfgrep
решение или однострочная строка sjr, и у меня остался непрерывный процесс, использующий 100% потока ЦП, даже после того, как я Ctrl-C завершил его.Если вы хотите увидеть имена файлов с pdftotext, используйте следующую команду:
источник
Существует еще одна утилита под названием ripgrep-all , которая основана на ripgrep .
Он может обрабатывать не только документы PDF, например документы Office и фильмы, и автор утверждает, что это быстрее, чем
pdfgrep
.Синтаксис команды для рекурсивного поиска в текущем каталоге, а второй ограничивается только файлами PDF:
источник
Существует общедоступный инструмент grep с открытым исходным кодом crgrep, который выполняет поиск в файлах PDF, а также в других ресурсах, таких как содержимое, вложенное в архивы, таблицы базы данных, метаданные изображений, зависимости файлов POM и веб-ресурсы, - и их комбинации, включая рекурсивный поиск.
Полное описание на вкладке Файлы в значительной степени охватывает то, что поддерживает инструмент.
Я разработал crgrep как инструмент с открытым исходным кодом.
источник
Сначала преобразуйте все ваши PDF-файлы в текстовые файлы:
Тогда используйте
grep
как обычно. Это особенно хорошо, так как это быстро, когда у вас есть несколько запросов и много файлов PDF.источник
ag
github.com/ggreer/the_silver_searcher . Способен анализировать у психоделиков Gb за микросекунды. Плоские файлы для жизниВам нужны некоторые инструменты, такие как pdf2text, чтобы сначала преобразовать ваш pdf в текстовый файл, а затем искать внутри текста. (Вы, вероятно, пропустите некоторую информацию или символы).
Если вы используете язык программирования, вероятно, для этой цели написаны библиотеки pdf. например, http://search.cpan.org/dist/CAM-PDF/ для Perl
источник
попробуйте использовать 'acroread' в простом скрипте, подобном приведенному выше
источник