Як я міг шукати вміст файлів PDF у каталозі / підкаталозі? Я шукаю деякі інструменти командного рядка. Здається, що grepне можна шукати файли PDF.
Як я міг шукати вміст файлів PDF у каталозі / підкаталозі? Я шукаю деякі інструменти командного рядка. Здається, що grepне можна шукати файли PDF.
Відповіді:
Ваш дистрибутив повинен надати утиліту під назвою pdftotext:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
"-" необхідно мати вихід pdftotext для stdout, а не для файлів. Параметри --with-filenameта --label=параметри додадуть ім'я файлу у виведення grep. Необов’язковий --colorпрапор є приємним і вказує греп для виведення кольорів за допомогою терміналу.
(В 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 - це фантастичний повнотекстовий додаток для пошуку GUI для Unix / Linux, який підтримує десятки різних форматів, включаючи PDF. Він навіть може передати точний номер сторінки та пошуковий термін запиту в програму перегляду документів і, таким чином, дозволяє перейти до результату прямо з його графічного інтерфейсу.
Також Recoll поставляється з життєздатним інтерфейсом командного рядка та інтерфейсом веб-браузера .
recoll / xapianв командному рядку (не-GUI)? Дякую!
recoll користувача може містити деякі покажчики, але пропонує досить технічне та "поза темою" прочитання ...
pwdext: pdf 'neuro *' - stackoverflow з'їв основи навколо 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команда вже не виконується в контексті finds 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