Verifique se os arquivos PDF estão corrompidos usando a linha de comando no Linux

14

Eu tenho muitos arquivos PDF em uma pasta.

É possível verificar se um ou mais arquivos estão corrompidos (zero páginas ou downloads inacabados) usando a linha de comando, sem precisar abri-los um por um?

    
por Kokizzu 10.04.2013 / 15:36

4 respostas

18

Talvez executar pdfinfo (aqui no Fedora no pacote poppler-utils ) dê uma pista?

A maioria das informações em um arquivo PDF está no dicionário no final, portanto, se for encontrado, deverá 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
    
por 10.04.2013 / 15:46
10

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
    
por 17.10.2014 / 21:50
4

Eu recebi uma resposta:

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

PDFs com erros mostrarão erros.

    
por 10.04.2013 / 15:47
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 o JHOVE .

Instalação:

Instale o jar 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 com source ~/.bash_profile e é bom começar a usá-lo em todo o sistema.

Uso básico:

jhove -m pdf-hul someFile.pdf

Você terá 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 maneira com qualquer ambiente Bash baseado em Unix.

    
por 30.04.2017 / 12:00

Tags