पाठ फ़ाइलों में शामिल होने के लिए कैसे?


21

मैंने कई दस्तावेज़ों को txt के रूप में सहेजा है। मैं उन्हें एक साथ प्रिंट करना चाहता हूं इसलिए पहले मैं उन्हें एक फाइल में एक साथ चाहता हूं। इस मामले में आदेश मायने नहीं रखता।

मैं एक ऐसा समाधान चाहता हूं जिसमें विलय होने वाली फ़ाइलों के नाम लिखना शामिल नहीं है, लेकिन एक वह है जो फ़ोल्डर में सभी txt फ़ाइलों को मर्ज कर देगा।

क्या मैं इसे कमांड या कुछ GUI के साथ कर सकता हूँ?


मैंने यहां देखा । पता नहीं कैसे उपयोग करें join

जवाबों:


43

catआउटपुट पुनर्निर्देशन के साथ उपयोग करें । सिंटेक्स: cat file [file] [[file] ...] > joined-file

केवल दो फ़ाइलों के साथ उदाहरण (आप कई और अधिक हो सकते हैं):

$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text

यदि आपके पास "कई दस्तावेज" हैं, तो शेल ग्लोबिंग (पैटर्न) का उपयोग करें:

cat input-files-dir/* > joined-file

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


फ़ाइल प्रकारों

यह सिर्फ एक साथ फाइलों (गोंद) को मिलाएगा जैसा कि आप कागज और टेप के साथ करेंगे। यह वास्तविक फ़ाइल प्रारूप को संभालने में सक्षम होने के बारे में परवाह नहीं करता है। यह पाठ फ़ाइलों के लिए काम करेगा, लेकिन पीडीएफ, ओडीटी आदि के लिए नहीं। ठीक है, यह उन्हें एक साथ गोंद देगा, लेकिन यह एक वैध पीडीएफ / ओडीटी नहीं है।


जुड़ने का आदेश

जैसा कि फोइबोस ने बताया कि शेल ग्लोबिंग फ़ाइल नामों के वर्णमाला क्रम में होगा। इस तरह से बैश और शेल ग्लोबिंग काम करता है।


input file is output fileत्रुटि के बारे में परिशिष्ट

जब इनपुट फ़ाइलों का पैटर्न आउटपुट के रूप में बहुत ही फ़ाइल से मेल खाता है, तो यह एक त्रुटि का कारण होगा। यह एक सुरक्षा सुविधा है। उदाहरण: cat *.txt > out.txtदूसरी बार चलाने के कारण यह होगा।

आप इसके बारे में क्या कर सकते हैं:

  • वास्तविक इनपुट फ़ाइलों से मिलान करने के लिए अधिक विशिष्ट पैटर्न चुनें, आउटपुट नाम से मेल नहीं खाते। उदाहरण: *.txtआउटपुट फ़ाइल के साथ इनपुट फ़ाइल पैटर्न output.outटकराएगा नहीं।
  • विभिन्न निर्देशिकाओं में कार्य करें। ऊपर दिए गए उदाहरण में मैंने input-files-dirसभी फ़ाइलों को चालू करने के लिए एक अलग निर्देशिका का उपयोग किया है , और वर्तमान कार्यशील निर्देशिका के लिए आउटपुट। इससे यह त्रुटि प्राप्त करना असंभव हो जाता है।

@cipricus हाँ, लेकिन यह बहुत बुनियादी शेल ग्लोबिंग (पैटर्न) है। lsकेवल मैचों को सूचीबद्ध करने के लिए अपने पैटर्न का उपयोग करें। उदाहरण के ls *.txtलिए देखें कि क्या मिलान किया जा रहा है।
gertvdijk

2
@cipricus कैसे बिल्ली के बारे में * .txt> JoinFile.txt?
सादी

1
यह वास्तव में अधिक सामान्य ज्ञान है, बिल्ली पहले सभी .txt फ़ाइलों को पकड़ती है और दूसरा यह उनके साथ जुड़ती है और तीसरा यह एक नई .txt फ़ाइल बनाती है जिसे पहले चरण में पकड़ा नहीं जा सकता; ;-)
Sadi

1
@cipricus यह सिर्फ फाइलों से जुड़ता है। जैसे आप गोंद और टेप के साथ कागज के टुकड़ों का उपयोग करते हैं! पीडीएफ की तरह अधिकांश "दस्तावेज़" फ़ाइल प्रारूप, जो संपीड़ित हैं यह अनुमति नहीं देता है। एक पीडीएफ संपादक का उपयोग करें। लेकिन वैसे भी, आपका प्रश्न पाठ फ़ाइलों के बारे में था ।
gertvdijk

1
मैं पूरी तरह से समझता हूं कि आपके द्वारा सुझाई गई विधि (एक सबदिर बनाना, फाइलें चलाना और फिर जुड़ना) कुछ मामलों में बेहतर तरीका हो सकता है। लेकिन अगर हम वर्तमान निर्देशिका बिल्ली * .txt> JoinFile.txt में सभी पाठ फ़ाइलों (सभी में .txt एक्सटेंशन) में शामिल होना चाहते हैं, तो यह पूरी तरह से काम करता है। मैंने अभी इसे जिज्ञासा से बाहर का परीक्षण किया और यह काम करता है, और ऐसा लगता है कि सिप्रिकस ने भी एक ही परिणाम पाया है। (और सिस्टम ने शिकायत करना शुरू कर दिया है कि हमें यहां चैटिंग नहीं करनी चाहिए, अन्यथा मैं आपसे पूछूंगा कि क्या आप इस नौसिखिए को सिखा सकते हैं कि आप टूलबार के बिना इन टिप्पणियों में प्रारूपण का उपयोग कैसे कर सकते हैं ;-)
Sadi

12

एक आसान तरीका है कि बिल्ली का उपयोग करके है:

cat file1 file2 > joined_file

यदि आप अभी जारी करते हैं cat file1 file2तो आपको मानक आउटपुट पर दोनों फाइलें दिखाई देंगी। उपयोग करके >, आप मानक आउटपुट को किसी फ़ाइल में रीडायरेक्ट कर रहे हैं। यह एक और कमांड के साथ भी काम करेगा।


कृपया प्रश्न पढ़ें। आप व्यक्तिगत फ़ाइल नामों को निर्दिष्ट करने के लिए कह रहे हैं, जो ओपी विशेष रूप से नहीं करना चाहता था!
श्री

2
वह मूल प्रश्न में नहीं था । मैंने अपने उत्तर को अपडेट नहीं किया है क्योंकि अधिक पूर्ण उत्तर दिखाई दिए हैं।
जॉर्ज सुआरेज़ डे लिस

@ JorgeSuárezdeLis जबकि यह जवाब सीधे ओपी को उसके प्रश्न के साथ मदद नहीं करता है, कृपया ध्यान दें कि यह उत्तर शायद किसी और की मदद करेगा, जिसके पास बस कुछ फाइलें हैं जो वे मर्ज करना चाहते हैं। (ओह हे, मेरी तरह! धन्यवाद! ^ - ^) +1
साउथा

@ जोर्जसुअरेज़लिस वास्तव में। आपने सवाल का संशोधन 2 पूरी तरह से ठीक जवाब दिया है। कुछ ही मिनटों बाद, संशोधन 3 , उत्तरों के बारे में आवश्यकताओं को बदल दिया।
gertvdijk

5

इसे एक साधारण लूप के साथ करें:

for i in *.txt; do cat "$i" >> complete.txt; done

>> फ़ाइल में जाता है।

नोट: यदि किसी कारण से आपको फिर से कमांड चलाना है, तो आपको हटाना होगा complete.txt, अन्यथा आप फ़ाइल को स्वयं लिख देंगे, जो काम नहीं करती है।


5
यह भी काम करेगा, लेकिन यदि आप तर्कों का उपयोग कर सकते हैं तो मुझे फॉर-लूप की आवश्यकता नहीं है cat
gertvdijk

1
हां, आप बिल्कुल सही हैं। मैं सिर्फ sord आदेश का उपयोग करने के बारे में निश्चित नहीं हूं cat *.txt। लूप के लिए हल किया जाना चाहिए।
फोबियोस


हां, यह बिल्कुल उसी तरह का गोला है। इससे कोई फर्क नहीं पड़ता कि आप इसे forबैश में या कहीं और इस्तेमाल करते हैं या नहीं।
gertvdijk

4

यदि आप जिन फ़ाइलों को सभी अंत में संयोजित करना चाहते हैं .txt, वे इसे सरल रखें:

cat *.txt > combined.txt

यदि निर्देशिका में केवल पाठ फ़ाइलें हैं, तो यह भी सरल है:

cat * > combined.txt

(ध्यान दें कि एक बार बनाने के बाद combined.txt, इसे फिर से करना, इसे विस्तार में शामिल करना *, विषम व्यवहार के लिए अग्रणी होगा)।

यदि आप निर्देशिका में कुछ फ़ाइलों का चयन करना चाहते हैं और दूसरों को नहीं, तो सबसे अच्छा है यदि फ़ाइलनाम आपको उन सभी को अलग करने की अनुमति देता है जो आप चाहते हैं। यदि नहीं, तो आप कल्पना कर सकते हैं find। लेकिन मुझे संदेह है कि आपको उस दूर जाने की आवश्यकता है।


thnx। यदि आप स्वीकृत उत्तर के लिए टिप्पणियों को देखते हैं, तो सादी ने एक टिप्पणी में बिल्कुल सुझाव दिया। अगर आपका जवाब पहले होता, तो मुझे आपकी जरूरत होती। मेरा भी ध्यान रखें: कस्टम मेनू में कहा कि

प्रतिक्रिया के लिए धन्यवाद। हाँ, मैं इसे अब देख रहा हूँ, यह थोड़ा अस्पष्ट था ...
एलेक्सिस

4

Thunar कस्टम कार्रवाई स्क्रिप्ट द्वारा लिखित cipricus भी एक ऐसी ही लिखने के लिए मुझे प्रेरित नॉटिलस स्क्रिप्ट और मैंने सोचा कि यह दूसरों जो इस संबंध में संदर्भ के लिए इस क्यू एंड ए पर देखने के लिए उपयोगी हो सकता है। तो यहाँ है:

#!/bin/sh
#Nautilus Script to join selected text files in a single file and open the joined file with default text editor
#
IFS=$'\n'
FILENAME="JoinedFile_$(date +%Y-%m-%d-%H-%M-%S).txt"
cat "$@" > "$FILENAME"
xdg-open "$FILENAME"

@ डेविड फ़ॉस्टर एडिट के लिए धन्यवाद। मुझे पुराने संस्करण के साथ कोई समस्या नहीं थी (मेरे सीमित परीक्षण मामलों के साथ) और मुझे इस बेहतर संस्करण के साथ कोई समस्या नहीं दिख रही है। क्षमा करें यदि पिछले संस्करण में कोई दोष होने के कारण मुझे कोई असुविधा हुई हो।
सादी

यह त्रुटिपूर्ण नहीं था, लेकिन इसमें एक अनावश्यक लूप था, जिसने कोड को समझने में अधिक कठिन बना दिया, imho।
डेविड फ़ॉस्टर

2

यह थानार के कस्टम के कार्यों में काम करने के लिए इन समाधानों को लगाने से संबंधित एक पूरक और अन्य उत्तरों के लिए भिन्नता है।

उनमें से सभी इस तरह से उपयोग करने योग्य नहीं हैं, लेकिन कुछ हैं।

मैंने सोचा कि सबसे दिलचस्प होगा चुनिंदा फाइलों को थुनार के संदर्भ मेनू से मर्ज करना

यह एक भिन्नता है जो सादी द्वारा एक टिप्पणी में gertvdijk के उत्तर के लिए सुझाई गई थी :

   cat %N > JoinedFile

केवल चयनित फ़ाइलें शामिल हो जाएंगी। पाठ फ़ाइलों के लिए उपस्थिति की शर्तों को प्रतिबंधित करें।

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

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


साडी का विशेष धन्यवाद जिसकी टिप्पणी ने मुझे मेरी समस्या का सबसे स्पष्ट और सटीक समाधान प्रदान किया।

मैंने gertvdijk के उत्तर को निश्चित माना । न केवल यह साडी की टिप्पणी के लिए अवसर था, बल्कि दूसरों के लिए और अधिक मूल्य का प्रतीत होता है, एक अच्छी तरह से तर्क और पूर्ण समाधान प्रदान करता है (यद्यपि मेरे सीएलआई पढ़ने के कौशल से कुछ ऊपर)।


2

आप findयह भी कोशिश कर सकते हैं,

find . -name "*.txt" -type f -exec cat {} + > file

यह .txtवर्तमान निर्देशिका के अंदर फ़ाइलें पाता है और catप्रत्येक स्थापित फ़ाइल पर कमांड निष्पादित करता है। अंत में पूरे आउटपुट को फ़ाइल नाम पर पुनर्निर्देशित किया गया file(वर्तमान में ही बनाया गया)।

स्पष्टीकरण:

.                  # current directory

-name              # helps to find only .txt files.

-type f            # Only files

-exec cat {} +     # helps to run cat command on the founded .txt files.

>                  # Output redirection operator

file               # to store final output.

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