Überprüfen Sie mithilfe der Befehlszeile unter Linux, ob PDF-Dateien beschädigt sind


16

Ich habe viele PDF-Dateien in einem Ordner.

Ist es möglich, über die Befehlszeile zu überprüfen, ob eine oder mehrere Dateien beschädigt sind (keine Seiten oder unvollendete Downloads), ohne sie einzeln öffnen zu müssen?

Antworten:


20

Vielleicht gibt das Ausführen pdfinfo(hier auf Fedora im poppler-utilsPaket) einen Hinweis?

Die meisten Informationen zu einer PDF-Datei befinden sich am Ende im Wörterbuch. Wenn es also gefunden wird, sollte es in Ordnung sein. Ich würde etwas machen wie:

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

6
Ich würde vorschlagen, pdfinfo durch pdftotext zu ersetzen. Auf diese Weise wird der gesamte Text auf jeder Seite überprüft. Und das Zeichen> gt sollte &> sein, damit nicht alle Fehlermeldungen angezeigt werden.
schoetbi

Alle meine PDFs werden als fehlerhaft markiert. Hunderte von Gigabyte. Einschließlich derer, die ich gerade erstellt habe. Ob mit pdfinfooder pdftotext...
PatrickT

13

Das ist mein Drehbuch

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

Zur Verdeutlichung: Dieses Skript benennt die PDF-Dateien, die durch Anhängen der Erweiterung .broken an die Erweiterung .pdf als "defekt" diagnostiziert wurden, um.
PatrickT

5

Mein bevorzugtes Werkzeug zum Überprüfen von PDFs ist qpdf. qpdfhat ein --checkArgument, das sich gut dazu eignet, Probleme in PDFs zu finden.

Überprüfen Sie ein einzelnes PDF mit qpdf:

qpdf --check test_file.pdf

Überprüfen Sie alle PDFs in einem Verzeichnis mit qpdf:

find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)

Befehlserklärung:

  • find ./directory_to_scan/ -type f -iname '*.pdf' Finde alle Dateien mit der Endung '.pdf'

  • -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; Führen Sie qpdffür jede gefundene Datei die entsprechende Anweisung aus und leiten Sie alle Ausgaben an /dev/null. Gib auch den Dateinamen gefolgt von ': OK' aus, wenn der Rückgabestatus qpdf0 ist (dh keine Fehler)

  • -o -exec echo "{}": FAILED \; \) Dies wird ausgeführt, wenn Fehler gefunden werden: Drucke Dateiname gefolgt von ": FAILED"


Wo zu bekommen qpdf:

qpdfDie Linux- und Windows-Binärdateien sind verfügbar unter: https://github.com/qpdf/qpdf/releases . Sie können auch den Paketmanager Ihrer Wahl verwenden, um es zu erhalten. Unter Ubuntu können Sie zum Beispiel qpdf mit dem Befehl apt installieren:

apt install qpdf

Es werden qpdf --checkjedoch keine mehrfach definierten Metadaten erkannt, die nicht korrekt sind, da sie von verschiedenen Tools unterschiedlich gehandhabt werden. Ich habe einen Fehler gemeldet . Andere Tools wie pdfinfound pdftktun dies auch nicht, sie erheben jedoch keinen Anspruch darauf, die PDF-Struktur zu überprüfen.
Vinc17


2

Alle Methoden mit pdfinfooder pdftotexthaben bei mir nicht funktioniert. Tatsächlich gaben sie mir immer wieder Fehlalarme und erstellten manchmal Dateien, die ich nicht brauchte.

Was funktionierte, war JHOVE .

Installation:

Installieren Sie die JAR-Datei über den obigen Link und aktualisieren Sie Ihre PATH-Umgebungsvariable mit dem folgenden Befehl:

echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile

Aktualisieren Sie jedes Terminal mit source ~/.bash_profileund Sie können es systemweit verwenden.

Grundsätzliche Verwendung:

jhove -m pdf-hul someFile.pdf

Sie werden eine Menge Informationen über das PDF erhalten - mehr als die meisten Leute wahrscheinlich brauchen.

Bash One-Liner:
Einfach zurücksenden validoder invalid:

if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;

Beachten Sie, dass dies unter Mac OS X ausgeführt wurde, aber ich gehe davon aus, dass es in jeder Unix-basierten Bash-Umgebung gleich funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.