एक कमांड में एक tar.xz बनाएं


159

मैं .tar.xzएक कमांड में एक संकुचित संग्रह बनाने की कोशिश कर रहा हूं । उसके लिए विशिष्ट सिंटैक्स क्या है?

मैंने कोशिश की है tar cf - file | xz file.tar.xz, लेकिन वह काम नहीं करता है।

जवाबों:


241

के लिए -Jसंपीड़न विकल्प का उपयोग करें xz। और याद रखना man tar:)

tar cfJ <archive.tar.xz> <files>

2015-08-10 को संपादित करें:

यदि आप tar डैश के साथ तर्क पारित कर रहे हैं (उदा: tar -cfविरोध के रूप में tar cf), तो -fविकल्प अंतिम होना चाहिए , क्योंकि यह फ़ाइल नाम निर्दिष्ट करता है ( जो बाहर इंगित करने के लिए @ABB के लिए धन्यवाद !)। उस स्थिति में, कमांड ऐसा दिखता है:

tar -cJf <archive.tar.xz> <files>

5
जोड़ने vआदेश स्विच करने के लिए ( tar -cJvf) से पता चलता है फ़ाइलें संग्रह में जोड़ा जा रहा वर्बोज़ किया जाना है।
स्टुअर्ट कार्डाल

7
डैश के साथ ऑर्डर देना महत्वपूर्ण है, यह शायद सबसे अच्छा है कि ऑर्डर करना हमेशा महत्वपूर्ण है, और fडैश के बिना भी आखिरी डाल दें ।
mwfearnley 14

1
क्या x-पैरामीटर को पास करना संभव है जैसे -e (--extended)? जाहिर है यह डिफ़ॉल्ट रूप से विस्तारित अभ्यस्त है।
14

3
tarmacOS को समर्थन लगता है, -Jलेकिन फीचर मैन पेज में नहीं दिया गया है। इसे यहां देखना था। हालांकि वे XZ का उल्लेख अनुभाग में करते हैं --options...
काबरिक

1
@chmike XZ_OPT पर्यावरण चर का उपयोग करें। जैसे XZ_OPT = "- 9e -T0"।
Dzenly

50

स्विच -Jकेवल नए सिस्टम पर काम करता है। सार्वभौमिक आदेश है:

.Tar.xz आर्काइव बनाने के लिए

tar cf - directory/ | xz -z - > directory.tar.xz

व्याख्या

  1. tar cf - directoryनिर्देशिका को पढ़ता है / और उसे TAR प्रारूप में रखना शुरू करता है। इस ऑपरेशन का आउटपुट मानक आउटपुट पर उत्पन्न होता है।

  2. | एक और कार्यक्रम के इनपुट के लिए मानक उत्पादन पाइप ...

  3. ... जो होता है xz -z -। XZ को संपीड़ित किया जाता है ( -z) मानक इनपुट से संग्रह ( -)।

  4. आप से उत्पादन अनुप्रेषित xzकरने के लिए tar.xzफ़ाइल।


16
-fपास होने पर "फ़ाइल से" मतलब नहीं है xz। इसके बजाय यह --force( विवरण के लिए xz (1) देखें) के लिए कम है, और जब तक आवश्यक न हो, इसका सर्वोत्तम उपयोग नहीं किया जाता है।
एलियाह कगन

@EliahKagan फिक्स्ड। धन्यवाद।
वोज्शिएक एडम कोस्जेक

2
मल्टीथ्रेडेड संपीड़न का उपयोग करने के लिए विकल्प -T0 का उपयोग किया जा सकता है:tar cf - directory/ | xz -z -T0 - > directory.tar.xz
oidualc

एक अन्य लाभ यह है कि आप आसानी से कमांड लाइन पर xz के लिए संपीड़न स्तर या किसी अन्य विकल्प को निर्दिष्ट कर सकते हैं। उदाहरण के लिए यदि आप कम्प्रेशन को गति देना चाहते हैं और इस बात की परवाह नहीं करते हैं कि आपके द्वारा उपयोग किए जा सकने वाले -1 -T0या -0 -T0विकल्प के रूप में कितना आकार है , जो आमतौर पर आपको तुलनीय या तेज़ समय में gzip की तुलना में एक छोटी फ़ाइल देता है, जबकि डिफ़ॉल्ट -6काफी धीमा होता है गज़िप की तुलना में।
fgwaller

38

यदि आपको पाइप मोड पसंद है, तो यह सबसे साफ समाधान है:

tar c some-dir | xz > some-dir.tar.xz

fफ़ाइलों से निपटने के लिए विकल्प को रखना आवश्यक नहीं है और फिर -यह निर्दिष्ट करने के लिए कि फ़ाइल मानक इनपुट है। इसके लिए -zविकल्प निर्दिष्ट करना भी आवश्यक नहीं है xz, क्योंकि यह डिफ़ॉल्ट है।

यह साथ काम करता है gzipऔर bzip2भी:

tar c some-dir | gzip > some-dir.tar.gz

या

tar c some-dir | bzip2 > some-dir.tar.bz2

Decompressing भी बहुत सीधा है:

xzcat tarball.tar.xz | tar x
bzcat tarball.tar.bz2 | tar x
zcat tarball.tar.gz | tar x

यदि आपके पास केवल tarसंग्रह है, तो आप इसका उपयोग कर सकते हैं cat:

cat archive.tar | tar x

यदि आपको केवल फाइलों को सूचीबद्ध करने की आवश्यकता है, तो उपयोग करें tar t


8

Xz संपीड़न विकल्पों का उपयोग करना

यदि आप के लिए संपीड़न विकल्प का उपयोग करना चाहते हैं xz, या यदि आप tarMacOS पर उपयोग कर रहे हैं , तो आप शायद tar -cJfसिंटैक्स से बचना चाहते हैं ।

इसके अनुसार man xz, ऐसा करने का तरीका है:

tar cf - baz | xz -4e > baz.tar.xz

क्योंकि मुझे वोज्शिएक एडम कोस्ज़ेक का प्रारूप पसंद था , लेकिन जानकारी नहीं:

  1. c निर्दिष्ट फ़ाइलों के लिए एक नया संग्रह बनाता है।
  2. fएक निर्देशिका से पढ़ता है (सबसे अच्छा इस दूसरी डाल क्योंकि -cf! = -fc)
  3. - स्टैंडर्ड आउटपुट के लिए आउटपुट
  4. | अगले कमांड के लिए पाइप आउटपुट
  5. xz -4eसंपीड़न विकल्प के xzसाथ कॉल करता है -4e। (बराबर -4 --extreme)
  6. > baz.tar.xz तारांकित और संपीड़ित फ़ाइल को निर्देश देता है baz.tar.xz

जहां -4eहै, अपने स्वयं के संपीड़न विकल्पों का उपयोग करें। मैं अक्सर उपयोग -kकरने के लिए --keepमूल फ़ाइल और -9वास्तव में भारी संपीड़न के लिए। -zमैन्युअल रूप xzसे ज़िप पर सेट करने के लिए, हालांकि यह ज़िप करने के लिए चूक है अगर अन्यथा निर्देशित नहीं किया गया है।

असत्य और असत्य बोलने के लिए

राफेल वैन हॉर्न को गूंजने के लिए , अनकम्प्रेस्ड और अनटार करने के लिए (नीचे नोट देखें):

xz -dc baz.tar.xz | tar x

नोट: राफेल के जवाब के विपरीत , xz -dcइसके बजाय का उपयोग करें catxz। डॉक्स इसे उसी स्थिति में सुझाता है जब आप इसका उपयोग स्क्रिप्टिंग के लिए कर रहे हैं। सबसे अच्छा उपयोग करने की आदत है -dया --decompressइसके बजाय के unxzरूप में अच्छी तरह से। हालाँकि, यदि आप, कमांड लाइन से उन कमांड का उपयोग करना ठीक है।


tar -cJfMacOS पर वाक्य रचना का उपयोग न करने का कोई विशेष कारण ? बस जिज्ञासु, क्योंकि मैं अभी कर रहा था और यह काम कर रहा था।
लो-टैन

2
@ लो-टैन यह काम करता है अगर आपके पास टार है। जब मैं इसका उपयोग कर रहा था तो मेरे पास टार का सही संस्करण नहीं था इसलिए यह मेरे लिए काम नहीं करता था। मैं xz के लिए संपीड़न विकल्पों का भी उपयोग करना चाहता था, जो आप टार का उपयोग करते समय नहीं कर सकते। इसके अलावा, पाइपिंग सिंटैक्स मेरे लिए याद रखना आसान है, इसलिए मैं इसका उपयोग करना चाहता हूं। लेकिन प्रत्येक को अपना
कॉनर

4

इसे इस्तेमाल करे: tar -cf file.tar file-to-compress ; xz -z file.tar

ध्यान दें:

  1. tar.gz और tar.xz समान नहीं हैं; xz बेहतर संपीड़न प्रदान करता है।
  2. पाइप का उपयोग न करें | क्योंकि यह एक साथ कमांड चलाता है। एक के बाद एक कमांड का उपयोग करना ;या &निष्पादित करना ।

+1 आरएचईएल 5.10 पर, मुझे कोई Jविकल्प नहीं दिखता है , लेकिन यह काम करता है। मुझे लगता है कि आपको RHEL6 की आवश्यकता है।
ब्रायन

2
टार से xz तक आउटपुट को पाइप करने के लिए कमांड्स को एडजस्ट क्यों नहीं किया जाता?
mwfearnley

@mwfearnley मुझे लगता है कि यह नोट केवल इस बात पर जोर देने के लिए है कि क्रमबद्ध रूप से निष्पादित करने के लिए आवश्यक आदेश हैं। चूंकि फ़ाइल नाम दोनों कमांड में उपयोग किया जाता है, वे मानक आउटपुट या इनपुट से डेटा नहीं लिखेंगे या पढ़ेंगे। यदि फ़ाइल नाम निर्दिष्ट किए बिना कमांड का उपयोग किया जाता है, तो उन्हें जंजीर की तरह बनाया जा सकता है tar -c file-to-compress | xz -z > file.tar.xz
जैक क्यू

उपयोग &करने के बाद एक के बाद एक कमांड लॉन्च नहीं होगा। इसके बजाय, यह पृष्ठभूमि प्रक्रिया के रूप में पहला लॉन्च करेगा।
लुइस लावायर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.