एकाधिक पीडीएफ़ फ़ाइलों की सामग्री कैसे खोजें?


226

मैं एक निर्देशिका / उपनिर्देशिका में पीडीएफ फाइलों की सामग्री कैसे खोज सकता हूं? मैं कुछ कमांड लाइन टूल की तलाश कर रहा हूं। ऐसा लगता है कि grepपीडीएफ फाइलों को नहीं खोज सकते।


5
जीआरपी काम नहीं करेगा क्योंकि पीडीएफ एक द्विआधारी प्रारूप है और पाठ अक्सर विभिन्न तरीकों से संकुचित या एन्कोड किया जाता है।
स्टेपहेंस

4
यहाँ एक GUI समाधान है: Adobe Reader, wikispaces.psu.edu/display/training/…
मार्टिन Thoma


3
एडोब रीडर ठीक काम करता है, लेकिन यह सूचकांक नहीं करता है; इसलिए यदि आपके पास बहुत सारी फाइलें हैं, तो यह धीमी होगी। कोई अनुक्रमण समाधान?
Ruby

जवाबों:


211

आपके वितरण को उपयोगिता नाम की सुविधा प्रदान करनी चाहिए pdftotext:

find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;

"-" स्टैडआउट में pdftotext आउटपुट होना आवश्यक है, फाइलों में नहीं। --with-filenameऔर --label=विकल्पों ग्रेप के उत्पादन में फ़ाइल नाम डाल देंगे। वैकल्पिक--color ध्वज अच्छा है और टर्मिनल पर रंगों का उपयोग करके आउटपुट को grep बताता है।

(उबंटू में, pdftotextपैकेज द्वारा प्रदान किया गया है xpdf-utilsया poppler-utils)

इस विधि का उपयोग कर pdftotextऔर grep, पर एक फायदा है pdfgrepआप जीएनयू की सुविधाओं का उपयोग करना चाहते हैं grepकि pdfgrepसमर्थन नहीं करता। नोट : pdfgrep-1.3.x -Cसंदर्भ लाइन की छपाई के लिए विकल्प का समर्थन करता है।


1
@ कुर्ट फ़िफ़ेल संपादित करें "(संपादित करें -kp-)" जो आपने बनाया है grepवह मुद्रित फ़ाइल नामों को फ़िल्टर करने के बाद से काम नहीं करता है ।
राफेल एहरेंस

@ एसआरआर नहीं, जबकि pdfgrepसमाधान वास्तव में त्वरित और सरल खोजों के लिए अच्छा है, अक्सर मैं कुछ संदर्भ प्राप्त करना चाहता हूं, क्योंकि एक पंक्ति पर्याप्त रूप से सहायक नहीं होगी - इसलिए मैंने इस उत्तर में जोड़ा: उदाहरण के लिए, आप जोड़ सकते हैं आउटपुट के संदर्भ में 5 लाइनों को शामिल करने के लिए "अपने पैटर्न" से पहले -C5 विकल्प - pdfgrep इस का समर्थन नहीं करता है
कॉलिन डी बेनेट

ओह, यह अच्छा है, यह जानकर खुशी हुई कि इसके फायदे भी हैं, हालांकि यह बहुत कम लोगों को स्पष्ट है कि यह क्या कर रहा है
sjr

2
@ sjr सिर्फ रिकॉर्ड के लिए: मैं Ubuntu 12.10 का उपयोग कर रहा हूं और pdfgrepबेकार है, यह फाइलों पर भारी मात्रा में बकवास की रिपोर्ट करता है जो इसे संभाल नहीं सकता है। दूसरी ओर आपके समाधान ने मदद की। तो कृपया इसे डिलीट न करें, 3 साल बाद भी यह मददगार है!
अली

मैं इसे साइबरविन में भी उपयोग करने में सक्षम था, इसे पैरामीटर के साथ एक फ़ंक्शन बनाने के लिए मुझे "your_pattern" को '$ 1' बनाना था
कोशमर

214

नहीं है pdfgrep जो करता है वास्तव में क्या इसके नाम से पता चलता है,।

pdfgrep -R 'a pattern to search recursively from path' /some/path

मैंने इसे सरल खोजों के लिए उपयोग किया है और यह ठीक काम किया है।

(डेबियन, उबंटू और फेडोरा में पैकेज हैं।)

चूंकि संस्करण 1.3.0 pdfgrep पुनरावर्ती खोज का समर्थन करता है। यह संस्करण Ubuntu में १२.१० (क्वांटल) के बाद से उपलब्ध है।


1
नेट्टी (उबंटू 11.04) से ऊपर की ओर ( संकुल देखें ।ubuntu.com/… )
मार्टिन थोमा

2
@pavon के pdfgrepपास अब पुनरावर्तन का विकल्प है, जिसमें -R
सिमिलिंक

30

रिकॉल यूनिक्स / लिनक्स के लिए एक शानदार पूर्ण-पाठ जीयूआई खोज अनुप्रयोग है जो पीडीएफ सहित दर्जनों विभिन्न स्वरूपों का समर्थन करता है। यहां तक ​​कि यह सटीक पृष्ठ संख्या भी दर्ज कर सकता है और किसी क्वेरी की खोज अवधि दस्तावेज़ दर्शक को दे सकता है और इस प्रकार आप इसके जीयूआई से परिणाम पर कूद सकते हैं।

रिकॉल एक व्यवहार्य कमांड-लाइन इंटरफ़ेस और एक वेब-ब्राउज़र इंटरफ़ेस के साथ भी आता है


1
अगर आप मूल प्रश्न से संबंधित एक उदाहरण जोड़ सकते हैं (एकाधिक पीडीएफ की खोज के लिए कमांड लाइन उपकरण): मैं यह भी देखना चाहूंगा कि कैसे प्रदर्शन करना है वाइल्डकार्ड खोज कैसे करें और कैसे खोजें सभी उपनिर्देशिकाएं वर्तमान निर्देशिकाrecoll / xapianकमांड लाइन (गैर-जीयूआई) में यह कैसे दिखेगा ? धन्यवाद!
नट्टी के बारे में अखरोट

@ Leszek youarna शायद आप अपने द्वारा जांचे गए उदाहरण को पोस्ट कर सकते हैं?
अखरोट के बारे में natty

recoll उपयोगकर्ता पुस्तिका कुछ संकेत हो सकता है, लेकिन प्रस्तावों एक नहीं बल्कि तकनीकी और "विषय से हटकर" पढ़ें ...
Natty के बारे में अखरोट के स्वाद का

1
@ कुट्टी: recoll -t -q dir: pwdext: पीडीएफ 'न्यूरो *' - स्टैकओवरफ़्लो बैकवॉट्स को पीडब्लूडी के आसपास खाती है।
मेडोक

13

Pdfgrep का मेरा वास्तविक संस्करण (1.3.0) निम्नलिखित की अनुमति देता है:

pdfgrep -HiR 'pattern' /path

जब कर रहे हैं pdfgrep --help:

  • H: प्रत्येक मैच के लिए फ़ाइल का नाम प्रिंट करें।
  • i: मामले के अंतर को अनदेखा करें।
  • आर: खोज निर्देशिका पुनरावर्ती।

यह मेरे उबंटू पर अच्छा काम करता है।


7

मैंने इस विनाशकारी छोटी स्क्रिप्ट को बनाया । इसके साथ मजे करो।

function pdfsearch()
{
    find . -iname '*.pdf' | while read filename
    do
        #echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
        pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
        # remove it!  rm -f "$filename."
    done
}

2
+1। लेकिन आप के बजाय $filename.इसे में पाइप करना चाहिए grep
राफेल एहरेंस

3

मुझे @ sjr का जवाब पसंद है लेकिन मुझे xargs vs -exec पसंद है। मुझे xargs अधिक बहुमुखी लगता है। उदाहरण के लिए- जब हम ऐसा करने के लिए समझ में आता है, तो हम कई सीपीयू का लाभ उठा सकते हैं।

find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"

दिलचस्प बात xargs'समानांतर-प्रसंस्करण क्षमता के बारे में। ध्यान रखें कि आपके --labelविकल्प तर्क हो जाएगा सचमुच {} , क्योंकि grepआदेश अब नहीं रह गया है के संदर्भ में निष्पादित किया जाता है findकी exec
mklement0

2

मुझे एक ही समस्या थी और इस प्रकार मैंने एक स्क्रिप्ट लिखी जो एक स्ट्रिंग के लिए निर्दिष्ट फ़ोल्डर में सभी पीडीएफ फाइलों को खोजती है और पीडीएफ फाइलों को क्वेरी स्ट्रिंग से मेल खाती है जो प्रिंट करती है।

शायद यह आपके लिए मददगार होगा।

आप इसे यहाँ डाउनलोड कर सकते हैं


शायद टिप्पणी में स्क्रिप्ट डालने के लिए उपयोगी है?
baxx

मैंने आपकी स्क्रिप्ट की कोशिश की और यह pdfgrepसमाधान या sjr के वन-लाइनर की तुलना में बहुत धीमा हो गया , और इसने मुझे एक निरंतर प्रक्रिया के साथ छोड़ दिया, जो कि 100% सीपीयू थ्रेड का उपयोग करने के बाद भी मैं इसे समाप्त करने के लिए Ctrl-C।
जेसन


2

रिपग्रेप-ऑल नामक एक और उपयोगिता है , जो रिपप्रेप पर आधारित है ।

यह कार्यालय दस्तावेजों और फिल्मों की तरह सिर्फ पीडीएफ दस्तावेजों से अधिक संभाल सकता है, और लेखक का दावा है कि यह तेजी से है pdfgrep

वर्तमान निर्देशिका को पुन: खोज करने के लिए कमांड सिंटैक्स, और केवल पीडीएफ फाइलों के लिए दूसरी एक सीमा:

rga 'pattern' .
rga --type pdf 'pattern' .

1

वहाँ एक खुला स्रोत आम संसाधन grep उपकरण crgrep है जो पीडीएफ फाइलों के भीतर खोज करता है लेकिन यह भी अभिलेखागार, डेटाबेस तालिकाओं, छवि मेटा-डेटा, पीओएम फ़ाइल निर्भरता और वेब संसाधनों में सामग्री जैसे अन्य संसाधन - और पुनरावर्ती खोज सहित इनका संयोजन करता है।

फाइल टैब के तहत पूरा विवरण बहुत कवर करता है कि उपकरण क्या समर्थन करता है।

मैंने एक ओपनसोर्स टूल के रूप में क्रेगप विकसित किया।


क्रेग - क्या आपके पास उस परियोजना से कोई संबंध है? यदि हां, तो आपको इसे अपने उत्तर में बताना चाहिए। मैं ऐसा इसलिए कहता हूं क्योंकि आपने सिर्फ दो अन्य पुराने सवालों के लगभग एक समान उत्तर पोस्ट किए हैं ...
स्टीफन C

स्पष्ट करने के लिए अपडेट किया गया पोस्ट कि मैं crgrep का लेखक हूं
क्रेग

1

सबसे पहले अपनी सभी पीडीएफ फाइलों को टेक्स्ट फाइलों में बदलें:

for file in *.pdf;do pdftotext "$file"; done

फिर grepसामान्य उपयोग करें । यह विशेष रूप से अच्छा है क्योंकि यह तेज है जब आपके पास कई प्रश्न हैं और बहुत सारी पीडीएफ फाइलें हैं।


यह, जब ag github.com/ggreer/the_silver_searcher के संयोजन में किया जाता है । माइक्रोसेकंड द्वारा psychedeliks Gb पर पार्स करने में सक्षम। जीवन के लिए फ्लैट फाइलें
एनवीआरएम

0

आपको अपने पीडीएफ को टेक्स्ट फाइल में बदलने और फिर टेक्स्ट के अंदर सर्च करने के लिए पीडीएफ़ 2 टेक्स्ट जैसे कुछ टूल्स की आवश्यकता होती है। (आप शायद कुछ जानकारी या प्रतीकों को याद करेंगे)।

यदि आप एक प्रोग्रामिंग भाषा का उपयोग कर रहे हैं तो संभवतः इस उद्देश्य के लिए लिखी गई पीडीएफ़ लाइब्रेरी हैं। उदाहरण के लिए http://search.cpan.org/dist/CAM-PDF/ पर्ल के लिए


0

ऊपर की तरह एक सरल स्क्रिप्ट में 'एक्रोडेड' का उपयोग करने का प्रयास करें

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