15

У меня есть много файлов PDF в одной папке.

Можно ли проверить, не поврежден ли один или несколько файлов (нулевые страницы или незавершенные загрузки) с помощью командной строки, не открывая их по одному?

5 ответов5

18

Возможно, запуск pdfinfo (здесь, в Fedora в poppler-utils ) дает подсказку?

Большая часть информации о файле PDF находится в конце словаря, поэтому, если он его найдет, все будет в порядке. Я бы сделал что-то вроде:

for f in *.pdf; do
  if pdfinfo "$f" > /dev/null; then
    : Nothing
  else
    echo "$f" is broken
  fi
done
11

Это мой сценарий

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
5

Я получил ответ:

for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done

PDF с ошибками покажет ошибки.

2

Мой инструмент выбора для проверки PDF-файлов - qpdf. qpdf есть аргумент --check , который хорошо подходит для поиска проблем в PDF-файлах.

Проверьте один PDF с qpdf:

qpdf --check test_file.pdf

Проверьте все 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
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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .