ज़िप फ़ाइल में एक फ़ाइल को कैसे अपडेट करें


86

क्या पुरानी फ़ाइल को हटाए बिना नई फ़ाइल को जोड़ने और इसे वापस लाने के बिना ज़िप फ़ाइल में फ़ाइल को बदलना संभव है?

कारण मेरे पास एक ज़िप फ़ाइल है जो वास्तव में बड़ी है ज़िप फ़ाइल के अंदर एक xml है जिसे मुझे कभी-कभी अपडेट करना होगा। ज़िप खोलना और इसे फिर से खोलना एक लंबा समय लगता है। इसलिए मैं सिर्फ स्क्रिप्ट के माध्यम से ज़िप के अंदर एक xml को बदलने में सक्षम होना चाहूंगा। मेरे पास पहले से ही मेरे पास मौजूद xml के अपडेट की जांच है।

तो क्या यह संभव है कि सिर्फ एक xml को अनज़िप और रिज़िपिंग के बिना बदला जाए?

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


3
क्या आप प्रश्न शीर्षक को कुछ अधिक सार्थक में बदल सकते हैं?
टोकन

7
साथ ही, सवाल एक या दो वाक्य का हो सकता है। इसके बारे में 80% जुआ है।
अगली सूचना तक रोक दिया गया।

जवाबों:


62

से जिप (1) :

जब किसी मौजूदा ज़िप संग्रह का नाम दिया जाता है, तो ज़िप ज़िप संग्रह में नामांकित प्रविष्टियों की जगह लेगा या नए नामों के लिए प्रविष्टियाँ जोड़ेगा।

तो बस zipकमांड का उपयोग करें जैसा कि आप आम तौर पर एक नई .zip फ़ाइल बनाने के लिए करते हैं जिसमें केवल एक फ़ाइल होती है, जो आपके द्वारा निर्दिष्ट .zip फ़ाइल नाम को छोड़कर मौजूदा संग्रह होगा।


5
कृपया कोई उदाहरण दे सकता है? मुझे जिप कमांड की मदद समझ नहीं आ रही है।
गस्टवे

12
मान लें कि zip -r myfolder.zip myfolderयदि आप अपडेट करना चाहते myfolder/otherfolder/myfile.txtहैं, तो आप myfolder का उपयोग करके ज़िप करें , आगे बढ़ें और फ़ाइल संपादित करें और चलाएंzip -r myfolder.zip myfolder/otherfolder/myfile.txt
eakkas

1
कैसे करें कि यदि फ़ाइल को बदलने के लिए एक ही नाम नहीं है और न ही एक ही संरचना है कि फ़ाइल को पुन: व्यवस्थित किया जाए?
फ्रैक्टालिस्टे

2
@ फ्रैक्टलिस्ट आपको इसे एक ही नाम और संरचना बनाना होगा;)
हैक 5

72

मैंने पाया है कि लिनक्स zipफाइल को सिंगल फाइल को जिप में बदलने के लिए बोझिल होना चाहिए। jarजावा डेवलपमेंट किट से उपयोगिता आसान हो सकता है। WEB/web.xmlJAR फ़ाइल में अपडेट करने के सामान्य कार्य पर विचार करें (जो कि केवल ज़िप फ़ाइल है):

jar -uf path/to/myapp.jar -C path/to/dir WEB-INF/web.xml

यहाँ, path/to/dirनिर्देशिका से युक्त निर्देशिका का मार्ग है WEB-INF(जो बदले में होता है web.xml)।


क्या होगा अगर मुझे निर्देशक बनाने के बजाय केवल फ़ाइल की प्रतिलिपि बनाना है, WEB-INFजिसमें वह फ़ाइल है।
मदद करना

इसके अलावा मेरे मामले में, प्रिय पुराने "जार" उपयोग ने चाल चली! धन्यवाद!
बिटकॉइन

51

निम्नलिखित का प्रयास करें:

zip [zipfile] [file to update] 

एक उदाहरण:

$ zip test.zip test/test.txt
updating: test/test.txt (stored 0%)

2
उदाहरण के लिए धन्यवाद को समझने के लिए यह सबसे आसान है, धन्यवाद!
वत्सग

2
इस बात का ध्यान रखें कि अगर आप ज़िप के अंदर फाइल अपडेट करना चाहते हैं updating:, adding:तो इसके बजाय आपको देखना चाहिए ; अन्यथा आप ज़िप में फ़ाइलों को जोड़ रहे हैं, इसे प्रतिस्थापित नहीं कर रहे हैं।
एडेनशॉ

आप ठीक कह रहे हैं, मैंने उस पर ध्यान नहीं दिया। अद्यतन, धन्यवाद!
विजार्डऑफवोर

13

मुझे पता है कि यह पुराना सवाल है, लेकिन मैं ऐसा ही करना चाहता था। ज़िप संग्रह में एक फ़ाइल अद्यतन करें। और उपरोक्त जवाबों में से किसी ने भी वास्तव में मेरी मदद नहीं की।

मैंने जो किया था यह रहा। निर्मित अस्थायी निर्देशिका abc। उस निर्देशिका में फ़ाइल file.zipको कॉपी किया abcऔर निकाला गया। मैंने उस फ़ाइल को संपादित किया जिसे मैं संपादित करना चाहता था। फिर अंदर रहते हुए abc, निम्न आदेश चलाया

user@host ~/temp/abc $ zip -u file.zip
updating: content/js/ (stored 0%)
updating: content/js/moduleConfig.js (deflated 69%)

-u स्विच परिवर्तित / नई फ़ाइलों की तलाश करेगा और ज़िप संग्रह में जोड़ देगा।


11

अद्यतन ध्वज का उपयोग करें: -u

उदाहरण:

zip -ur existing.zip myFolder

यह कमांड कंप्रेस और myFolder(और यह सामग्री है) को जोड़ देगा existing.zip


उन्नत उपयोग:

अद्यतन ध्वज वास्तव में मौजूदा लोगों के खिलाफ आने वाली फ़ाइलों की तुलना करता है और या तो नई फाइलें जोड़ देगा, या मौजूदा लोगों को अपडेट करेगा।

इसलिए, यदि आप ज़िप फ़ाइल के भीतर एक विशिष्ट उपनिर्देशिका को जोड़ना / अपडेट करना चाहते हैं, तो स्रोत को वांछित के रूप में अपडेट करें, और फिर -uध्वज के साथ पूरे स्रोत को फिर से ज़िप करें । केवल परिवर्तित फ़ाइलों को ज़िप किया जाएगा।

यदि आपके पास स्रोत फ़ाइलों तक पहुंच नहीं है, तो आप ज़िप फ़ाइल को अनज़िप कर सकते हैं, फिर वांछित फ़ाइलों को अपडेट कर सकते हैं, और फिर -uध्वज के साथ फिर से ज़िप कर सकते हैं । फिर, केवल परिवर्तित फ़ाइलों को ज़िप किया जाएगा।

उदाहरण:

मूल स्रोत संरचना


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt

अपडेटेड सोर्स स्ट्रक्चर


ParentDir
├── file1.txt
├── file2.txt
├── ChildDir
│   ├── file3.txt
│   ├── Logs
│   │   ├── logs1.txt
│   │   ├── logs2.txt
│   │   ├── logs3.txt 
│   │   ├── logs4.txt <-- NEW FILE 

प्रयोग

$ zip -ur existing.zip ParentDir 
> updating: ParentDir/ChildDir/Logs (stored 0%)
>   adding: ParentDir/ChildDir/Logs/logs4.txt (stored 96%)


1

इसमें -f ऑप्शन भी है जो ज़िप फाइल को फ्रेश करेगा। इसका उपयोग सभी फ़ाइलों को अपडेट करने के लिए किया जा सकता है, जो ज़िप उत्पन्न होने के बाद से अपडेट किया गया है (यह मानते हुए कि वे ज़िप फ़ाइल के भीतर ट्री संरचना के भीतर एक ही स्थान पर हैं)।

यदि आपकी फ़ाइल का नाम /myfiles/myzip.zip है तो आपको बस इतना करना है

zip -f /myfiles/myzip.zip

0

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


0

7zip (7za) का उपयोग फ़ाइलों / निर्देशिकाओं को अच्छी तरह से जोड़ने / अद्यतन करने के लिए किया जा सकता है:

उदाहरण:MANIFEST.MF फ़ाइल को JAR फ़ाइल में बदलना (फ़ाइल तिथि की परवाह किए बिना) । /source/META-INFनिर्देशिका में शामिल है MANIFEST.MFफ़ाइल है कि आप में डाल करना चाहते हैं jar(ज़िप):

7za a /tmp/file.jar /source/META-INF/

केवल अद्यतन (स्रोत पुराना होने पर लक्ष्य को प्रतिस्थापित नहीं करता है)

7za u /tmp/file.jar /source/META-INF/

-2

हाँ, यह मुमकिन है।

लिनक्स आधारित सिस्टम पर सिर्फ जिप स्थापित करें और आप इसे कमांड लाइन में कॉल कर सकते हैं। मैनपेज पर एक नज़र डालें: http://linux.die.net/man/1/zip

लेकिन मेरे व्यक्तिगत अनुभव में, यदि संभव हो और संपीड़न इतना महत्वपूर्ण नहीं है, तो यह सादे टार फाइलों और टार के साथ बेहतर काम करता है।

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