Перевірте, чи файли PDF пошкоджені за допомогою командного рядка на Linux


15

У мене є багато PDF-файлів на одній папці.

Чи можна перевірити, чи один або більше файлів пошкоджено (нуль сторінок або незавершене завантаження) за допомогою командного рядка, не відкриваючи їх по одному?

Відповіді:


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

5
Я б запропонував замінити pdfinfo з pdftotext. Таким чином буде перевірено весь текст на кожній сторінці. І & gt; gt характер повинен бути & amp; & gt; щоб не відображалися всі повідомлення про помилки.
schoetbi

Усі мої PDF-файли позначені як порушені. Сотні їх гігабайт. У тому числі ті, які я тільки що створив. Чи використовується pdfinfo або pdftotext...
PatrickT

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

Щоб пояснити: цей скрипт перейменовує файли у форматі PDF, які діагностуються як "зламані" шляхом додавання .broken до розширення .pdf.
PatrickT

5

Я отримав відповідь:

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

PDF-файли з помилками показуватимуть помилки.


4
Це погана ідея (і ніколи не потрібна) для перегляду результатів ls: mywiki.wooledge.org/ParsingLs
slhck

2
@slhck: З цим слід поводитися find (1). :-)
Martin Schröder

1

Всі методи використання pdfinfo або pdftotext не працювали для мене. Насправді вони продовжували давати мені помилкові спрацьовування, а іноді створювали файли, які мені не потрібні.

Була робота JHOVE .

Встановлення:

Встановіть банку з вищезгаданого посилання та оновіть змінну середовища 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.


1

Моїм інструментом для перевірки 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.