.Tar.gz के साथ अधिकतम संपीड़न कैसे प्राप्त करें? [डुप्लिकेट]


63

इस सवाल का पहले से ही यहाँ एक जवाब है:

जिस तरह से मैं टार + गज़िप के उपयोग को समझता हूं वह tarयह है कि आम तौर पर फ़ाइलों के समूह को एक एकल फ़ाइल में समेकित करने के लिए उपयोग किया जाता है, फिर gzipउस फ़ाइल को संपीड़ित करने के लिए उपयोग किया जाता है।

मैंने हाल ही में सीखा है कि tarयह भी संपीड़ित कर सकता है।

क्योंकि मुझे पूरी तरह से समझ में नहीं आया है कि संपीड़न कैसे काम करता है @ यह कोर है, मेरे पास (संभवतः हास्यास्पद है) चिंताएं हैं जो एक पूर्व-संपीड़ित को भेजती हैं।

मेरा प्रश्न अनिवार्य रूप से है: निरपेक्ष छोटे से छोटे tar.gz को बनाने के लिए आर्ग / कम्प्रेशन मेथड्स के किस संयोजन का उपयोग करना चाहिए, और कमांड लाइन स्टेटमेंट उसके लिए कैसा दिखता है?


2
पहले से संपीड़ित फ़ाइलों को संपीड़ित करने से उनका आकार कम हो सकता है, या यह संग्रह को बड़ा बना सकता है। यह सब डेटा के प्रकार और उपयोग किए जा रहे किसी भी संपीड़न पर निर्भर करता है।
सेल्ट्री

@ केल्टरी ने क्या कहा। संपीडन दर और अनुपात इस बात पर अत्यधिक निर्भर हैं कि आप जो कर रहे हैं, वह क्या है, यही वजह है कि अलग-अलग संपीड़न एल्गोरिदम और विधियाँ हैं।
संगीत 2

जवाबों:


111

या, आप इस तरह से अधिकतम अधिकतम संपीड़न के लिए टार को बता सकते हैं:

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

इसके अतिरिक्त, अपने दूतों को अव्यवस्था मुक्त रखने के लिए, आप यह कर सकते हैं:

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

43

जैसा कि आपने कहा- " टार भी सेक कर सकते हैं ", तात्पर्य है कि - हमेशा डेटा को स्वयं से संपीड़ित tarनहीं करता है।

यह केवल zविकल्प के साथ उपयोग किए जाने पर करता है। वह भी खुद से नहीं, बल्कि टार्गेट डेटा को गज़िप के माध्यम से पारित करके।

हालाँकि, इसके बजाय, जैसा कि इस उत्तर में कहा गया है , आप दो आदेशों को पाइप कर सकते हैं: tarऔर gzipऐसे कि आप स्पष्ट रूप से gzipकमांड के लिए संपीड़न स्तर को सबसे छोटे आउटपुट आकार को प्राप्त करने के लिए निर्दिष्ट कर सकते हैं ।

tar cvf - / path / to / directory | gzip -9 -> file.tar.gz

यहां 9अधिकतम संभव संपीड़न स्तर निर्दिष्ट करता है।


मेरे पास एक ऐसा मुद्दा था जहां इसकी पुनरावृत्ति नहीं होती है, और शिकायत करता है कि यह एक खाली संग्रह होगा, क्योंकि कमांड विभाजित हो गया है, यह खोजने के लिए कठिन है कि कैसे पुनरावर्ती को बल दिया जाए, क्योंकि यह पहले से ही डिफ़ॉल्ट है। मेरे BAD, मैंने गलत तरीके से इसे इस तरह शुरू करने के लिए निर्दिष्ट किया थाtar -cvf /path
ब्रायन थॉमस

17

आमतौर पर न तो गज़िप और न ही टार "सबसे छोटा सबसे छोटा टारगेट" बना सकता है। कई संपीड़न उपयोगिताओं हैं जो gz प्रारूप में संपीड़ित कर सकते हैं। मैंने एक बैश स्क्रिप्ट " gz99 " लिखने की कोशिश की है gzip, 7zऔर advdefसबसे छोटी फ़ाइल प्राप्त करने के लिए। सबसे छोटी संभव फ़ाइल रन बनाने के लिए इसका उपयोग करने के लिए:

tar c path/to/data | gz99 file.gz

advdefAdvanceCOMP से उपयोगिता आमतौर पर छोटी से छोटी फ़ाइल देता है, लेकिन यह भी गाड़ी (है gz99उपयोगिता की जाँच करता है कि यह के उत्पादन में स्वीकार करने से पहले फ़ाइल दूषित नहीं किया गया है advdef)। advdefसीधे उपयोग करने के लिए , file.tar.gz बनाएँ, हालाँकि आपको ऐसा लगता है। तो भागो:

advdef -z -4 file.tar.gz

यह एक मानक gz फ़ाइल बनाएगा जिसे gzip और टार द्वारा सामान्य रूप से पढ़ा जा सकता है, बस एक छोटा सा छोटा। यह सबसे अच्छा है जो आप gz प्रारूप के साथ कर सकते हैं।

चूँकि आपने केवल हाल ही में सीखा कि टार सेक कर सकते हैं, और यह नहीं कहा कि आप सबसे छोटी ".tar.gz" फ़ाइल क्यों चाहते थे, आप इस बात से अनजान हो सकते हैं कि अधिक कुशल प्रारूप हैं जिनका उपयोग टार फ़ाइलों के साथ किया जा सकता है, जैसे xz। आम तौर पर, एक अलग प्रारूप में स्विच करने से गज़िप विकल्पों के साथ चक्कर लगाने की तुलना में संपीड़न में काफी बेहतर सुधार हो सकता है। Xz का मुख्य नुकसान यह है कि यह gzip जितना आम नहीं है, इसलिए आप जिन लोगों को फाइल भेजते हैं, उन्हें एक नया पैकेज स्थापित करना पड़ सकता है। यह थोड़ा धीमा भी हो जाता है, विशेषकर जब संपीड़ित होता है। यदि यह आपके लिए महत्वपूर्ण नहीं है, और आप वास्तव में सबसे छोटी टार फ़ाइल चाहते हैं, तो कोशिश करें:

 tar cv path/to/data | xz -9 > file.tar.xz

टार के आधुनिक संस्करण, उदाहरण के लिए, उबंटू 13.10 पर, स्वचालित रूप से संकुचित फ़ाइलों का पता लगाता है। यहां तक ​​कि अगर आप xz संपीड़न का उपयोग करते हैं तो भी आप हमेशा की तरह विघटित हो सकते हैं:

 tar xvf file.tar.xz

एक त्वरित विचार देने के लिए कि ये संपीड़न उपयोगिताओं की तुलना कैसे करें, लिनक्स कर्नेल से पैच-3.1.1 को संपीड़ित करने के प्रभाव पर विचार करें:

utility         cpu    format  size(bytes)
gzip -9         0.02s  gz      105,628
advdef -2       0.07s  gz      102,619
7z -mx=9 -tgzip 0.42s  gz      102,297
advdef -3       0.55s  gz      102,290
advdef -4       0.75s  gz      101,956
xz -9           0.03s  xz       91,064
xz -3e          0.15s  xz       90,996

इस तुच्छ उदाहरण में, हम देखते हैं कि सबसे छोटी gz प्राप्त करने के लिए हमें advdef की आवश्यकता है (हालाँकि 7z -tgzip लगभग उतना ही अच्छा है और बहुत कम छोटी गाड़ी है)। हम यह भी देखते हैं कि xz पर स्विच करने से हमें अधिक स्थान प्राप्त होता है, जो कि पुराने gz प्रारूप के सबसे लंबे समय तक बिना किसी संपीड़न के निचोड़ने का प्रयास करता है।


ओपी ने .tar.gz फ़ाइल के लिए सबसे अधिक संपीड़न कैसे प्राप्त करें, इसके लिए पूछा, लेकिन आपने एक .tar.xz फ़ाइल बनाने का सुझाव दिया। आप पूछे गए सवाल से अलग सवाल का जवाब दे रहे हैं।
क्रिसइन्डेमॉन्टन

आह, मैं देख रहा हूं कि आप क्या कर रहे हैं। advdef सिर्फ मेरे सिस्टम (v1.15) पर क्रैश होता है, इसलिए 'advdef -z -4 file.tar.gz' काम नहीं करता है, लेकिन यह कम से कम सैद्धांतिक रूप से हो सकता है। मुझे इस बात का सबूत नहीं मिला कि यह फ़ाइल को 'gzip -9' से आगे सिकोड़ देगा, लेकिन यह हो सकता है, और किसी भी मामले में मेरे लिए मेरे -1 वोट को हटाने के लिए पर्याप्त है। स्पष्टीकरण देने के लिए धन्यवाद!
क्रिसइन्डमॉन्टन

हम्म, मैं v1.17 का उपयोग कर रहा हूं। वैसे भी मेरे अंदर पांडित्य के गणितज्ञ यह बताना चाहते हैं कि मेरा जवाब यकीनन तकनीकी रूप से सही नहीं है। आखिरकार, यदि आप छोटी से लेकर लंबी तक की सभी संभव gz फ़ाइलों की गणना करते हैं और पहले वाले को सही फ़ाइल में चुनते हैं, तो आप अभी तक कुछ और बाइट्स निकाल सकते हैं। लेकिन व्यवहार में यह बहुत धीमी गति से होगा।
गमथ

मुझे नहीं लगता कि "छोटी गाड़ी" और "संग्रह" को कभी भी एक साथ इस्तेमाल किया जाना चाहिए, एक संग्रह क्या उपयोग भ्रष्ट है? संपीड़न उपयोगिताओं की "तुलना" करने के लिए आपको एक बहुत बड़ी फ़ाइल की आवश्यकता होती है , और विभिन्न प्रकार की इनपुट फ़ाइलों को भी - एक दूसरे अंतर के सौवें हिस्से में मापना विश्वसनीय नहीं है, मुझे लगता है कि xz -9आमतौर पर 5x जैसा कुछ gz -9समय लगता है, न कि केवल 1.5x के रूप में आपकी तालिका बताती है।
Xen2050

हम xz प्रक्रिया का उपयोग करके विभाजित अभिलेखागार (संपीड़ित करते समय) कैसे बना सकते हैं
nyxee

6
tar c /path/to/data | gzip --best > file.tar.gz

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


4
वैकल्पिक रूप से, --bestध्वज का उपयोग करें : -9 पाठक को भ्रमित कर रहा है।
ओम-नॉम-नोम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.