PDF dosyalarının Linux'ta komut satırı kullanılarak bozuk olup olmadığını kontrol edin


16

Bir klasörde çok sayıda PDF dosyam var.

Bir veya daha fazla dosyanın tek tek açılmasına gerek kalmadan komut satırını kullanarak bozuk (sıfır sayfa veya tamamlanmamış indirme) olup olmadığını kontrol etmek mümkün müdür?

Yanıtlar:


20

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

6
Pdfinfo'yu pdftotext ile değiştirmenizi öneririm. Bu şekilde her sayfadaki tüm metinler kontrol edilir. Ve> gt karakteri tüm hata mesajlarının görünmemesi için &> olmalıdır.
schoetbi

Tüm PDF'lerim bozuk olarak işaretlendi. Yüzlerce gigabayt. Yeni oluşturduğumlar dahil. İster kullanıyor pdfinfoister pdftotext...
PatrickT

13

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

Açıklığa kavuşturmak için: Bu komut dosyası, .pdf uzantısına .broken ekleyerek 'bozuk' olarak tanılanan pdf dosyalarını yeniden adlandırır.
PatrickT

5

PDF'leri kontrol etmek için tercih ettiğim araç qpdf. PDF'lerde sorun bulmayı iyi yapan qpdfbir --checkargüman var.

Şunlarla tek bir PDF'yi kontrol edin qpdf:

qpdf --check test_file.pdf

Bir dizindeki tüm PDF'leri şunlarla kontrol edin 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"


Nereden alınır 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

Ancak, qpdf --checkfarklı araçlar tarafından farklı şekilde işlendikleri için yanlış olan çoklu tanımlanmış meta verileri algılamaz. Bir hata bildirdim . Gibi diğer araçlar pdfinfove pdftkyapamaz ya, ama onlar PDF yapısını kontrol etmek iddiasında değilim.
vinc17


2

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.

YaptığıJHOVE idi .

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.