मैं एक निर्देशिका / उपनिर्देशिका में पीडीएफ फाइलों की सामग्री कैसे खोज सकता हूं? मैं कुछ कमांड लाइन टूल की तलाश कर रहा हूं। ऐसा लगता है कि grepपीडीएफ फाइलों को नहीं खोज सकते।
मैं एक निर्देशिका / उपनिर्देशिका में पीडीएफ फाइलों की सामग्री कैसे खोज सकता हूं? मैं कुछ कमांड लाइन टूल की तलाश कर रहा हूं। ऐसा लगता है कि grepपीडीएफ फाइलों को नहीं खोज सकते।
जवाबों:
आपके वितरण को उपयोगिता नाम की सुविधा प्रदान करनी चाहिए 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संदर्भ लाइन की छपाई के लिए विकल्प का समर्थन करता है।
grepवह मुद्रित फ़ाइल नामों को फ़िल्टर करने के बाद से काम नहीं करता है ।
pdfgrepसमाधान वास्तव में त्वरित और सरल खोजों के लिए अच्छा है, अक्सर मैं कुछ संदर्भ प्राप्त करना चाहता हूं, क्योंकि एक पंक्ति पर्याप्त रूप से सहायक नहीं होगी - इसलिए मैंने इस उत्तर में जोड़ा: उदाहरण के लिए, आप जोड़ सकते हैं आउटपुट के संदर्भ में 5 लाइनों को शामिल करने के लिए "अपने पैटर्न" से पहले -C5 विकल्प - pdfgrep इस का समर्थन नहीं करता है
pdfgrepबेकार है, यह फाइलों पर भारी मात्रा में बकवास की रिपोर्ट करता है जो इसे संभाल नहीं सकता है। दूसरी ओर आपके समाधान ने मदद की। तो कृपया इसे डिलीट न करें, 3 साल बाद भी यह मददगार है!
नहीं है pdfgrep जो करता है वास्तव में क्या इसके नाम से पता चलता है,।
pdfgrep -R 'a pattern to search recursively from path' /some/path
मैंने इसे सरल खोजों के लिए उपयोग किया है और यह ठीक काम किया है।
(डेबियन, उबंटू और फेडोरा में पैकेज हैं।)
चूंकि संस्करण 1.3.0 pdfgrep पुनरावर्ती खोज का समर्थन करता है। यह संस्करण Ubuntu में १२.१० (क्वांटल) के बाद से उपलब्ध है।
pdfgrepपास अब पुनरावर्तन का विकल्प है, जिसमें -R
रिकॉल यूनिक्स / लिनक्स के लिए एक शानदार पूर्ण-पाठ जीयूआई खोज अनुप्रयोग है जो पीडीएफ सहित दर्जनों विभिन्न स्वरूपों का समर्थन करता है। यहां तक कि यह सटीक पृष्ठ संख्या भी दर्ज कर सकता है और किसी क्वेरी की खोज अवधि दस्तावेज़ दर्शक को दे सकता है और इस प्रकार आप इसके जीयूआई से परिणाम पर कूद सकते हैं।
रिकॉल एक व्यवहार्य कमांड-लाइन इंटरफ़ेस और एक वेब-ब्राउज़र इंटरफ़ेस के साथ भी आता है ।
recoll / xapianकमांड लाइन (गैर-जीयूआई) में यह कैसे दिखेगा ? धन्यवाद!
recoll उपयोगकर्ता पुस्तिका कुछ संकेत हो सकता है, लेकिन प्रस्तावों एक नहीं बल्कि तकनीकी और "विषय से हटकर" पढ़ें ...
pwdext: पीडीएफ 'न्यूरो *' - स्टैकओवरफ़्लो बैकवॉट्स को पीडब्लूडी के आसपास खाती है।
मैंने इस विनाशकारी छोटी स्क्रिप्ट को बनाया । इसके साथ मजे करो।
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
}
$filename.इसे में पाइप करना चाहिए grep।
मुझे @ sjr का जवाब पसंद है लेकिन मुझे xargs vs -exec पसंद है। मुझे xargs अधिक बहुमुखी लगता है। उदाहरण के लिए- जब हम ऐसा करने के लिए समझ में आता है, तो हम कई सीपीयू का लाभ उठा सकते हैं।
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs'समानांतर-प्रसंस्करण क्षमता के बारे में। ध्यान रखें कि आपके --labelविकल्प तर्क हो जाएगा सचमुच {} , क्योंकि grepआदेश अब नहीं रह गया है के संदर्भ में निष्पादित किया जाता है findकी exec।
मुझे एक ही समस्या थी और इस प्रकार मैंने एक स्क्रिप्ट लिखी जो एक स्ट्रिंग के लिए निर्दिष्ट फ़ोल्डर में सभी पीडीएफ फाइलों को खोजती है और पीडीएफ फाइलों को क्वेरी स्ट्रिंग से मेल खाती है जो प्रिंट करती है।
शायद यह आपके लिए मददगार होगा।
pdfgrepसमाधान या sjr के वन-लाइनर की तुलना में बहुत धीमा हो गया , और इसने मुझे एक निरंतर प्रक्रिया के साथ छोड़ दिया, जो कि 100% सीपीयू थ्रेड का उपयोग करने के बाद भी मैं इसे समाप्त करने के लिए Ctrl-C।
यदि आप कमांड के बाद pdftotext उपयोग के साथ फ़ाइल नाम देखना चाहते हैं :
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
रिपग्रेप-ऑल नामक एक और उपयोगिता है , जो रिपप्रेप पर आधारित है ।
यह कार्यालय दस्तावेजों और फिल्मों की तरह सिर्फ पीडीएफ दस्तावेजों से अधिक संभाल सकता है, और लेखक का दावा है कि यह तेजी से है pdfgrep।
वर्तमान निर्देशिका को पुन: खोज करने के लिए कमांड सिंटैक्स, और केवल पीडीएफ फाइलों के लिए दूसरी एक सीमा:
rga 'pattern' .
rga --type pdf 'pattern' .
वहाँ एक खुला स्रोत आम संसाधन grep उपकरण crgrep है जो पीडीएफ फाइलों के भीतर खोज करता है लेकिन यह भी अभिलेखागार, डेटाबेस तालिकाओं, छवि मेटा-डेटा, पीओएम फ़ाइल निर्भरता और वेब संसाधनों में सामग्री जैसे अन्य संसाधन - और पुनरावर्ती खोज सहित इनका संयोजन करता है।
फाइल टैब के तहत पूरा विवरण बहुत कवर करता है कि उपकरण क्या समर्थन करता है।
मैंने एक ओपनसोर्स टूल के रूप में क्रेगप विकसित किया।
सबसे पहले अपनी सभी पीडीएफ फाइलों को टेक्स्ट फाइलों में बदलें:
for file in *.pdf;do pdftotext "$file"; done
फिर grepसामान्य उपयोग करें । यह विशेष रूप से अच्छा है क्योंकि यह तेज है जब आपके पास कई प्रश्न हैं और बहुत सारी पीडीएफ फाइलें हैं।
ag github.com/ggreer/the_silver_searcher के संयोजन में किया जाता है । माइक्रोसेकंड द्वारा psychedeliks Gb पर पार्स करने में सक्षम। जीवन के लिए फ्लैट फाइलें
आपको अपने पीडीएफ को टेक्स्ट फाइल में बदलने और फिर टेक्स्ट के अंदर सर्च करने के लिए पीडीएफ़ 2 टेक्स्ट जैसे कुछ टूल्स की आवश्यकता होती है। (आप शायद कुछ जानकारी या प्रतीकों को याद करेंगे)।
यदि आप एक प्रोग्रामिंग भाषा का उपयोग कर रहे हैं तो संभवतः इस उद्देश्य के लिए लिखी गई पीडीएफ़ लाइब्रेरी हैं। उदाहरण के लिए http://search.cpan.org/dist/CAM-PDF/ पर्ल के लिए