जाँच करें कि क्या पीडीएफ फाइलें लिनक्स पर कमांड लाइन का उपयोग करके दूषित हैं


16

मेरे पास एक फ़ोल्डर में कई पीडीएफ फाइलें हैं।

क्या यह संभव है कि एक या एक से अधिक फाइलें दूषित (शून्य पृष्ठ, या अधूरे डाउनलोड) कमांड लाइन का उपयोग करके, उन्हें एक-एक करके खोलने की आवश्यकता के बिना?

जवाबों:


20

आप इसे pdfinfo( poppler-utilsपैकेज में फेडोरा पर ) के साथ करने की कोशिश कर सकते हैं । pdfinfoअपने शब्दकोश से पीडीएफ फाइल के बारे में जानकारी प्राप्त करता है, इसलिए यदि यह पाता है कि फाइल ठीक होनी चाहिए

for f in *.pdf; do
  if ! pdfinfo "$f" &> /dev/null; then
    echo "$f" is broken
  fi
done

6
मैं pdfinfo को pdftotext से बदलने का सुझाव दूंगा। इस तरह हर पेज के सभी टेक्स्ट को चेक किया जाएगा। और> gt वर्ण और होना चाहिए ताकि सभी त्रुटि संदेश दिखाई न दें।
शाओतिबी

मेरे सभी PDF टूटे हुए हैं। उनमें से सैकड़ों गीगाबाइट। जिनमें मैं अभी बना हूं। चाहे का उपयोग कर pdfinfoया pdftotext...
PatrickT

13
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 एक्सटेंशन द्वारा .broken द्वारा 'टूटी' के रूप में पहचाना जाता है।
पैट्रिक टी

5

पीडीएफ की जांच के लिए मेरी पसंद का उपकरण है qpdfqpdfएक --checkतर्क है जो पीडीएफ में समस्याओं को खोजने के लिए अच्छा करता है।

एकल PDF की जाँच करें qpdf:

qpdf --check test_file.pdf

एक निर्देशिका में सभी PDF की जाँच करें qpdf:

find ./directory_to_scan/ -type f -iname '*.pdf' \( -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \; -o -exec echo "{}": FAILED \; \)

कमांड स्पष्टीकरण:

  • find ./directory_to_scan/ -type f -iname '*.pdf' '.Pdf' एक्सटेंशन वाली सभी फाइलें खोजें

  • -exec sh -c 'qpdf --check "{}" > /dev/null && echo "{}": OK' \;qpdfप्रत्येक फ़ाइल के लिए निष्पादित करें और सभी आउटपुट को पाइप करें /dev/null। इसके बाद '': OK '' के रिटर्न का स्टेटस qpdf0 है (तो कोई त्रुटि नहीं)

  • -o -exec echo "{}": FAILED \; \) गलतियाँ पाए जाने पर इसे निष्पादित किया जाता है: प्रिंट फ़ाइल नाम जिसके बाद ": FAILED"


कहां से प्राप्त करें qpdf:

qpdfदोनों लिनक्स और विंडोज बायनेरिज़ पर उपलब्ध हैं: https://github.com/qpdf/qpdf/releases । आप इसे पाने के लिए अपनी पसंद के पैकेज मैनेजर का भी उपयोग कर सकते हैं। उदाहरण के लिए उबंटू पर आप कमांड के साथ ap का उपयोग करके qpdf स्थापित कर सकते हैं:

apt install qpdf

हालांकि, qpdf --checkबहुधा परिभाषित मेटाडेटा का पता नहीं लगाता है, जो गलत हैं क्योंकि वे विभिन्न उपकरणों द्वारा अलग-अलग संभाल रहे हैं। मैंने बग की सूचना दी है । अन्य उपकरण जैसे कि pdfinfoऔर pdftkभी नहीं, लेकिन वे पीडीएफ संरचना की जांच करने का दावा नहीं करते हैं।
vinc17

4

मुझे स्वयं एक उत्तर मिला:

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

त्रुटियों वाले पीडीएफ त्रुटियों को दिखाएंगे।


4
यह एक बुरा विचार है (और वास्तव में कभी ज़रूरत नहीं) ls: mywiki.wooledge.org/ParsingLs
slhck

2
@ श्लोक: इसे संभालना चाहिए find (1)। :-)
मोनिका को बहाल करें - एम। श्रोडर

2

उपयोग करने के सभी तरीके pdfinfoया pdftotextमेरे लिए काम नहीं किए हैं। वास्तव में वे मुझे झूठी सकारात्मकता देते रहे और कभी-कभी ऐसी फाइलें बनाई जिनकी मुझे जरूरत नहीं थी।

क्या काम किया था JHOVE ने

स्थापना:

उपरोक्त लिंक से जार स्थापित करें और इस आदेश के साथ अपने पाथ पर्यावरण चर को अपडेट करें:

echo "export PATH=\$PATH:/REPLACE_WITH/YOUR/PATH_TO/jhove/" >> ~/.bash_profile

के साथ प्रत्येक टर्मिनल को ताज़ा करें source ~/.bash_profileऔर आप इसे विस्तृत प्रणाली का उपयोग शुरू करने के लिए अच्छा कर रहे हैं।

मूल उपयोग:

jhove -m pdf-hul someFile.pdf

आपको पीडीएफ़ के बारे में बहुत सारी जानकारी मिल जाएगी - अधिकांश लोगों की ज़रूरत से ज़्यादा।

बैश वन-लाइनर:
बस रिटर्न validया invalid:

if [[ $(jhove -m pdf-hul someFile.pdf | grep -a "Status:") == *"Well-Formed and valid"* ]]; then echo "valid"; else echo "invalid"; fi;

ध्यान दें कि यह मैक ओएस एक्स पर चलाया गया था, लेकिन मुझे लगता है कि यह किसी भी यूनिक्स आधारित बैश वातावरण के साथ काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.