साइज़ लिमिट के साथ फाइल को ज़िप कैसे करें?


19

मेरे पास एक स्क्रिप्ट है जो एक फ़ोल्डर से फ़ाइलों को ज़िप करती है। मैं यह सुनिश्चित करना चाहता हूं कि ज़िप की गई फ़ाइल 10 एमबी से अधिक न हो। यदि आकार 10 एमबी से अधिक है, तो उसे दूसरी ज़िप फ़ाइल बनानी चाहिए।

क्या कोई आदेश (या अन्य विधि) है जिसका उपयोग इसके लिए किया जा सकता है?


1
प्रश्न में gzip टैग है लेकिन पाठ ज़िप को संदर्भित करता है , क्या आप स्पष्ट कर सकते हैं? (उत्तर अलग-अलग स्वरूपों के आधार पर दृष्टिकोणों के बीच विभाजित किए गए हैं।)
हांक लिंडक्विस्ट

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

जवाबों:


21

आप "- ज़िप " की " स्प्लिट आर्काइव " कार्यक्षमता का उपयोग " --plit- आकार " विकल्प का उपयोग करके कर सकते हैं ।

"ज़िप" मैनपेज (" man zip") से:

(...)

स्प्लिट आर्काइव्स का एक उपयोग मल्टीपल रिमूवेबल
मीडिया पर एक बड़े संग्रह को संग्रहित कर रहा है। 20 विभाजित फ़ाइलों के साथ एक स्प्लिट आर्काइव के लिए, फाइलें टाइप की जाती हैं, जिनका
नाम है (अपने आर्काइव के नाम के साथ ARCHIVE को बदलें) AR.
CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip। ध्यान दें कि
अंतिम फ़ाइल .zip फ़ाइल है।

(...)

-एस स्प्लिटाइज़ -
split-size splitsize

स्प्लिट का आकार एक संख्या है जो वैकल्पिक रूप से एक गुणक द्वारा पीछा किया जाता है।
वर्तमान में संख्या एक पूर्णांक होनी चाहिए। गुणक
वर्तमान में k (किलोबाइट), m (मेगाबाइट), g (गीगाबाइट्स),
या t (टेराबाइट्स) में से एक हो सकता है। जैसा कि 64k न्यूनतम विभाजन आकार है,
गुणक के बिना संख्या मेगाबाइट के लिए डिफ़ॉल्ट है। उदाहरण के लिए, cre‐
ने
670 एमबी के विभाजन के साथ बार निर्देशिका की सामग्री के साथ फू नामक एक विभाजित संग्रह खाया
, जो सीडी, कमांड पर जलाने के लिए उपयोगी हो सकता है :

                zip -s 670m -r foo bar

इस्तेमाल किया जा सकता है।

तो, एक स्प्लिट ज़िप आर्काइव बनाने के लिए , आप निम्नलिखित कर सकते हैं (" -r" "रीसर्चिव" स्विच है जो डायरेक्टरी के सबडायरेक्ट्रीज़ को शामिल करने के लिए है):

$ zip -r -s 10m archive.zip directory/

फ़ाइल को अनज़िप करने के लिए , " zip" मैनपेज बताता है कि आपको "-s 0`" स्विच का उपयोग करना चाहिए:

(...)

 zip -s 0 split.zip --out unsplit.zip

एक एकल फ़ाइल संग्रह के लिए एक विभाजन संग्रह में बदल जाएगा।

(...)

तो, आप पहले "-s 0" स्विच का उपयोग करके ज़िप फ़ाइल को "अनप्लिस " करें:

$ zip -s 0 archive.zip --out unsplit.zip

... और फिर आपने अनप्लिट फ़ाइल खोल दी:

$ unzip unsplit.zip


6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

आपको कई फाइलें देगा:

archive.tar.gzaa

archive.tar.gzab

...

जो तब के साथ असम्पीडित हो सकता है:

cat archive.tar.* | tar -xzvf -

2

यहाँ मैं इसे 5GB फ़ाइल के लिए कैसे किया (1GB बनाम 10MB में विभाजित है जैसा कि ओपी ने पूछा है) ...

उदाहरण: एक FAT32 USB (फ़ाइलनाम "FIVE_GB_FILE.ISO" की प्रतिलिपि बनाने के लिए 5GB फ़ाइल को 1GB फ़ाइलों में विभाजित करने के लिए )

चरण 1: फ़ाइल को ज़िप करें (स्रोत के रूप में कोई संपीड़न, समान निर्देशिका)

zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO

चरण 2 : 5GB ज़िप फ़ाइल को 1GB ज़िप फ़ाइलों में विभाजित करें

zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP

Voila ... आपके पास निम्नलिखित 1GB फाइलें होनी चाहिए (और मूल, और चरण 1 से ज़िप)

SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.