Vérifiez si les fichiers PDF sont corrompus à l'aide de la ligne de commande sous Linux

J'ai plusieurs fichiers PDF sur un seul dossier.

Est-il possible de vérifier si un ou plusieurs fichiers sont corrompus (zéro pages ou téléchargements non finis) en utilisant la ligne de commande, sans avoir besoin de les ouvrir un par un?

Peut-être exécuter pdfinfo (ici sur Fedora dans le poppler-utils ) donne-t-il un indice?

La plupart des informations sur un fichier PDF se trouvent dans le dictionnaire à la fin, donc, si cela le trouve, il 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 

C'est mon script

 find . -iname '*.pdf' | while read -rf do if pdftotext "$f" &> /dev/null; then echo "$f" was ok; else mv "$f" "$f.broken"; echo "$f" is broken; fi; done 

Je me suis répondu:

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

Les fichiers PDF avec des erreurs afficheront des erreurs.

Toutes les méthodes utilisant pdfinfo ou pdftotext n'ont pas fonctionné pour moi. En fait, ils m'ont toujours donné des faux positifs et parfois des fichiers créés dont je n'avais pas besoin.

Ce qui a bien fonctionné était JHOVE .

Installation:

Installez le pot 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 

Rafraîchissez chaque terminal avec la source ~/.bash_profile et vous êtes prêt à commencer à l'utiliser dans son système.

Utilisation de base:

 jhove -m pdf-hul someFile.pdf 

Vous aurez beaucoup d'informations sur le pdf – plus que la plupart des gens ont probablement besoin.

Bash One-Liner:
Il suffit de renvoyer 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.