टार -zcvf का उपयोग करते समय संपीड़न के स्तर को कैसे निर्दिष्ट करें?


142

मैं बहुत बार काम पर निर्देशिका gzip। जो मैं सामान्य रूप से करता हूं

tar -zcvf file.tar.gz /path/to/directory

क्या यहां संपीड़न स्तर निर्दिष्ट करने का कोई तरीका है? मैं सबसे अच्छा सम्पीडन का उपयोग करना चाहता हूँ, भले ही उसे सेक करने में अधिक समय लगे।

जवाबों:


142
GZIP=-9 tar cvzf file.tar.gz /path/to/directory

यह मानते हुए कि आप बैश का उपयोग कर रहे हैं। आम तौर पर, GZIP परिवेश चर को "-9" पर सेट करें, और सामान्य रूप से टार चलाएं।

इसके अलावा - यदि आप वास्तव में सर्वश्रेष्ठ संपीड़न चाहते हैं, तो gzip का उपयोग न करें। Lzma या 7z का प्रयोग करें।

और gzip का उपयोग करते समय (जो किसी भी कारण से विभिन्न कारणों से अच्छा विचार है) pigzकार्यक्रम का उपयोग करने पर विचार करें और नहीं gzip


14
pigz "समानांतर gzip" है जो gzip संपीड़न के लिए आपके सभी कोर का उपयोग करता है। आप topइसे 200% -400 $ CPU के बीच कहीं भी देख और देख सकते हैं।
फेलिप अल्वारेज़

2
FYI करें, .bz2 प्रारूप के लिए, उपयोग करें: BZIP2 = -9 tar cvjf file.tar.bz2 / path / to / Directory
Tomofumi

3
पर्यावरण चर अब लगता है GZIP_OPT, उपयोग समान होना चाहिए।
सीर

3
मैन पेज से Ubuntu 16.04 पर gzip के लिए: "Vax / VMS पर, पर्यावरण चर का नाम GZIP_OPT है, जो प्रोग्राम के आह्वान के लिए सेट प्रतीक के साथ संघर्ष से बचने के लिए है।" श, csh, और MSDOS के लिए यह अभी भी सिर्फ GZIP होना चाहिए
Ponyboy47

68

टार के लिए gzip फ़्लैग का उपयोग करने के बजाय, टार प्रक्रिया के बाद फ़ाइलों को मैन्युअल रूप से gzip करें, फिर आप gzip प्रोग्राम के लिए संपीड़न स्तर निर्दिष्ट कर सकते हैं:

tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar

या आप उपयोग कर सकते हैं:

tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz

Gzip कमांड लाइन में -9 अधिकतम संभव संपीड़न स्तर (डिफ़ॉल्ट is -6) का उपयोग करने के लिए gzip को बताता है।

संपादित करें: @depesz टिप्पणी के आधार पर फिक्स्ड पाइप कमांड लाइन।


4
पाइप का उपयोग करना चाहिए:tar cvf - /path/to/directory | gzip -9 - > file.tar.gz

1
1 उदाहरण के साथ समाप्त होना चाहिए file.tar, क्योंकि gzip".gz" एक्सटेंशन जोड़ता है।
bonsaiviking

4
तुम क्यों नहीं छोड़ते f -? अगर कोई फ़ाइल नहीं है, तो यह
स्टडिन

प्रीवियस टिप्पणी के अलावा। "मैन टार" खंड Environtment: टेप डिवाइस या फ़ाइल को संग्रह के लिए उपयोग करने के लिए यदि - फ़ाइल निर्दिष्ट नहीं है। यदि यह वातावरण चर अप्रभावित है, तो इसके बजाय stdin या stdout का उपयोग करें।
मिकाल

2
और हम "gzip -9 -" -> "gzip -9" को कम कर सकते हैं। "मैन गज़िप" अनुभाग से विवरण: यदि कोई फ़ाइल निर्दिष्ट नहीं है, या यदि कोई फ़ाइल नाम "-" है, तो मानक इनपुट मानक आउटपुट के लिए संकुचित है।
मिकाल

53

टार के आधुनिक संस्करण xz संग्रह प्रारूप (GNU टार, 2009 में 1.22 के बाद से , 2010 में 1.17.0 के बाद से बिजीबॉक्स ) का समर्थन करते हैं।

यह lzma2 पर आधारित है , जो कि gz के 7-ज़िप संस्करण की तरह है । यह बेहतर संपीड़न देता है यदि आप xz समर्थन की आवश्यकता के साथ ठीक हैं।

tar -Jcvf file.tar.xz /path/to/directory

मुझे अभी यहां पता चला है (मूल रूप से इस सवाल का एक डुबकी, लेकिन यूनिक्स स्टैकएक्सचेंज में) कि एक्सज़ेड संपीड़न स्तर को नियंत्रित करने के लिए XZ_OPT = -9 पर्यावरण चर भी अन्य पोस्ट में GZIP एक के समान है।

XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory

2
+1 xz bzip2 और gzip दोनों से कहीं बेहतर है। यहाँ एक तुलना है: tukaani.org/lzma/benchmarks.html
User1

8
व्यापार बंद गति है। XZ काफी धीमा है।
बेल

32
tar cv /path/to/directory | gzip --best > file.tar.gz

यह मैट्रिक्स मोल का दूसरा उपाय है, लेकिन थोड़ा छोटा:

टार कॉल करते समय, विकल्प fबताता है कि आउटपुट एक फाइल है। इसे -(stdout) पर सेट करना टारड को अपना आउटपुट लिखने के लिए बनाता है जो बिना fऔर दोनों के डिफ़ॉल्ट व्यवहार है -

और जैसा कि gzipमैन पेज द्वारा कहा गया है , यदि कोई फाइल निर्दिष्ट नहीं है तो gzip मानक इनपुट से संपीड़ित होगा। कॉल -में कोई जरूरत नहीं है gzip

विकल्प --best(समतुल्य -9) उच्चतम संपीड़न स्तर सेट करता है।


1
यह खूबसूरती से काम करता है। यदि आप रूट के रूप में चलाते हैं, तो अनुमतियाँ और स्वामी भी संरक्षित हैं। अन्यथा आपको निर्दिष्ट करना चाहिए। अगर यह स्पष्ट नहीं था "-9" सबसे अच्छा संपीड़न है और "-1" सबसे तेज संपीड़न है। "-1" में अभी भी बहुत कम समय लगता है अगर आपके पास बहुत सारी फाइलें हैं ;-)
PJ Brunet

इस के साथ काम करता xzहै और pixzभी। यह एक मध्यवर्ती .tar फ़ाइल बनाने के बिना समानांतर संपीड़ित करने के लिए उपयोग किए जाने वाले थ्रेड्स की संख्या को नियंत्रित करने का एक शानदार तरीका है। जैसेtar -cv /path/to/dir | pixz -p4 > output.tpxz
joelostblom

10

-I का उपयोग करके संपीड़न कार्यक्रम को निर्दिष्ट करने का विकल्प भी है। इसमें संपीड़न स्तर विकल्प शामिल हो सकता है।

tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory

2
टार के पुराने संस्करण जैसे कि CentOS 6 & 7 में प्रदान किए गए तर्क में तर्क प्रदान करने का समर्थन नहीं करते हैं -I, वे पूरी बात को एक प्रोग्राम नाम के रूप में निष्पादित करने का प्रयास करेंगे, और इस प्रकार विफल। डेबियन स्ट्रेच में कम से कम टार 1.29 के रूप में, यह काम करता है।
चीता

2

और निश्चित रूप से macOS bsd- व्युत्पन्न टार को अलग होना चाहिए:

tar -czf file.tar.gz --options gzip:compression-level=9 /path/to/directory
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.