Respostas:
Talvez executando pdfinfo
(aqui no Fedora nopoppler-utils
pacote) dê uma pista?
A maioria das informações em um arquivo PDF está no dicionário no final, portanto, se achar que deve estar OK. Eu faria algo como:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfo
ou pdftotext
...
Este é o meu 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
Minha ferramenta de escolha para verificar PDFs é qpdf
. qpdf
tem um--check
argumento que faz bem em encontrar problemas em PDFs.
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 \; \)
Explicação do comando:
find ./directory_to_scan/ -type f -iname '*.pdf'
Encontre todos os arquivos com extensão '.pdf'
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;
Execute qpdf
para cada arquivo encontrado e canalize toda a saída para /dev/null
. Também imprima o nome do arquivo seguido por ': OK' se o status de retorno qpdf
for 0 (ou seja, sem erros)
-o -exec echo "{}": FAILED \; \)
Isso é executado se forem encontrados erros: Print filename seguido por ": FAILED"
qpdf
:qpdf
possui binários Linux e Windows disponíveis em: https://github.com/qpdf/qpdf/releases . Você também pode usar o gerenciador de pacotes de sua escolha para obtê-lo. Por exemplo, no Ubuntu, você pode instalar o qpdf usando o apt com o comando:
apt install qpdf
Eu obtive uma resposta:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
PDFs com erros mostrarão erros.
ls
: mywiki.wooledge.org/ParsingLs
find (1)
. :-)
Todos os métodos que usam pdfinfo
ou pdftotext
não funcionaram para mim. Na verdade, eles continuavam me dando falsos positivos e às vezes criavam arquivos que eu não precisava.
O que funcionou foi JHOVE .
Instalação:
Instale o jar a partir do link acima e atualize sua variável de ambiente PATH com este comando:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Atualize cada terminal
source ~/.bash_profile
e você poderá começar a usá-lo em todo o sistema.
Uso básico:
jhove -m pdf-hul someFile.pdf
Você obterá muitas informações sobre o pdf - mais do que a maioria das pessoas provavelmente precisa.
Bash One-Liner:
simplesmente retorna valid
ou invalid
:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Observe que isso foi executado no Mac OS X, mas presumo que funcione da mesma forma em qualquer ambiente Bash baseado em Unix.