Yanıtlar:
Belki de pdfinfo(burada Fedora'da poppler-utilspakette) çalıştırmak bir ipucu veriyor?
Bir PDF dosyasındaki bilgilerin çoğu sözlükte bulunur, bu yüzden bulursa Tamam olmalıdır. Gibi bir şey yapardım:
for f in *.pdf; do
if pdfinfo "$f" > /dev/null; then
: Nothing
else
echo "$f" is broken
fi
done
pdfinfoister pdftotext...
Bu benim senaryom
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
PDF'leri kontrol etmek için tercih ettiğim araç qpdf. PDF'lerde sorun bulmayı iyi yapan qpdfbir --checkargüman var.
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 \; \)
Komut Açıklaması:
find ./directory_to_scan/ -type f -iname '*.pdf'
'.Pdf' uzantılı tüm dosyaları bulun
-exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;qpdfBulunan her dosya için
yürüt ve tüm çıktıları yönlendir /dev/null. Ayrıca, dönüş durumu qpdf0 ise dosya adını ve ardından ': OK' yazdırabilirsiniz (yani hata yok)
-o -exec echo "{}": FAILED \; \) Hatalar bulunursa bu yürütülür: Dosya adını yazdırın ve ardından ": FAILED"
qpdf:qpdfhem Linux hem de Windows ikili dosyalarını şu adreste bulabilirsiniz: https://github.com/qpdf/qpdf/releases . İsterseniz paket yöneticinizi de kullanabilirsiniz. Örneğin Ubuntu üzerinde şu komutu kullanarak apt komutunu kullanarak qpdf yükleyebilirsiniz:
apt install qpdf
Kendime bir cevap aldım:
for x in *.pdf; do echo "$x"; pdfinfo "$x" | grep Pages; done
Hatalı PDF'ler hata gösterecektir.
ls: mywiki.wooledge.org/ParsingLs
find (1). :-)
Benim için kullanılan pdfinfoveya kullanmayan tüm yöntemler pdftotext. Aslında bana yanlış pozitifler vermeye devam ettiler ve bazen ihtiyacım olmayan dosyalar yarattılar.
Kurulum:
Kavanozu yukarıdaki bağlantıdan yükleyin ve PATH ortam değişkeninizi bu komutla güncelleyin:
echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile
Her terminali yenileyin
source ~/.bash_profileve sistem genelinde kullanmaya başlayabilirsiniz.
Temel Kullanım:
jhove -m pdf-hul someFile.pdf
Pdf hakkında birçok bilgi alacaksınız - çoğu insanın muhtemelen ihtiyaç duyduğundan daha fazla.
Bash One-Liner:
Sadece şunu döndürür validveya invalid:
if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;
Bunun Mac OS X'te çalıştırıldığını, ancak Unix tabanlı Bash ortamlarıyla aynı şekilde çalıştığını varsayıyorum.