जवाबों:
यह आउटपुट को all.txt में जोड़ता है
cat *.txt >> all.txt
यह सभी को अधिलेखित करता है
cat *.txt > all.txt
echo *.txt | xargs cat > all.txt
बस याद रखें, अब तक दिए गए सभी समाधानों के लिए, शेल उस क्रम को तय करता है जिसमें फाइलें समवर्ती होती हैं। बैश, IIRC के लिए, यह वर्णानुक्रम है। यदि आदेश महत्वपूर्ण है, तो आपको या तो फाइलों को उचित रूप से नाम देना चाहिए (01file.txt, 02file.txt, आदि ...) या उस क्रम में प्रत्येक फ़ाइल को निर्दिष्ट करें जिसे आप इसे संक्षिप्त करना चाहते हैं।
$ cat file1 file2 file3 file4 file5 file6 > out.txt
Windows शेल कमांड type
यह कर सकता है:
type *.txt >outputfile
टाइप type
कमांड भी stderr को फ़ाइल नाम लिखता है, जिसे >
पुनर्निर्देशित ऑपरेटर द्वारा कब्जा नहीं किया जाता है (लेकिन कंसोल पर दिखाई देगा)।
आप copy
फ़ाइलों को सुरक्षित करने के लिए Windows शेल का उपयोग कर सकते हैं ।
C:\> copy *.txt outputfile
मदद से:
फ़ाइलों को जोड़ने के लिए, गंतव्य के लिए एक एकल फ़ाइल निर्दिष्ट करें, लेकिन स्रोत के लिए कई फाइलें (वाइल्डकार्ड या फ़ाइल 1 + फ़ाइल 2 + फ़ाइल स्वरूप का उपयोग करके)।
सावधान रहें, क्योंकि इनमें से कोई भी विधि बड़ी संख्या में फ़ाइलों के साथ काम नहीं करती है। व्यक्तिगत रूप से, मैंने इस लाइन का उपयोग किया:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
संपादित करें: जब किसी टिप्पणी में कहा, आप बदल सकते हैं $(ls | grep ".txt")
साथ$(ls *.txt)
संपादित करें: @gnourf_gnourf विशेषज्ञता के लिए धन्यवाद, ग्लोब का उपयोग एक निर्देशिका में फ़ाइलों पर पुनरावृति करने का सही तरीका है। नतीजतन, निन्दा वाले भावों $(ls | grep ".txt")
को प्रतिस्थापित करना चाहिए *.txt
(लेख यहां देखें )।
अच्छा समाधान
for i in *.txt;do cat $i >> output.txt;done
for i in $(ls *.txt);do cat $i >> output.txt;done
?
ls | grep
एक गंभीर रूप से खराब एंटीपार्टर्न है)।
ls *.txt
अगर बहुत सारी फाइलें (तर्क सूची बहुत लंबी त्रुटि) हैं तो क्या वह विफल नहीं होगी ?
शेल के साथ सबसे व्यावहारिक तरीका बिल्ली कमांड है। अन्य तरीकों में शामिल हैं,
awk '1' *.txt > all.txt
perl -ne 'print;' *.txt > all.txt
cat
विधि का उपयोग करके समीपवर्ती फ़ाइलों से अंतिम पंक्ति और पहली पंक्ति को हटा दिया जाएगा।
इस दृष्टिकोण के बारे में कैसे?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
-maxdepth 1
करने के लिए find
आदेश।
sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
उदाहरण के लिए:
type C:\*.txt > C:\1\all.txt
यह C: \ Folder में सभी txt फ़ाइलों को लेगा और इसे all.txt के नाम से C: \ 1 फ़ोल्डर में सेव करेगा।
या
type [source folder]\* > [destination folder]\[file name].[File extension]
उदाहरण के लिए:
type C:\* > C:\1\all.txt
यह फ़ोल्डर में मौजूद सभी फ़ाइलों को ले जाएगा और C: \ 1 \ all.txt में सामग्री डाल देगा
आप इस तरह कर सकते हैं:
cat [directory_path]/**/*.[h,m] > test.txt
यदि आप {}
उन फ़ाइलों के विस्तार को शामिल करने के लिए उपयोग करते हैं जिन्हें आप ढूंढना चाहते हैं, तो अनुक्रमण समस्या है।
जब आप किसी समस्या में भाग लेते हैं, जहाँ वह all.txt को all.txt में रखती है, तो आप कोशिश कर सकते हैं कि all.txt विद्यमान है या नहीं, यदि मौजूद नहीं है, तो निकालें
ऐशे ही:
[ -e $"all.txt" ] && rm $"all.txt"
cat *.txt > all.txt
>
यदि यह मौजूद है तो ऑलराइट को ऑलराइट कर देता है। >>
मौजूदा फाइल में डेटा जुड़ता है
यह सब बुरा है ...।
ls | grep *.txt | while read file; do cat $file >> ./output.txt; done;
आसान सामान।
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;