Risposte:
Forse correre pdfinfo
(qui su Fedora nel poppler-utils
pacchetto) dà un indizio?
La maggior parte delle informazioni su un file PDF è nel dizionario alla fine, quindi se lo trova dovrebbe essere OK. Farei qualcosa del tipo:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfo
o pdftotext
...
Questa è la mia sceneggiatura
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
Il mio strumento preferito per controllare i PDF è qpdf
. qpdf
ha un --check
argomento che fa bene a trovare problemi nei 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 \; \)
Spiegazione del comando:
find ./directory_to_scan/ -type f -iname '*.pdf'
Trova tutti i file con estensione ".pdf"
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Eseguire qpdf
per ogni file trovato e reindirizzare tutto l'output /dev/null
. Stampa anche il nome file seguito da ': OK' se lo stato di ritorno qpdf
è 0 (cioè nessun errore)
-o -exec echo "{}": FAILED \; \)
Viene eseguito se vengono rilevati errori: Stampa il nome file seguito da ": FAILED"
qpdf
:qpdf
ha binari sia Linux che Windows disponibili su: https://github.com/qpdf/qpdf/releases . Puoi anche usare il tuo gestore di pacchetti preferito per ottenerlo. Ad esempio su Ubuntu è possibile installare qpdf usando apt con il comando:
apt install qpdf
Mi sono procurato una risposta:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
I PDF con errori mostreranno errori.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Tutti i metodi che usano pdfinfo
o pdftotext
non hanno funzionato per me. In effetti continuavano a darmi falsi positivi e talvolta creavano file di cui non avevo bisogno.
Ciò che ha funzionato è stato JHOVE .
Installazione:
Installa il jar dal link sopra e aggiorna la tua variabile d'ambiente PATH con questo comando:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Aggiorna ogni terminale con
source ~/.bash_profile
e sei pronto per iniziare a usarlo a livello di sistema.
Uso di base:
jhove -m pdf-hul someFile.pdf
Riceverai molte informazioni sul pdf - più di quanto probabilmente la maggior parte delle persone abbia bisogno.
Bash One-Liner:
restituisce semplicemente valid
o invalid
:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Si noti che questo è stato eseguito su Mac OS X ma suppongo che funzioni allo stesso modo con qualsiasi ambiente Bash basato su Unix.