2013-03-28 7 views
5

टीई मानक इनपुट से पढ़ता है और मानक आउटपुट और फ़ाइल को लिखता है।एक संपीड़ित फ़ाइल के लिए टी

some_command |& tee log 

क्या यह संपीड़ित फ़ाइल को लिखने के लिए संभव है?

some_command |& tee -some_option log.bz2 

टी ऐसा नहीं कर सकते हैं, तो क्या कोई अन्य आदेश है?

मैं

some_command |& bzip2 > log.bz2 

साथ एक संपीड़ित फ़ाइल के लिए उत्पादन अनुप्रेषित कर सकते हैं लेकिन इस आदेश के साथ, मानक आउटपुट में उत्पादन याद आ रही है।

उत्तर

4

आप ठीक stderr पर अपने उत्पादन हो रही है, आप इसे अनुप्रेषित कर सकते हैं:

some_command | tee /dev/stderr | bzip2 > log.bz2 

यह दोनों stdout और stderr (| tee /dev/stderr) के उत्पादन टीज़। तो फिर यह पाइप bzip2 को stdout (| bzip2 > log.bz2)

+0

अंतिम '2> और 1' का अर्थ है कि 'bzip2' द्वारा उत्पन्न कोई त्रुटि संदेश इसकी आउटपुट फ़ाइल,' log.bz2' पर लिखा गया है। बस उस पुनर्निर्देशन को छोड़ दें, और इसका सब उल्लेख करें और आप व्यवसाय में होंगे। –

+0

हम्म, अच्छी कॉल। – craig65535

4

यदि आपका खोल bash (संस्करण 4.x), तो आपको 'process substitution' है, और आप इस्तेमाल कर सकते हैं है:

some_command 2>&1 | tee >(bzip2 -c > log.bz2) 

यह मानक त्रुटि और करने के लिए मानक आउटपुट पुनर्निर्देश tee (जैसे |& करता है, लेकिन मुझे क्लासिक नोटेशन पसंद है)। tee के आउटपुट की प्रति फ़ाइल की बजाय प्रक्रिया में भेजी जाती है; प्रक्रिया bzip2 -c > log.bz2 है जो इसके मानक आउटपुट में संपीड़ित प्रारूप में अपना मानक इनपुट लिखती है। आउटपुट की दूसरी (असंपीड़ित) प्रतिलिपि मानक आउटपुट के लिए सीधे जाती है।

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