एक कमांड के साथ सभी पीडीएफ फाइलों को पाठ (एक फ़ोल्डर के भीतर) में कैसे परिवर्तित किया जाए?


18

मुझे पता है कि मैं पीडीएफ फाइलों को एक-एक करके टेक्स्ट फाइलों में बदल सकता हूं:

$ pdftotext filename.pdf

लेकिन क्या कोई एकल कमांड है जो अलग-अलग फ़ाइल नामों को निर्दिष्ट किए बिना उस रूपांतरण को बनाएगी ताकि उन सभी को परिवर्तित किया जा सके?

मैं यहाँ विकिपीडिया पर देखता हूँ कि, "वाइल्डकार्ड (*), उदाहरण के लिए $ pdftotext * pdf, कई फ़ाइलों को परिवर्तित करने के लिए, इसका उपयोग नहीं किया जा सकता क्योंकि pdftotext को केवल एक फ़ाइल नाम की उम्मीद है।"

pdf  text  convert  batch 

जवाबों:


23

निम्नलिखित वर्तमान निर्देशिका में सभी फ़ाइलों को परिवर्तित करेगा:

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

इसका केवल एक ही कमांड है, इसे टर्मिनल में एक लाइन में टाइप किया जा सकता है (एक-लाइन-सिंटैक्स में लूप के लिए इसके अंदर pdftotext, जो कि ऑप ने जो पूछा है)
सैम

लूप के काम करने के तरीके के बारे में अधिक जानकारी के लिए इन लिंक को देखें: cyberciti.biz/faq/bash-for-loop thegeekstuff.com/2011/07/bash-for-loop-examples
Sam

क्या यह गैर-पीडीएफ फाइलों के साथ समस्या पैदा नहीं करेगा?
cprofitt

क्या यह "filename.pdf.txt" जैसी फ़ाइलों का उत्पादन नहीं करेगा?
रयान सी। थॉम्पसन

हां, अगर यह समस्या है, तो हम 'sed' या 'awk' का उपयोग करके .pdf एक्सटेंशन को हटा सकते हैं, लेकिन यह कमांड में जटिलता जोड़ देगा
सैम

8
ls *.pdf | xargs -n1 pdftotext

xargsअक्सर एक छोटे से बदलाव के साथ एक ही कमांड को कई बार चलाने का एक त्वरित समाधान होता है। -n1विकल्प लगता है कि केवल एक पीडीएफ फाइल एक बार में pdftotext में भेजा जाता है बनाता है।

संपादित करें: यदि आप फ़ाइल नाम में रिक्त स्थान के बारे में चिंतित हैं और आप इस विकल्प का उपयोग कर सकते हैं:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext

कृपया मेरे उत्तर को देखें: क्या उस आदेश को अनुकूलित किया जा सकता है ताकि वहां बताई गई समस्या से बचा जा सके? इसका मतलब यह नहीं है कि आपका समाधान अच्छा नहीं है, इसके विपरीत, यह बहुत विशिष्ट है कि यहां अन्य विकल्प नहीं हैं। लेकिन मैं सिर्फ उत्सुक था

2
वैकल्पिक रूप से:ls *.pdf | xargs -L1 -I% pdftotext % %.txt
kenorb

2

एक बैश स्क्रिप्ट लिखें

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

या इसे एक-पंक्ति कमांड में निम्न प्रकार से लिखें:

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

आशा है कि ये आपकी मदद करेगा। मेरे पास इस पर परीक्षण करने के लिए .pdfs का एक बड़ा समूह नहीं है, लेकिन मैं अपनी .flac फ़ाइलों को टॉगल फ़ाइलों में बदलने के लिए इस रणनीति का उपयोग करता हूं।


क्या यह उस फ़ोल्डर में टर्मिनल खोलने और मैन्युअल रूप से पथ डालने के बजाय एक कमांड चलाने से हो सकता है?

क्या आप इसे यहाँ पेस्ट नहीं कर सकते हैं और इसे अपने उत्तर में डाल सकते हैं? यह एक अच्छा जवाब होगा। मैं आपके द्वारा पोस्ट किए गए भाग को हटाकर केवल अच्छे सूत्र तक नहीं पहुँच

जब मैंने शुरू में सुझाव दिया था, तो मुझे उनके परीक्षण का मौका नहीं मिला।
cprofitt

1

मुझे सैम और रयान थॉम्पसन के साथ-साथ अन्य सभी उत्तरदाताओं के लिए पहले धन्यवाद देना होगा - मेरे जवाब के लिए यहां कुछ भी नहीं है, बल्कि थूनर की कस्टम क्रियाओं में उनके समाधान जोड़ने की संभावना से संबंधित भिन्नता है:

इसलिए, किसी भी टर्मिनल कमांड के रूप में, एक फ़ोल्डर के भीतर सभी पीडीएफ फाइलों को टेक्स्ट में बदलने के लिए एक आदेश को थून फाइल प्रबंधक में कस्टम कार्यों की सूची में रखा जा सकता है

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

वहाँ की कमान है find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext, ( रयान थॉम्पसन से ) यह वह है जिसे मैं उपयोग करना पसंद करता हूं, लेकिन यह एक बुरा मोड़ है ... देखें ...

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

... यह एक मज़ेदार आदेश है, जिसका उपयोग देखभाल के साथ किया जाता है: यह फ़ोल्डर के भीतर सभी पीडीएफ को पाठ में परिवर्तित करने के लिए बनाया गया है, जहां इसे निकाल दिया जाता है, इसलिए, यदि इसे घर के फ़ोल्डर में गलती से निकाल दिया जाता है, तो यह कुछ अवांछित होगा प्रभाव: आपके सभी पीडीएफ़ पाठ में परिवर्तित हो जाएंगे!

(मैंने इसे इस तरह से परीक्षण किया: डेस्कटॉप पर "परीक्षण" नामक एक फ़ोल्डर बनाया और इसमें एक पीडीएफ फाइल और फ़ोल्डरों के भीतर फ़ोल्डर्स की एक श्रृंखला ( /Desktop/test/a/b/c/e/f/g/h/i) एक ही पीडीएफ युक्त प्रत्येक)। उस आदेश को चलाने से /Desktop/testसभी pdfs को उस में परिवर्तित कर दिया है। "मैं" फ़ोल्डर।)

(मैं इस आदेश को समायोजित करने के लिए टिप्पणियों का स्वागत करूंगा ताकि उस जोखिम से बचा जा सके।)

सैमfor file in *.pdf; do pdftotext "$file" "$file.txt"; done से आने वाले अन्य ( ) के साथ बदलने से समस्या से बचा जाता है।

लेकिन कुछ मामलों में कोई भी ठीक उसी तरह से कामना कर सकता है जो रयान का समाधान करता है!


1
आप findउपनिर्देशिकाओं में कमांड का उपयोग करके खोज से बच सकते हैं -maxdepth 1। इसके अलावा, जब यह thunar के कस्टम कार्यों सुविधा में डाल, तो आप शायद बदल दिया जाना चाहिए find .साथ find %Fthunar ठीक से चयनित निर्देशिका के पथ पारित करने के लिए अनुमति देने के लिए।
रयान सी। थॉम्पसन

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

यह एक नमूनाPdf.txt आउटपुट करता है ।

मैंने इसका उपयोग करने की कोशिश की, जैसा कि user2357111317 ने सुझाव दिया है और पाठ के लेआउट को संरक्षित करने के लिए -lay भी शामिल है

for file in *.pdf; do pdftotext -layout "$file"; done
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.