Réponses:
Peut-être que courir pdfinfo(ici sur Fedora dans le poppler-utilspaquet) donne un indice?
La plupart des informations sur un fichier PDF se trouvent dans le dictionnaire à la fin, donc s'il le trouve, cela devrait être OK. Je ferais quelque chose comme:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfoou pdftotext...
C'est mon script
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
Mon outil de choix pour vérifier les PDF est qpdf. qpdfa un --checkargument qui fait bien de trouver des problèmes dans les 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 \; \)
Explication de la commande:
find ./directory_to_scan/ -type f -iname '*.pdf'
Trouver tous les fichiers avec l'extension '.pdf'
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Exécutez qpdfpour chaque fichier trouvé et dirigez toutes les sorties vers /dev/null. Imprime également le nom de fichier suivi de ': OK' si le statut de retour qpdfest 0 (c.-à-d. Pas d'erreur)
-o -exec echo "{}": FAILED \; \) Ceci est exécuté si des erreurs sont trouvées: Imprimer le nom du fichier suivi de ": FAILED"
qpdf:qpdfa des binaires Linux et Windows disponibles sur: https://github.com/qpdf/qpdf/releases . Vous pouvez également utiliser le gestionnaire de paquets de votre choix pour l'obtenir. Par exemple sur Ubuntu, vous pouvez installer qpdf en utilisant apt avec la commande:
apt install qpdf
qpdf --checkne détecte pas les métadonnées multipliées définies, qui sont incorrectes car elles sont gérées différemment par différents outils. J'ai signalé un bug . D'autres outils tels que pdfinfoet pdftkne le font pas non plus, mais ils ne prétendent pas vérifier la structure PDF.
Je me suis obtenu une réponse:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
Les fichiers PDF contenant des erreurs afficheront des erreurs.
ls: mywiki.wooledge.org/ParsingLs
find (1). :-)
Toutes les méthodes utilisant pdfinfoou pdftotextn'ayant pas fonctionné pour moi. En fait, ils ne cessaient de me donner de faux positifs et créaient parfois des fichiers dont je n'avais pas besoin.
Ce qui a fonctionné était JHOVE .
Installation:
Installez le pot à partir du lien ci-dessus et mettez à jour votre variable d'environnement PATH avec cette commande:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Actualisez chaque terminal avec
source ~/.bash_profileet vous êtes prêt à commencer à l'utiliser à l'échelle du système.
Utilisation de base:
jhove -m pdf-hul someFile.pdf
Vous obtiendrez beaucoup d'informations sur le pdf - plus que la plupart des gens n'en ont probablement besoin.
Bash One-Liner:
revient simplement validou invalid:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Notez que cela a été exécuté sur Mac OS X, mais je suppose que cela fonctionne de la même manière avec n'importe quel environnement Bash basé sur Unix.