Respuestas:
¿Quizás correr pdfinfo
(aquí en Fedora en el poppler-utils
paquete) da una pista?
La mayor parte de la información en un archivo PDF está en el diccionario al final, por lo que si lo encuentra, debería estar bien. Haría algo como:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfo
o pdftotext
...
Este es mi guion
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
Mi herramienta de elección para revisar archivos PDF es qpdf
. qpdf
tiene un --check
argumento que hace bien en encontrar problemas en archivos 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 \; \)
Explicación del comando:
find ./directory_to_scan/ -type f -iname '*.pdf'
Buscar todos los archivos con la extensión '.pdf'
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Ejecute qpdf
para cada archivo encontrado y canalice todos los resultados a /dev/null
. Imprima también el nombre del archivo seguido de ': OK' si el estado de retorno qpdf
es 0 (es decir, sin errores)
-o -exec echo "{}": FAILED \; \)
Esto se ejecuta si se encuentran errores: imprimir el nombre del archivo seguido de ": FAILED"
qpdf
:qpdf
tiene binarios de Linux y Windows disponibles en: https://github.com/qpdf/qpdf/releases . También puede usar su administrador de paquetes de elección para obtenerlo. Por ejemplo, en Ubuntu puedes instalar qpdf usando apt con el comando:
apt install qpdf
Me conseguí una respuesta:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
Los PDF con errores mostrarán errores.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Todos los métodos que usan pdfinfo
o pdftotext
no me han funcionado. De hecho, me seguían dando falsos positivos y, a veces, creaban archivos que no necesitaba.
Lo que funcionó fue JHOVE .
Instalación:
Instale el jar desde el enlace anterior y actualice su variable de entorno PATH con este comando:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Actualice cada terminal con
source ~/.bash_profile
y estará listo para comenzar a usarlo en todo el sistema.
Uso Básico:
jhove -m pdf-hul someFile.pdf
Obtendrá mucha información sobre el pdf, más de lo que la mayoría de la gente probablemente necesita.
Bash One-Liner:
simplemente devuelve valid
o invalid
:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Tenga en cuenta que esto se ejecutó en Mac OS X, pero supongo que funciona igual con cualquier entorno Bash basado en Unix.