Ответы:
Возможно, запуск pdfinfo
(здесь на Fedora в poppler-utils
пакете) дает подсказку?
Большая часть информации о файле PDF находится в конце словаря, поэтому, если он его найдет, все будет в порядке. Я бы сделал что-то вроде:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfo
или pdftotext
...
Это мой сценарий
find . -iname '*.pdf' | while read -r f
do
if pdftotext "$f" &> /dev/null; then
echo "$f" was ok;
else
mv "$f" "$f.broken";
echo "$f" is broken;
fi;
done
Мой инструмент выбора для проверки PDF-файлов qpdf
. qpdf
имеет --check
аргумент, который хорошо подходит для поиска проблем в PDF-файлах.
qpdf
:qpdf --check test_file.pdf
qpdf
:find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)
Объяснение команды:
find ./directory_to_scan/ -type f -iname '*.pdf'
Найти все файлы с расширением .pdf
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Выполните qpdf
для каждого найденного файла и передайте все выходные данные /dev/null
. Также выведите имя файла, за которым следует «: OK», если возвращаемое состояние qpdf
равно 0 (т.е. ошибок нет)
-o -exec echo "{}": FAILED \; \)
Это выполняется, если обнаружены ошибки: Напечатать имя файла, после которого следует: «FAILED»
qpdf
:qpdf
двоичные файлы для Linux и Windows доступны по адресу: https://github.com/qpdf/qpdf/releases . Вы также можете использовать ваш менеджер пакетов по своему выбору, чтобы получить его. Например, в Ubuntu вы можете установить qpdf, используя apt с командой:
apt install qpdf
qpdf --check
не менее, не обнаруживает многократно определенные метаданные, которые являются неправильными, поскольку они обрабатываются по-разному различными инструментами. Я сообщил об ошибке . Другие инструменты, такие как pdfinfo
и pdftk
нет, но они не претендуют на проверку структуры PDF.
Я получил ответ:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
PDF с ошибками покажет ошибки.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Все методы используют pdfinfo
или pdftotext
не работают для меня. На самом деле они давали мне ложные срабатывания и иногда создавали файлы, которые мне не нужны.
То, что сработало, было JHOVE .
Установка:
Установите jar по вышеуказанной ссылке и обновите переменную среды PATH с помощью этой команды:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Обновите каждый терминал,
source ~/.bash_profile
и вы можете начать использовать его в масштабе всей системы.
Основное использование:
jhove -m pdf-hul someFile.pdf
Вы получите много информации о PDF - больше, чем нужно большинству людей.
Bash One-Liner:
просто возвращается valid
или invalid
:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Обратите внимание, что это было выполнено в Mac OS X, но я предполагаю, что это работает так же, как и в любой среде на основе Unix.