अंतरिक्ष को बचाने के लिए कई चरणों में स्प्लिट टार आर्काइव कैसे बनाएं?

Jan 08 2021

मेरे पास एक बहुत बड़ा फ़ोल्डर है जिसे मैं एक टार संग्रह बनाने की कोशिश कर रहा हूं। मुद्दा यह है कि मेरे पास पूरे संग्रह को संग्रहीत करने के लिए पर्याप्त अतिरिक्त खाली स्थान नहीं है, इसलिए मैं एक बार में संग्रह के 100-200GB विखंडू बनाना और उन व्यक्तिगत रूप से क्लाउड स्टोरेज में स्थानांतरित करना चाहता हूं। जब नए विखंडू बनाए जाते हैं तो मुझे नियंत्रित करने की आवश्यकता होती है, इसलिए मेरा HDD नहीं भरता है, लेकिन स्प्लिट टारबॉल बनाने के लिए मुझे मिलने वाली सभी कमांड हमेशा एक ही डायरेक्टरी में, एक ही बार में बना देती हैं।

निकटतम समाधान मुझे इस सवाल से मिला था, लेकिन सभी प्रतिक्रियाएं फाइलों की संख्या पर अभिलेखागार को आधार बनाती हैं, न कि आकार जो मेरे उपयोग के मामले के लिए महत्वपूर्ण है क्योंकि मेरी फ़ाइल आकार असमान रूप से वितरित हैं।

जवाब

2 EduardoTrápani Jan 08 2021 at 10:09

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

--new-volume-script=COMMAND
--tape-length=N

प्रत्येक वॉल्यूम के अंत में यह आपकी स्क्रिप्ट को कॉल करेगा, जिसमें यह जानने के लिए कुछ पर्यावरण चर होंगे कि किस वॉल्यूम को अभी संसाधित किया गया है। पूरी सूची के लिए मैनुअल पेज की जाँच करें , लेकिन कम से कम चर TAR_VOLUME बहुत उपयोगी है, यदि आपको आउटपुट फ़ाइल का नाम बदलना है, या किसी तरह वर्तमान वॉल्यूम का ट्रैक रखना है:

TAR_VOLUME वॉल्यूम टार का साधारण संख्या प्रसंस्करण है (यदि एक बहु-वॉल्यूम संग्रह पढ़ रहा है)।

यदि स्क्रिप्ट वापसी 0 tarजारी रहेगी, अन्यथा यह बंद हो जाएगा।

उदाहरण के लिए, यह प्रत्येक वॉल्यूम बनाएगा, अधिकतम आकार 20M के साथ, आपकी स्क्रिप्ट को हर बार सीमा तक पहुंचने के बाद:

tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=/path/to/myscript.sh --tape-length=20M

स्क्रिप्ट एक सरल हो सकती है echo "Next volume";readया आप इससे ट्रांसफर भी कर सकते हैं (वॉल्यूम का नाम बदलकर, क्योंकि एक बार जब आप बाहर निकल /tmp/volume.tarजाएंगे तो ओवरराइट हो जाएगा)।

दूसरी तरफ, ध्वज का उपयोग करना सुनिश्चित करें - मुल्ति-आयतन। यदि आप नहीं करते हैं, तो टार त्रुटियों के साथ बंद हो जाएगा (यदि कोई त्रुटि के लिए खोज करता है तो मैं इसे छोड़ दूंगा):

टार: संग्रह में अनपेक्षित ईओएफ

टार: त्रुटि पुनर्प्राप्त करने योग्य नहीं है: अब बाहर निकलना

tar xvf /path/to/transferred.volume --multi-volume

#Path/to/transferred.volume और हिट रिटर्न के लिए # 2 मात्रा तैयार करें:

tarआपके नए वॉल्यूम के लिए संकेत देगा। एक बार जब आप प्रेस दर्ज /path/to/transferred.volumeकरते हैं, तो फिर से खोला जाएगा, और इसी तरह।

1 JoshHarrison Jan 09 2021 at 01:30

पर बाद एडुआर्डो-Trapani के उत्कृष्ट जवाब नीचे दिए गए एक स्क्रिप्ट पर पाए जाने वाले एक थोड़ा संशोधित संस्करण है जीएनयू पृष्ठ है कि प्रत्येक खंड और पुनः के लिए उपयोगकर्ता इनपुट के लिए प्रतीक्षा करता है अगर एक मात्रा नहीं पाया जाता है:

पूर्णता के लिए यह वह कमांड है जिसका उपयोग आर्काइव बनाने के लिए किया जाता है:

tar cvf /tmp/volume.tar /path/to/files/ --new-volume-script=./myscript.sh --tape-length=1000M

और यह वह कमांड है जिसका उपयोग मैंने स्प्लिट आर्काइव निकालने के लिए किया था:

tar xvf /tmp/volume.tar --multi-volume --new-volume-script=./myscript.sh

myscript.sh:

#!/bin/bash
# For this script it's advisable to use a shell, such as Bash,
# that supports a TAR_FD value greater than 9.

echo "Press enter to continue to next volume"

read

echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.

name=`expr $TAR_ARCHIVE : '\(.*\)-.*'` case $TAR_SUBCOMMAND in
-c)       ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || echo "Failed to find volume" ;; *) exit 1 esac echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD

संपादित करें: यह केवल GNU Tar के साथ काम करता है जिसे macOS (w / Homebrew) पर स्थापित किया जा सकता है:

brew install gnu-tar

इसे अपने डिफ़ॉल्ट टार के रूप में उपयोग करने के लिए आपको इसे अपने रास्ते में जोड़ना होगा:

export PATH="$(brew --prefix)/opt/python/libexec/bin:$PATH"