क्या एक ज़िप फ़ाइल के अंदर फ़ाइलों को संपादित करने का एक तरीका है, उन्हें स्पष्ट रूप से पहले निकाले बिना?


47

मुझे कभी-कभी .zip या .jar फ़ाइल में परिवर्तन करने की आवश्यकता होती है, इसलिए मैं आमतौर पर फ़ाइल को स्थानांतरित करता हूं /tmp, सभी फ़ाइलों को निकालने unzip, कुछ फ़ाइलों को संपादित करने और फिर फ़ाइलों को फिर से ज़िप करने के लिए। यह काम करता है, लेकिन यह थकाऊ हो सकता है। क्या कोई उपयोगिता या शेल स्क्रिप्ट है जिसे मैं स्पष्ट रूप से कॉल किए बिना ज़िप फ़ाइल के अंदर एक फ़ाइल को संपादित करने के लिए उपयोग कर सकता हूं unzipऔर zip(भले ही यह इन कमांडों के आसपास केवल एक आवरण हो)?


बस जिज्ञासु अगर जवाब पर काम करता है .jar फ़ाइलें? (मैंने वहां इसका परीक्षण नहीं किया।)
बजे

@beroe यह तब से होना चाहिए क्योंकि वे ज़िप संपीड़न एल्गोरिथ्म का उपयोग करते हैं। यह वास्तव में एक समाधान की तलाश के लिए मेरी मुख्य प्रेरणा थी क्योंकि मेरे पास .war फाइलें एक ऐप सर्वर पर तैनात थीं जो मुझे फिर से पैक करने और एक भी फाइल को संशोधित करने के लिए फिर से तैनात करने जैसा महसूस नहीं हुआ था।
ऑस्टिन

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

@beroe यह बहुत अच्छा है। यह पूछने से पहले, मैं मनमाने आदेशों को निष्पादित करने के लिए ज़िप फ़ाइल के अंदर "छद्म-खोल" लॉन्च करने के लिए एक पायथन स्क्रिप्ट को कोड करने जा रहा था। मैं तुम्हारे साथ आने में दिलचस्पी होगी।
ऑस्टिन

ठीक है, उप-फ़ोल्डर्स का समर्थन करने के लिए एक और समाधान जोड़ा गया है, और यह सीमित परीक्षण में काम करता है ।
बेर

जवाबों:


19

क्या आपको पता है कि संग्रह में फ़ाइल का नाम रखने से पहले उसे खोल देना चाहिए? आप ज़िप को अनज़िप करने /tmp, संपादित करने और ताज़ा करने के लिए एक फंक्शन बना सकते हैं :

zipedit(){
    echo "Usage: zipedit archive.zip file.txt"
    unzip "$1" "$2" -d /tmp 
    vi /tmp/$2 && zip -j --update "$1"  "/tmp/$2" 
}

जैसा कि यह कहा गया है, उपयोग है:

zipedit myarchive.zip myfile.txt

यह संग्रह से नामित फ़ाइल को अनपैक करता है /tmp, इसे सहेजता है , इसे संपादित करता है, viफिर इसे संग्रह में वापस जोड़ता है, जबकि पथ "जंक" करता है। अपने .bash_profile में जोड़ें, यह मानते हुए bash...

संपादित करें: नीचे एक संस्करण है जो संग्रह के अंदर सबफ़ोल्डर्स के साथ काम करता है ... ध्यान दें, फ़ोल्डर के नाम से पहले स्लैश का उपयोग myfolder/file.txtन करें (अर्थात उपयोग न करें /myfolder/file.txt)। यदि आप ऐसी फ़ाइल संपादित करते हैं जो पहले से ही संग्रह में मौजूद नहीं थी, तो यह आपके लिए बनाएगी। यह भी सुनिश्चित नहीं है कि यह ज़िप फ़ाइल के लिए पूर्ण पथ के साथ काम करेगा या नहीं। रिश्तेदार के साथ सबसे अच्छा छड़ी।

zipedit(){
    echo "Usage: zipedit archive.zip folder/file.txt"
    curdir=$(pwd)
    unzip "$1" "$2" -d /tmp 
    cd /tmp
    vi "$2" && zip --update "$curdir/$1"  "$2" 
    # remove this line to just keep overwriting files in /tmp
    rm -f "$2" # or remove -f if you want to confirm
    cd "$curdir"
}

सवाल के लिए धन्यवाद। मैं शायद यह भी एक का उपयोग कर समाप्त होगा!

एक और संपादन: अनटाइटेड, लेकिन मैंने पढ़ा है vimऔर emacsक्या दोनों जार फ़ाइलों को सीधे संपादित करेंगे?


मैं इस बात की पुष्टि कर सकता हूं कि लिनक्स पर कमांड लाइन से जिप-फाइलों को संपादित करने के लिए vim शानदार काम करता है, टिप के लिए बहुत बहुत धन्यवाद!
थॉमस बिंडज़स

60

विम ज़िप फ़ाइलों के अंदर पारदर्शी रूप से संपादन फ़ाइलों का समर्थन करता है। बस निष्पादित करें:

vim file.zip

और आपको ज़िप आर्काइव के अंदर फाइलों की एक सूची दिखाई जाएगी। जिसे आप संपादित करना चाहते हैं उसे चुनें, जो आप चाहते हैं उसे बदलें, और इसके साथ बाहर निकलें: x

यदि इसके vimसाथ प्रतिक्रिया होती है:

परिवर्तन नहीं कर सकते, 'परिवर्तनीय' बंद है

.. बस चलाएं :set modifiableया :set ma(स्रोत: https://stackoverflow.com/questions/5745506/vim-modifiable-is-off )


2
वैसे, विम में डिफ़ॉल्ट ज़िप समर्थन केवल एक स्तर के ज़िप को संपादित करने की अनुमति देता है। अगर आपको ZIP के अंदर ZIP एडिट करने की जरूरत है, तो आपको इस vim plugin का इस्तेमाल करना चाहिए ।
jesjimher

1
Emacs के साथ भी।
माइक

4
इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए
मार्टिंज बर्गर

3
जीवन बचाने वाला। वास्तव में शांत की विशेषता, और काफी अप्रत्याशित भी
पीटर Peráč

4

संक्षिप्त उत्तर: नहीं।

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

$ file-roller b3.zip 

जब आप अपनी संपादित फ़ाइल सहेजते हैं, तो आपको यह संवाद प्राप्त करना चाहिए:

आप इसके लिए एक स्क्रिप्ट भी बना सकते हैं, लेकिन यह जटिल हो जाता है अगर आपके पास संपीड़ित अभिलेखागार होते हैं जिसमें कई फाइलें होती हैं। मुझे पता है कि अगर आप की जरूरत है और मैं कुछ पकाने में सक्षम हो सकता है।

यहाँ छवि विवरण दर्ज करें


0

लघु पांडित्य उत्तर; नहीं। यदि आप संपीड़न के बारे में सोचते हैं, तो आप फ़ाइलों को छोटा करने के लिए अतिरेक का उपयोग कर रहे हैं, इसलिए कोई भी संपादन पूरी फ़ाइल को संग्रह के भीतर बदल देता है, संभवतः संग्रह।

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


पता नहीं क्यों किसी ने दिया -1। के लिए +1 fuse-zip
मिथक

0

zip(आसान संदर्भ के लिए ऑनलाइन संस्करण: http://linux.die.net/man/1/zip ) के लिए मैन पेज के अनुसार , zipकमांड में एक -uझंडा होता है जिसे वह इस प्रकार बताता है:

ज़िप संग्रह में एक मौजूदा प्रविष्टि को केवल तब ही बदलें (अपडेट करें) जब इसे हाल ही में ज़िप संग्रह में पहले से ही संस्करण से अधिक संशोधित किया गया हो।


0

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


0

मैंने एक Vim प्लगइन लिखा है जो नेस्टेड ज़िप फाइलों को ब्राउज़ करने और संपादित करने के लिए स्टॉक zip.vim तक फैला हुआ है।

https://github.com/lbrayner/vim-rzip


आप इसे लिनक्स पर कैसे स्थापित करते हैं?
पंडरी

मैंने रिपॉजिटरी के README में इंस्टॉलेशन निर्देश जोड़े । कृपया वापस जाँच करें।
लबनायनर

0

आप उदाहरण के लिए standart KDE टेक्स्ट एडिटर का उपयोग कर सकते हैं:

  1. संग्रह प्रबंधक में खुला संग्रह
  2. KDE gui के संपादक में टेक्स्ट फाइल खोलें
  3. टेक्स्ट फ़ाइल और सिस्टम को सहेजना आपको संग्रह को ताज़ा करने के लिए कहता है - हाँ पर क्लिक करें
  4. संग्रह और संग्रह के फ़ोल्डर के लिए अनुमति के बारे में मत भूलना (मेरी पसंदीदा गलती)

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