टार आर्काइव कैसे बनाएं, या कई फाइलों को अलग कर सकते हैं?


27

इस पृष्ठ के अनुसार , कोई भी एक टार आर्काइव "स्प्लिट" को 100 एमबी फाइल में नहीं बना सकता है:

tar -c -M --tape-length = 102400 --file = disk1.tar bigfile.tgz

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

किसी को भी इस संवादात्मक कदम को छोड़ने का एक तरीका पता है, और टार को "विभाजन" स्वचालित रूप से करने देता है?


इससे संबंधित: unix.stackexchange.com/q/61774/6860
sampablokuper

जवाबों:


20

--new-volume-scriptविकल्प पर एक नज़र डालें , जो आपको संकेत तंत्र को एक अलग तंत्र के साथ या उत्पन्न फ़ाइल नाम के साथ बदलने देता है। ( (tar.info)Multi-Volume Archivesमें tarजानकारी पेज।) के साथ समस्या यह splitहै कि आप की जरूरत है catटुकड़े कुछ भी करने को वापस एक साथ, जबकि एक मल्टीवॉल्यूम आर्काइव में थोड़ा और अधिक लचीला होना चाहिए।


यह सच है, बिल्कुल।
एडुआर्डो I.

2
धन्यवाद, यह वही है जिसकी मुझे तलाश थी! मुझे अब पता चला कि वास्तव में यहाँ कुछ निर्देश (incl। उदाहरण) उपलब्ध हैं: gnu.org/software/tar/manual/tar.html#Using-Multiple-Tapes
Samuel Lampa

इसके साथ समस्या यह है कि यह अत्यधिक बकवास है और उचित यूनिक्स शैली एप्लिकेशन के विपरीत को बढ़ावा देता है।
जन क्यु पेब्लिक

33

आप इसके लिए विभाजन का उपयोग कर सकते हैं:

tar czpvf - /path/to/archive | split -d -b 100M - tardisk

यह डेटा को स्टैडआउट में भेजने के लिए टार को बताता है, और इसे स्टैडेन से लेने के लिए विभाजित करता है - इसके अलावा 100M का एक संख्यात्मक प्रत्यय ( -d), एक चंक आकार ( -b) और 'tardisk' का उपयोग करके परिणामी फाइलनाम (tardisk00, tardisk01) के लिए आधार के रूप में उपयोग करता है। tardisk02, आदि)।

बाद में डेटा निकालने के लिए आप इसका उपयोग कर सकते हैं:

cat tardisk* | tar xzpvf -

1
छोटा सुधार, -dसंख्यात्मक प्रत्यय के लिए है, उपसर्ग नहीं।
yclian

8

बेशक उपयोग करने का सबसे अच्छा विकल्प --new-volume-scriptविकल्प है।

लेकिन, यदि आप फ़ाइल का आकार जानते हैं (इस मामले में, bigfile.tgz), तो आप यह भी कर सकते हैं:

tar -c -M -L 102400 --file=disk1.tar --file=disk2.tar --file=disk3.tar largefile.tgz

सारांश:

-c = Create
-M = multi-volume
-L 102400 = 100MB files (disk1.tar, disk2.tar, disk3.tar ...)

(-L के लिए, जितनी आवश्यक हो उतनी निर्दिष्ट करें ताकि टार फ़ाइलों का कुल योग bigfile.tgz से बड़ा हो)

यदि आप tarएक निर्देशिका ट्री संरचना की कोशिश कर रहे हैं


1

मुझे यह निम्नलिखित कमांड के साथ काम करने के लिए मिला:

mkdir -p ./split
rm -rf ./split/*
tar -cML 102400 -F 'cp "${TAR_ARCHIVE}" \
    ./split/part_${TAR_VOLUME}.tar' \
    -f split/part_1.tar large_file.tar.gz

एकमात्र समस्या यह है कि part_1.tarवास्तव में अंतिम फ़ाइल होगी, और अन्य को एक द्वारा स्थानांतरित किया जाएगा। यानी part_2.tarवास्तव में पहला हिस्सा है, और part_k.tarहै (n - 1)वें हिस्सा। कुछ शेल स्क्रिप्ट के साथ इसे ठीक करना तुच्छ है, और पाठक के लिए एक अभ्यास के रूप में छोड़ दिया जाता है।


1

यह अपने आप आकार 1.1GB की फ़ाइलें बना देगा, यदि आपका टार आकार में बड़ा है, तो आप संख्या बढ़ा सकते हैं, उदाहरण के लिए 1000 {2..1000} या आप टेप-लंबाई तर्क के लिए इनपुट बढ़ा सकते हैं।

tar --tape-length=1048576 -cMv --file=tar_archive.{tar,tar-{2..100}} backup.tar.lzma
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.