मैं ग्नू टार का उपयोग करता हूं। यह संपीड़ित प्रकार का पता लगा सकता है जब फ़ाइलों को संपीड़ित / विघटित किया जाता है। लेकिन मुझे स्टड से एक संग्रह को विघटित करने की आवश्यकता है और संपीड़ित प्रकार अज्ञात है। मैंने देखा कि टार मुझे सही सुझाव दे सकता है जैसे:
tar: Archive is compressed. Use -z option
लेकिन मैं टार कि संपीड़न विकल्प का उपयोग करना चाहते हैं स्वचालित रूप से उस कथन की इनपुट करने के लिए मुझसे पूछे बिना। मैं उसे कैसे कर सकता हूँ? क्यों नहीं decompress बस क्योंकि यह पहले से ही संपीड़न प्रकार जानता है?
धन्यवाद!
tarयह नहीं जानता कि stdinयह पढ़ने के बाद तक किस प्रकार का डेटा है, और तब तक यह अनकम्प्रेस्ड प्रोग्राम को कॉल करने के लिए बहुत देर हो चुकी है। यह gzip, bzip2 और अन्य का समर्थन करता है। इस समस्या के आसपास काम करना आसान नहीं है (यह डेटा को बफर करना होगा), इसलिए यह आपको फिर से प्रयास करने के लिए कहता है।
fork()/ exec()विधि का उपयोग करके डेटा को एक असम्पीडित उपयोगिता के माध्यम से पाइप कर सकता है। उपयोगिता stdinपाइप से पढ़ी जाएगी और पहले 4K अब गायब हो जाएगा। इसे पढ़ने के बाद डेटा को पाइप में वापस डालने का कोई तरीका नहीं है।
cat buffer - | gunzip। (वैकल्पिक रूप से, गैर-अवरुद्ध I / O का उपयोग अतिरिक्त प्रक्रिया की आवश्यकता से बचने के लिए किया जा सकता है।)