Réponses:
Peut-être que courir pdfinfo
(ici sur Fedora dans le poppler-utils
paquet) 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
pdfinfo
ou 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
. qpdf
a un --check
argument 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 qpdf
pour 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 qpdf
est 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
:qpdf
a 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 --check
ne 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 pdfinfo
et pdftk
ne 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 pdfinfo
ou pdftotext
n'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_profile
et 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 valid
ou 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.