जवाबों:
बैश बिलिन पुनर्निर्देशन (tldp) का उपयोग करें :
cat file2 >> file1
sudo
को प्री-पेंड करेंगे cat
(और संकेत दिए जाने पर क्रेडेंशियल दर्ज करें)।
tee
कार्यक्रम: cat 1 | tee -a 2 3
। आप --append
(या -a
संक्षेप में) स्विच के बाद जितनी चाहें उतनी फाइलें डाल सकते हैं ।
cat file2 >> file1
>>
ऑपरेटर नाम की फ़ाइल को आउटपुट संलग्न कर देता है या नामित फ़ाइल बनाता है अगर यह मौजूद नहीं है।
cat file1 file2 > file3
यह एक के लिए दो या अधिक फ़ाइलों को समाप्त करता है। आपके पास जितनी जरूरत हो उतनी स्रोत फाइलें हो सकती हैं। उदाहरण के लिए,
cat *.txt >> newfile.txt
अपडेट 20130902
टिप्पणी में यूमिरो सुझाव देता है "कोशिश मत करो cat file1 file2 > file1
।" इसका परिणाम अपेक्षित परिणाम नहीं हो सकता है, क्योंकि पुनर्निर्देशन प्राप्त करने वाली फ़ाइल >
को निष्पादित होने से पहले कमांड को बाईं ओर तैयार किया जाता है। इस मामले में, पहले file1
शून्य लम्बाई तक छोटा कर दिया और, तो उत्पादन के लिए खोला जाता है cat
अब शून्य लंबाई फ़ाइल प्लस की सामग्री को श्रेणीबद्ध करने के आदेश के प्रयास file2
में file1
। इसका परिणाम यह होता है कि मूल सामग्री file1
खो जाती है और उसके स्थान पर इसकी एक प्रति होती है, file2
जिसकी शायद वह उम्मीद नहीं थी।
अपडेट 20160919
टिप्पणियों में टेंपररी बैकिंग सूचना / स्रोतों को जोड़ने का सुझाव देती है। एक आधिकारिक संदर्भ के लिए, मैं linuxcommand.org पर sh man पेज पर किस तरह के पाठक को निर्देशित करता हूं :
एक कमांड निष्पादित होने से पहले, इसके इनपुट और आउटपुट को शेल द्वारा व्याख्या किए गए विशेष नोटेशन का उपयोग करके पुनर्निर्देशित किया जा सकता है।
हालांकि इससे पाठक को पता चलता है कि उन्हें क्या जानना है, यह याद रखना आसान है यदि आप इसे नहीं ढूंढ रहे हैं और शब्द द्वारा कथन शब्द को पार्स कर रहे हैं। यहां सबसे महत्वपूर्ण शब्द 'पहले ’है। आदेश निष्पादित होने से पहले पुनर्निर्देशन पूरा हो गया है (या विफल) ।
उदाहरण के मामले में cat file1 file2 > file1
शेल पहले पुनर्निर्देशन करता है ताकि I / O हैंडल वातावरण में जगह में हो जिसमें कमांड निष्पादित होने से पहले निष्पादित हो जाएगा।
एक फ्रेंडली संस्करण जिसमें रीडायरेक्शन पूर्ववर्तीता लंबाई में कवर की गई है, को इयान एलन की वेब साइट पर लिनक्स कोर्सवेयर के रूप में पाया जा सकता है। उनके I / O पुनर्निर्देशन नोट्स पृष्ठ में विषय पर कहने के लिए बहुत कुछ है, जिसमें यह अवलोकन भी शामिल है कि पुनर्निर्देशन एक कमांड के बिना भी काम करता है। इस गोले को पास करना:
$ >out
... एक खाली फ़ाइल बनाता है जिसका नाम है। शेल पहले I / O पुनर्निर्देशन सेट करता है, फिर एक कमांड की तलाश करता है, कोई नहीं ढूंढता है, और ऑपरेशन पूरा करता है।
cat file1 file2 > file1
- यह काम नहीं करेगा जैसे आप शायद इंतजार कर रहे हैं।
>>
जो फ़ाइल को संशोधित करेगाfile1
। T.ob ने अपने जवाब को स्पष्ट करने के बजाय केवल तथ्य प्रस्तुत करने के लिए दौड़ने का एक बेहतर काम किया, जो कि वास्तव में गलत था। प्रश्न के पाठ के आधार पर, मेरा मानना है कि cat file1 file2 > file3
यह उचित आदेश है जो @ नासिर की तलाश में था।
>
पहले के दाईं ओर ऑपरेशन को निष्पादित किया जाता है। इसलिए क्रियान्वित करने वाला cat file1 file2 > file1
पहले क्लोबर होगा, file1
फिर स्वयं पर अब-शून्य-लंबाई फ़ाइल को कॉपी करने का प्रयास करेगा । यह तब समझ में आता है जब आप उस क्रम के बारे में सोचते हैं जिसमें परिचालन हो सकता है और होना चाहिए लेकिन इतना सूक्ष्म है कि यह कई लोगों को आश्चर्यचकित कर देता है। तो अगर और कुछ नहीं, यूमिरो और आपने उत्तर में एक और सुधार के लिए प्रेरित किया है। उसके लिए धन्यवाद!
>>
संलग्न हो जाती है और फ़ाइल को >
बदल देती है।
नोट : यदि आपको sudo का उपयोग करने की आवश्यकता है , तो यह करें:
sudo bash -c 'cat file2 >> file1'
केवल sudo
कमांड के आगे बढ़ने की सामान्य विधि विफल हो जाएगी, क्योंकि विशेषाधिकार वृद्धि आउटपुट पुनर्निर्देशन में नहीं ले जाती है।
cat file2 | sudo tee -a file1 > /dev/null
केवल संदर्भ के लिए, ddresoscope का उपयोग करना कार्य को प्राप्त करने का एक आसान तरीका प्रदान करता है यदि, उदाहरण के लिए, आपके पास बड़ी फाइलें हैं और बाद में कुछ बिंदुओं पर रुकने की आवश्यकता है:
ddrescue -o $(wc --bytes file1 | awk '{ print $1 }') file2 file1 logfile
logfile
महत्वपूर्ण बिट है। आप प्रक्रिया को बाधित कर सकते हैं Ctrl-C
और इसे फिर से उसी कमांड को निर्दिष्ट करके logfile
फिर से शुरू कर सकते हैं और ddrescue पढ़ेगा और फिर से शुरू करेगा जहाँ से इसे छोड़ा था। -o A
झंडा ddrescue बताता बाइट से शुरू करने के लिए एक आउटपुट फ़ाइल में ( file1
)। तो wc --bytes file1 | awk '{ print $1 }'
बस file1
बाइट्स का आकार निकालता है (आप केवल आउटपुट में पेस्ट कर सकते हैंls
यदि आप चाहें तो हैं)।
जैसा कि टिप्पणियों में ngks द्वारा बताया गया है , नकारात्मक पक्ष यह है कि ddresoscope संभवतः डिफ़ॉल्ट रूप से स्थापित नहीं किया जाएगा, इसलिए आपको इसे मैन्युअल रूप से इंस्टॉल करना होगा। दूसरी जटिलता यह है कि ddrescue के दो संस्करण हैं जो आपके रिपॉजिटरी में हो सकते हैं: अधिक जानकारी के लिए इस अक्कुबंटु प्रश्न को देखें । आप जो संस्करण चाहते हैं वह GNU ddrescue है, और डेबियन-आधारित सिस्टम पर नामित पैकेज है gddrescue
:
sudo apt install gddrescue
अन्य distros के लिए ddrescue के GNU संस्करण के लिए अपने पैकेज प्रबंधन प्रणाली की जाँच करें ।
एक और समाधान:
cat file1 | tee -a file2
tee
उदाहरण के लिए, आप जितनी चाहें उतनी फ़ाइलों के लिए आवेदन कर सकते हैं।
cat file1 | tee -a file2 file3 file3
की सामग्री को संलग्न कर देगा file1
करने के लिए file2
, file3
और file4
।
आदमी पृष्ठ से:
-a, --append
append to the given FILEs, do not overwrite
cat
आसान समाधान हो सकता है, लेकिन जब हम बड़ी फ़ाइलों को बदलते हैं तो यह बहुत धीमी हो जाती है, find -print
आपको बचाने के लिए, हालांकि आपको एक बार बिल्ली का उपयोग करना होगा।
amey@xps ~/work/python/tmp $ ls -lhtr
total 969M
-rw-r--r-- 1 amey amey 485M May 24 23:54 bigFile2.txt
-rw-r--r-- 1 amey amey 485M May 24 23:55 bigFile1.txt
amey@xps ~/work/python/tmp $ time cat bigFile1.txt bigFile2.txt >> out.txt
real 0m3.084s
user 0m0.012s
sys 0m2.308s
amey@xps ~/work/python/tmp $ time find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1
real 0m2.516s
user 0m0.028s
sys 0m2.204s
time (find . -maxdepth 1 -type f -name 'bigFile*' -print0 | xargs -0 cat -- > outFile1)
और यह आपकी बिल्ली के लिए केवल कमांड के समान परिणाम देगा।
आप इसके बिना भी कर सकते हैं cat
, हालांकि ईमानदारी cat
से अधिक पठनीय है:
>> file1 < file2
>>
संलग्न कर देता है STDIN करने file1
और <
उदासीनता file2
के लिए STDIN ।