Як я міг шукати вміст файлів 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
користувача може містити деякі покажчики, але пропонує досить технічне та "поза темою" прочитання ...
pwd
ext: 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
команда вже не виконується в контексті find
s 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