Как упомянуто будьте http://pthree.org/2007/08/12/aptitude-vs-apt-get/, aptitude
имеет намного более легкое для использования интерфейса командной строки.
Разве под капотом они не использующий ту же систему APT? Да.
Базовая система не просто apt
, но dpkg
. Эта система является столь же немой как об/мин, она может только обработать установку и администрирование единственных пакетов. Это отслеживает, который установил файлы, принадлежат который пакет.
apt
обрабатывает загрузки репозиториев, отслеживание зависимостей, и так далее для всех отдельных пакетов - который оно затем устанавливает использование dpkg
. aptitude
делает то же, с другим интерфейсом.
Установите пакет pdfgrep
, затем используйте команду:
find /path -iname '*.pdf' -exec pdfgrep pattern {} +
——————
Simpliest путь
pdfgrep 'pattern' *.pdf
pdfgrep 'pattern' file.pdf
Вы могли передать его по каналу через strings
первый:-
cat file.pdf | strings | grep <...etc...>
strings
или grep
.
– Jander
31.01.2011, 18:08
Нет.
PDF состоит из блоков данных, некоторые из них текст, некоторые из них изображения и некоторые из них действительно волшебный необычный XYZ (например, .u3d файлы). Те блоки являются большинством сжатых времен (например, плоский, проверьте http://www.verypdf.com/pdfinfoeditor/compression.htm). Чтобы к 'grep' .pdf необходимо инвертировать сжатие, иначе извлекают текст.
Можно сделать это любой на файл с инструментами такой как pdf2text
и grep результат, или Вы выполняете 'индексатор' (взгляд на xapian.org или lucene), который создает доступный для поиска индекс из Ваших файлов pdf, и затем можно использовать инструменты поисковой системы того индексатора для получения содержания PDF.
Но не, Вы не можете grep
файлы PDF и надежда на надежные ответы, не извлекая текст сначала.
Если Вы имеете poppler-utils
установленный (значение по умолчанию на Рабочем столе Ubuntu), Вы могли "преобразовать" его на лету и передать его по каналу к grep
:
pdftotext my.pdf - | grep 'pattern'
Это не создаст .txt файл.
pdftotext
имя файла, в которое это должно записать. Однако условно инструменты обычно позволяют Вам писать в stdout
вместо в файл путем определения a -
вместо этого. Точно так же некоторые инструменты записали бы в stdout
по умолчанию, если Вы опускаете такой аргумент полностью (но это не всегда возможно, не создавая неоднозначность).
– Joost
23.09.2016, 17:06
попробуйте это
find /path -iname *.pdf -print0 | for i in `xargs 0`; do echo $i; \
pdftotext "$i" - | grep pattern; done
для печати строк шаблон происходит в PDF
Смотрите на общий ресурс grep инструмент crgrep, который поддерживает поиск в файлах PDF.
Это также позволяет искать другие ресурсы как содержание, вложенное в архивах, таблицах базы данных, метаданных изображения, зависимостях от файла АНГЛИЧАНИНА и веб-ресурсах - и комбинации их включая рекурсивный поиск.
Преимуществом по сравнению с аналогичным ответом здесь является флаг [117244] --with-filename[117245] для grep. Это несколько превосходит pdfgrep, так как стандартный grep имеет больше возможностей.
https://stackoverflow.com/questions/4643438/how-to-search-contents-of-multiple-pdf-files
CD в вашу папку, содержащую ваш PDF-файл, а затем ..
pdfgrep 'pattern' your.pdf
Или если вы хотите выполнить поиск в более чем один PDF-файл (например, во всех PDF-файлах в вашей папке)
pdfgrep 'pattern' `ls *.pdf`
или
pdfgrep 'pattern' $(ls *.pdf)
pdfgrep был написан именно для этой цели и доступен в Ubuntu.
Он пытается быть максимально совместимым с grep
и, таким образом, обеспечивает «мощь grep», специализированную только для PDF-файлов. Это включает общие параметры grep, такие как - рекурсивный
, - игнорировать регистр
или - цвет
.
В отличие от pdftotext | grep
, pdfgrep может выводить номер страницы соответствия эффективным способом и, как правило, быстрее, когда ему не нужно искать по всему документу (например, - max-count
или --quiet
).
Основное использование:
pdfgrep PATTERN FILE..
где ШАБЛОН
- ваша строка поиска, а ФАЙЛ
- список имен файлов (или подстановочные знаки в оболочке).
См. справочную страницу для получения дополнительной информации.
Вот быстрый скрипт для поиска PDF в текущем каталоге:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "usage $0 VALUE" 1>&2
exit 1
fi
echo 'SEARCH IS CASE SENSITIVE' 1>&2
find . -name '*.pdf' -exec /bin/bash -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "$0"' "$1" \;
Если вы просто хотите найти имена/свойства PDF... или простые строки, которые не сжаты или не закодированы, то вместо strings
вы можете использовать приведенный ниже
grep -a STRING file.pdf
cat -v file.pdf | grep STRING
Изgrep --help
:
--binary-files=TYPE assume that binary files are TYPE;
TYPE is 'binary', 'text', or 'without-match'
-a, --text equivalent to --binary-files=text
иcat --help
:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
Самый быстрый способ
grep -rinw "pattern" --include \*.pdf *
pdfgrep
также имеет рекурсивный флаг. Таким образом, этот ответ мог, возможно, быть уменьшен до:pdfgrep -R pattern /path/
. Хотя могло бы быть менее эффективно, если это проходит каждый файл, даже если это не PDF. И я замечаю, что это имеет проблемы с международными символами, такими как å, ä и ö. – Rovanion 14.01.2016, 14:11-n
опция является про для pdfgrep, поскольку это позволяет включать номер страницы в вывод (могло бы быть полезным для последующей обработки). – JepZ 10.11.2017, 22:18pattern
? Что{}
? Что произошло с '+'? Я понятия не имею после первого чтения... так прочь к странице справочника, я иду, я предполагаю. – Mark Amery 20.04.2018, 17:44