2010-12-22 22 views
7
$ echo "" > /home/jem/rep_0[1-3]/logs/SystemOut.log 
bash: /home/jem/rep_0[1-3]/logs/SystemOut.log: ambiguous redirect 

क्या मैं एक समय में कई फ़ाइलों को रीडायरेक्ट कर सकता हूं?बैश अस्पष्ट रीडायरेक्ट - एकाधिक फ़ाइलों पर रीडायरेक्ट

संपादित करें: कोई भी जवाब जो संदिग्ध फ़ाइल संदर्भ का उपयोग करने की अनुमति देता है?

उत्तर

16

क्या टी के लिए है कि:

command | tee file1 file2 file3 > file4 

टी भी stdout में आउटपुट है, तो आप या तो (जैसा कि ऊपर दिखाया गया है) एक रीडायरेक्ट के बाद एक फाइल में कहें, या /dev/null को stdout भेजने के लिए कर सकते हैं।

अपने मामले के लिए:

echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log >/dev/null 
0

नहीं। क्या tee दो बार का उपयोग कर के बारे में? "टी" कमांड को

echo "Your text" | tee file1 | tee file2 > file3 
+0

धन्यवाद। मैंने यह निर्दिष्ट करने के लिए उपेक्षित किया कि मैं वाइल्डकार्ड फ़ाइल संदर्भ का उपयोग करना चाहता हूं। – Synesso

+0

फिर लॉरेंस का जवाब देखें। – Robert

+1

आप 'tee' के लिए कई तर्क निर्दिष्ट कर सकते हैं। आपको इसे दो बार चलाने की जरूरत नहीं है। –

0

पाइप एक फाइल करने के लिए शाखा और बाहर एसटीडी, झरना टी आदेश

+0

धन्यवाद। मैंने यह निर्दिष्ट करने के लिए उपेक्षित किया कि मैं वाइल्डकार्ड फ़ाइल संदर्भ का उपयोग करना चाहता हूं। – Synesso

+1

आप उन्हें कैस्केड करने के बजाय 'tee' के लिए कई तर्क निर्दिष्ट कर सकते हैं। –

5

आप tee, जो stdin से पढ़ता है और stdout और फ़ाइलों के लिए लिखते हैं का उपयोग कर ऐसा कर सकते हैं। चूंकि tee भी stdout पर आउटपुट करता है, इसलिए मैंने इसे आउटपुट को /dev/null पर निर्देशित करना चुना है। ध्यान दें कि मौजूदा फ़ाइलों के विरुद्ध बैश विस्तार मिलान करता है, इसलिए जिन फ़ाइलों को आप लिखने की कोशिश कर रहे हैं, वे इस कमांड को काम करने के लिए निष्पादित करने से पहले मौजूद होना चाहिए।

$ echo "" | tee /home/jem/rep_0[1-3]/logs/SystemOut.log > /dev/null 

एक तरफ ध्यान दें के रूप में, "" आप echo के पास अनावश्यक है।

आपके प्रश्न के लिए सीधे प्रासंगिक नहीं है, लेकिन यदि आप बैश विस्तार पर भरोसा नहीं करते हैं तो आपके पास एकाधिक पाइप हो सकते हैं।

$ echo hello > foo > bar > baz 
$ cat foo bar baz 
hello 
hello 
hello 
1

आप ऐसा कर सकते हैं:

echo "" | tee /home/jem/rep_0{1..3}/logs/SystemOut.log 

stdout के लिए उत्पादन को दबाने के लिए, ऊपर बताए गए आदेशों के अंत से जोड़ें:

> /dev/null 

अपने प्रश्न में echo आदेश (जो खाली उद्धरण की आवश्यकता नहीं है) बस फाइलों में एक नई लाइन डालता है। यदि आप खाली फाइलें बनाना चाहते हैं, तो touch कमांड का उपयोग करें।

+0

न केवल एक नई लाइन के साथ सामग्री को ओवरराइट करता है। –

1

मेरे पास यह वही प्रश्न था और सिर्फ वाइल्डकार्ड के साथ उदाहरण जोड़ना चाहता था क्योंकि यह दिखाया नहीं गया था। मुझे लगता है कि यह वही है जो आप खोज रहे थे:

echo "" | tee *.log 
+0

बिल्कुल मुझे क्या चाहिए, सही। – PoweredByRice

संबंधित मुद्दे