अधिकतम आकार के ब्लॉक में एक टार आर्काइव स्प्लिट बनाएं


83

मुझे एक बड़ी निर्देशिका का बैकअप लेने की आवश्यकता है, लेकिन मैं व्यक्तिगत फ़ाइलों के आकार तक सीमित हूं। मैं मूल रूप से एक tar.(gz|bz2)संग्रह बनाना चाहता हूं जो 200MB अधिकतम अभिलेखागार में विभाजित हो। Clonezilla कुछ ऐसा ही करके इमेज बैकअप का विभाजन करता है जैसे नाम:

sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac

क्या कोई तरीका है जो मैं इसे एक कमांड में कर सकता हूं? मैं समझता हूं कि splitकमांड का उपयोग कैसे करना है , लेकिन मैं एक विशाल संग्रह नहीं बनाना चाहता हूं, फिर इसे छोटे अभिलेखों में विभाजित करें, क्योंकि यह डिस्क स्थान को दोगुना कर देगा जिसे शुरू में मुझे संग्रह बनाने की आवश्यकता होगी।


एक संबंधित प्रश्न: superuser.com/q/290986/11574
sampablokuper

जवाबों:


108

आप स्प्लिट कमांड पर टार को पाइप कर सकते हैं:

tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.

कुछ * nix सिस्टम (जैसे OS X) पर आपको निम्न त्रुटि मिल सकती है:

split: illegal option -- -

उस स्थिति में यह प्रयास करें (नोट करें -b 200m):

tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.

यदि आप एक FAT32 स्वरूपित ड्राइव पर फिट करने के लिए फ़ाइल को विभाजित करने की कोशिश कर रहे हैं, तो 4294967295 की बाइट सीमा का उपयोग करें। उदाहरण के लिए:

tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.

3
महान! फिर मैं संग्रह कैसे निकाल सकता हूं?
नत्फ़ुली के

24
cat sda1.backup.tar.gz.* | tar xzvf -नौकरी करेंगे ?
नत्फ़ुली के

3
हाँ, यह चाहिए। splitडिफ़ॉल्ट रूप से फ़ाइलों को नाम सेट करता है ताकि जब LOCALE (जो शेल ग्लोबिंग द्वारा किया जाता है) द्वारा सही क्रम में हो।
जोर्डनम

4
क्रिया के बिना, बस tar czf ...बिना करें vऔर cat backup.tar.gz.* | tar tar xzf - बिना विलय के v। मैं यहाँ द्वारा क्रिया उत्पादन का कोई लाभ नहीं देख रहा हूँ v
लेओ लेपोल्ड हर्ट्ज़ o

1
: बस के साथ एक FAT32 स्वरूपित फ्लैश ड्राइव पर Xcode पैकिंग से एक दोस्त की मदद की tar cvzf - Xcode.app/ | split -b 2000m - /Volumes/PH/xcode/xcode.tgz(से इस्तेमाल किया cd /Applications/) आपको बहुत बहुत धन्यवाद :)
ecth


4

बस जोड़ने के लिए: जैसा कि vfat / fat32 में अधिकतम अनुमत फ़ाइल आकार 2 ^ 32 माइनस 1 (4294967295 बाइट्स) है, ऐसी फ़ाइल सिस्टम पर अधिकतम अनुमत फ़ाइल आकार के साथ विभाजन कमांड है:

split -b4294967295 -d my_input_file my_output_file_splitted

3
serega@serega-sv:~$ tar -c  -M --tape-length=1024 --file /tmp/pseudo-tape.tar --new-volume-script=/tmp/new-volume.sh --volno-file=/tmp/volno /tmp/stuff-to-archive 
tar: Removing leading `/' from member names
moving /tmp/pseudo-tape.tar to /tmp/archive.1
moving /tmp/pseudo-tape.tar to /tmp/archive.2
moving /tmp/pseudo-tape.tar to /tmp/archive.3

आपको एक नए नाम के लिए ऑटोमेशन मूविंग स्यूडो-टेप.टार फाइल के लिए एक स्क्रिप्ट की आवश्यकता होगी:

serega@serega-sv:~$ cat /tmp/new-volume.sh 
dir="/tmp"
base_name="pseudo-tape.tar"
next_volume_name=`echo -n "archive."; cat $dir/volno`
echo "moving $dir/$base_name to $dir/$next_volume_name"
mv "$dir/$base_name" "$dir/$next_volume_name"

मैंने आपके उत्तर को अस्वीकार नहीं किया है, क्योंकि मैं एक का उपयोग करके खुश हूं -M --tape-length। हालाँकि, यह उत्तर किसी समाधान के लिए ओपी के अनुरोध को अनदेखा करता है जो gzip या bzip2 संपीड़न का उपयोग करता है।
सम्पाबलोकुपर

सावधानी: आप इसके बारे में बात नहीं कर रहे हैं tarबल्कि टार क्लोन gtar(जीएनयू टार) के बारे में बात कर रहे हैं । यह टेर क्लोन बहु मात्रा अभिलेखागार बनाने के लिए समर्थन करता है लेकिन ध्यान देने योग्य संभावना के साथ उन बहु मात्रा अभिलेखों से निकालने में असमर्थ / अनिच्छुक है क्योंकि यह गलत दावा करता है कि अनुवर्ती मात्रा सही निरंतरता भाग नहीं है।
विद्वान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.