चूंकि टार फाइलें एक स्ट्रीमिंग प्रारूप हैं - आप cat
उनमें से दो को एक साथ कर सकते हैं और लगभग सही परिणाम प्राप्त कर सकते हैं - ऐसा करने के लिए आपको उन्हें डिस्क पर निकालने की आवश्यकता नहीं है। आप फ़ाइलों को केवल हटा सकते हैं, उन्हें एक साथ सम्मिलित कर सकते हैं, और उस स्ट्रीम को पुनः प्राप्त कर सकते हैं:
xzcat *.tar.xz | xz -c > combined.tar.xz
combined.tar.xz
घटक में सभी फ़ाइलों का एक संकुचित टारबॉल होगा जो केवल थोड़ा भ्रष्ट है। निकालने के लिए, आपको --ignore-zeros
विकल्प (जीएनयू में tar
) का उपयोग करना होगा , क्योंकि अभिलेखागार में एक "एंड-ऑफ-फ़ाइल" मार्कर है जो परिणाम के बीच में दिखाई देगा। हालांकि, इसके अलावा, सब कुछ सही ढंग से काम करेगा।
जीएनयू संयुक्त अभिलेखागार के उत्पादन के लिए tar
एक --concatenate
मोड का भी समर्थन करता है । ऊपर जैसी ही सीमाएँ हैं - आपको --ignore-zeros
निकालने के लिए उपयोग करना होगा - लेकिन यह संपीड़ित अभिलेखागार के साथ काम नहीं करता है। आप प्रक्रिया प्रतिस्थापन के उपयोग से इसे काम में लाने के लिए कुछ बना सकते हैं, लेकिन यह एक परेशानी है और इससे भी अधिक नाजुक है।
यदि ऐसी फाइलें हैं जो अलग-अलग टार फ़ाइलों में एक से अधिक बार दिखाई देती हैं, तो यह ठीक से काम नहीं करेगी, लेकिन आपको उस समस्या की परवाह किए बिना मिला है। अन्यथा यह आपको वह देगा जो आप चाहते हैं - आउटपुट को पाइपिंग के माध्यम xz
से tar
वैसे भी इसके आउटपुट को कैसे संपीड़ित करता है।
यदि अभिलेखागार जो केवल एक विशेष tar
कार्यान्वयन के साथ काम करते हैं, तो आपके उद्देश्यों के लिए पर्याप्त नहीं हैं, r
आपके मित्र के साथ संग्रह में संलग्न हैं :
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
mkdir tmp
pushd tmp
tar xJf "../$x"
tar rJf ../combined.tar.xz .
popd
rm -r tmp
done
यह केवल एक समय में एक एकल संग्रह को निकालता है, इसलिए कार्य स्थान एकल संग्रह की सामग्री के आकार तक सीमित है। संपीड़न सिर्फ इस तरह से स्ट्रीमिंग कर रहा है जैसे कि आपने अंतिम संग्रह को एक ही बार में बनाया होगा, इसलिए यह उतना ही अच्छा होगा जितना कि यह कभी भी हो सकता है। आप बहुत अधिक अपघटन और पुनर्संयोजन करते हैं जो cat
संस्करणों की तुलना में यह धीमा कर देगा , लेकिन परिणामी संग्रह बिना किसी विशेष समर्थन के कहीं भी काम करेगा।
ध्यान दें कि - आप वास्तव में क्या चाहते हैं इसके आधार पर - सिर्फ एक संग्रह में असम्पीडित टार फ़ाइलों को जोड़ने से पर्याप्त हो सकता है। वे (लगभग) एक ही फाइल में उनकी सामग्री के साथ ही लगभग सेक करेंगे, और यह प्रत्येक फ़ाइल के लिए संपीड़न ओवरहेड को कम करेगा। यह कुछ इस तरह दिखेगा:
tar cJf combined.tar.xz dummy-file
for x in db-*.tar.xz
do
xz -dk "$x"
tar rJf combined.tar.xz "${x%.xz}"
rm -f "${x%.xz}"
done
यह अंतिम संपीड़ित आकार के मामले में थोड़ा कम कुशल है क्योंकि धारा में अतिरिक्त टार हेडर हैं, लेकिन फ़ाइलों के रूप में सभी फाइलों को निकालने और फिर से जोड़ने पर कुछ समय बचाता है। आप combined.tar.xz
कई (असम्पीडित) db-*.tar
फ़ाइलों के साथ समाप्त होगा ।