Antworten:
Vielleicht gibt das Ausführen pdfinfo
(hier auf Fedora im poppler-utils
Paket) 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
pdfinfo
oder pdftotext
...
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
Mein bevorzugtes Werkzeug zum Überprüfen von PDFs ist qpdf
. qpdf
hat ein --check
Argument, das sich gut dazu eignet, Probleme in PDFs zu finden.
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 \; \)
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 qpdf
fü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 qpdf
0 ist (dh keine Fehler)
-o -exec echo "{}": FAILED \; \)
Dies wird ausgeführt, wenn Fehler gefunden werden: Drucke Dateiname gefolgt von ": FAILED"
qpdf
:qpdf
Die 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
qpdf --check
jedoch 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 pdfinfo
und pdftk
tun dies auch nicht, sie erheben jedoch keinen Anspruch darauf, die PDF-Struktur zu überprüfen.
Ich habe mir eine antwort geholt:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
Bei fehlerhaften PDFs werden Fehler angezeigt.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Alle Methoden mit pdfinfo
oder pdftotext
haben 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_profile
und 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 valid
oder 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.