जवाबों:
ls *.txt | xargs cat >> all.txt
थोड़ा बेहतर काम कर सकते हैं, क्योंकि यह प्रत्येक फ़ाइल के बाद फिर से बनाने के बजाय all.txt के लिए संलग्न होगा।
वैसे, cat *.txt >all.txt
काम भी करेगा। :-)
यदि आपकी फ़ाइल के कुछ नाम में ',' या स्पेस विभाजक समस्या केxargs
कारण विफल हो जाएगा
सामान्य तौर पर कभी भी xargs
बिना -0 न चलाएं क्योंकि यह वापस आ जाएगा और किसी दिन आपको काटेगा।
इसके बजाय GNU समानांतर का उपयोग करने पर विचार करें:
ls *.txt | parallel cat > tmp/all.txt
या यदि आप पसंद करते हैं:
ls *.txt | parallel cat >> tmp/all.txt
जीएनयू समानांतर http://www.youtube.com/watch?v=OpaiGYxkSuQ के बारे में अधिक जानें
all.txt
एक ही डायरेक्टरी में एक फाइल है, इसलिए जब वह उसी फाइल से उसी फाइल में लिखना चाहता है तो बिल्ली भ्रमित हो जाती है।
दूसरी ओर:
ls *.txt | xargs cat > tmp/all.txt
यह आपके मौजूदा डायरेक्टरी में टेक्सटाइल्स से सबटैक्स में सबटैक्स में पढ़ा जाएगा (इसमें शामिल नहीं है *.txt
)।
तुम भी एक कमांड लाइन लंबाई सीमा के पार आ सकते हैं। उपयोग करने का कारण xargs
यह है कि यह इनपुट को सुरक्षित कमांड-लाइन-आकार के विखंडू में विभाजित करता है। तो, ऐसी स्थिति की कल्पना करें जिसमें आपके पास निर्देशिका में सैकड़ों हजारों .txt फाइलें हैं। ls *.txt
असफल हो जायेगी। आपको करने की आवश्यकता होगी
ls | grep .txt$ |xargs cat > /some/other/path/all.txt
.txt$
इस मामले में एक रेगुलर एक्सप्रेशन है जो सबकुछ मेल करता है। यह (इसलिए यह बिल्कुल वैसा नहीं है *.txt
, क्योंकि अगर आपके पास कोई फाइल है atxt
, तो *.txt
यह मेल नहीं खाएगा, लेकिन रेगुलर एक्सप्रेशन होगा।)
दूसरे पथ का उपयोग इसलिए है, क्योंकि अन्य उत्तरों ने बताया है, all.txt पैटर्न से मेल खाता है *.txt
इसलिए इनपुट और आउटपुट के बीच एक संघर्ष होगा।
ध्यान दें कि यदि आपके पास '
उनके नाम (और यह unmatched single quote
त्रुटि का कारण हो सकता है ) के साथ कोई फ़ाइल है , तो आप करना चाहेंगे
ls | grep --null .txt$ | xargs -0 cat > /some/other/path/all.txt
--Null विकल्प grep को \0
डिफ़ॉल्ट न्यूलाइन के बजाय (aka null) चरित्र द्वारा अलग किए गए आउटपुट का उपयोग करने के लिए कहता है , और -0
`xargs का विकल्प इसे उसी प्रारूप में इसके इनपुट की अपेक्षा करता है। यह तब भी काम करेगा, जब आपके पास उन में नए नामों के साथ फ़ाइल नाम हों।
ls
लिए उपयोग न करें । यदि आप वास्तव में उपयोग नहीं कर सकते हैंcat *.txt >all.txt
तो कोशिश करेंprintf '%s\0' *.txt | xargs -r0 cat >all
और फिरmv all all.txt
फाइल को स्वयं संदर्भित करने से बचें।