मौजूदा tar.gz संग्रह में एक फ़ाइल जोड़ें / अपडेट करें?


73

क्या tar.gz आर्काइव में किसी फाइल को जोड़ने / अपडेट करने का कोई तरीका है? मूल रूप से, मेरे पास एक संग्रह है जिसमें एक फ़ाइल है /data/data/com.myapp.backup/./files/settings.txtऔर मैं उस फ़ाइल को संग्रह (पहले से किया हुआ) से खींचना चाहता हूं और इसे संपादित करने के बाद वापस संग्रह में धकेल दूंगा। मैं यह कैसे हासिल कर सकता हूं? क्या .मार्ग के कारण यह समस्याग्रस्त है ?


2
+1। इससे OS X पर काम करना इतना आसान हो जाएगा। वर्तमान में, मुझे सभी छिपी हुई फ़ाइलों की एक निर्देशिका को साफ़ करना है .DS_Storeऔर फिर निर्देशिका को फिर से टारगेट करना है।

जवाबों:


15

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

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

एक पहला विकल्प FUSE के लिए आर्कमाउंट प्रोजेक्ट होगा । यहाँ उस पर एक ट्यूटोरियल है । आपके सिस्टम में शायद पहले से ही FUSE है और अगर यह आपके वितरण के लिए नहीं है तो इसके लिए एक विकल्प होना चाहिए।

अन्य विकल्प टैराफ़ है । यह उपयोग करने के लिए सरल है , लेकिन मैंने सुना है कि यह bzip2 अभिलेखागार को भ्रष्ट करने के साथ कुछ परेशानी है तो आप पहले बहुत अच्छी तरह से परीक्षण कर सकते हैं।


1
मैं AVFS का उपयोग करता हूं , जो उबंटू और डेबियन में पैक किया गया है। क्या आप जानते हैं कि AVFS की तुलना में आर्कमाउंट और टैरफ़ कैसे होते हैं?
गाइल्स

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

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

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

43

अपनी फ़ाइल को अपने संग्रह से खींचने के लिए, आप उपयोग कर सकते हैं tar xzf archive.tar.gz my/path/to/file.txt। ध्यान दें कि फ़ाइल के पथ में निर्देशिका भी बनाई जाएगी। संग्रह में फ़ाइलों को सूचीबद्ध करने के लिए tar t(यानी tar tzf archive.tar.gz) का उपयोग करें ।

tarफ़ाइलों के "इन-प्लेस" अपडेट का समर्थन नहीं करता है। हालाँकि, आप फ़ाइलों को किसी संग्रह के अंत में जोड़ सकते हैं, भले ही उनके पास संग्रह में पहले से मौजूद फ़ाइल के समान पथ हो। उस स्थिति में, फ़ाइल की दोनों प्रतियां संग्रह में होंगी, और बाद में जोड़ी गई फ़ाइल पहले वाले को ओवरराइड कर देगी। इसके लिए उपयोग करने का कमांड है tar r(या tar uकेवल उन फ़ाइलों को जोड़ने के लिए जो संग्रह से नए हैं) का उपयोग करने के लिए कमांड है। .रास्ते में एक समस्या नहीं होनी चाहिए।

एक पकड़ है, हालांकि: आप एक संपीड़ित संग्रह में नहीं जोड़ सकते। तो आपको करना होगा:

gunzip archive.tar.gz
tar rf archive.tar data/data/com.myapp.backup/./files/settings.txt
gzip archive.tar

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


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

23
आप इसे यूनिक्स तरीके से भी कर सकते हैं:gzip -dc archive.tar.gz | tar -r data/data/com.myapp.backup/./files/settings.txt | gzip >archive_new.tar.gz
साइमन रिक्टर

2
IIRC आप बस दो gzip'ed फ़ाइलों को संक्षिप्त कर सकते हैं। परिणाम एक बड़ी gzip'ed फ़ाइल है जिसमें असम्पीडित दोनों फाइलें समाहित हैं।
FUZxxl

एक बार फाइल अनजिप हो जाने के बाद, क्या --update फ्लैग का उपयोग करना संभव नहीं है?
पीटरो

@FUZxxl +1 गज़िप कॉन्सेप्टन का उल्लेख करने के लिए
जोहान बोले

9

टार को मूल रूप से टेप के लिए इस्तेमाल किया जाना था, इसलिए "रीप्लेसिंग" फाइलें वास्तव में डिजाइन में नहीं हैं। हालाँकि, आप टार को अपडेट करने के लिए ओरिजिनल टार और फिर -u से फाइल को डिलीट करने के लिए --delete का उपयोग कर सकते हैं और फाइल को री-ऐड कर सकते हैं। यह थोड़ा सा लग सकता है, क्योंकि टार्क को आंतरिक रूप से संग्रह को पुनर्गठित करने की आवश्यकता है।


StackExchange में आपका स्वागत है! आपके उत्तर में केवल एक सुझाव होता है जो पहले से ही किसी अन्य उत्तर में होता है । डुप्लिकेट बनाने से बचने के लिए, कृपया उत्तर देने से पहले एक प्रश्न के अन्य उत्तर पढ़ें।
जिगलीनाग 19

1
मैंने अपने उत्तर को थोड़ा संपादित किया। मुझे नहीं लगता कि अन्य उत्तर में उल्लेख किया गया है-delete
rleibman

-5

मेरे लिनक्स x86_64 GNU / लिनक्स पर उस ऑपरेशन को करने के लिए जो मैं बस निम्नलिखित कमांड का उपयोग करता हूं:

tar cvfpz /path/archive.tar -T list.txt

यह आदेश /pathफ़ाइल में शामिल फ़ाइल की सूची का उपयोग करके एक संपीड़ित संग्रह के निर्माण का कारण बनता है list.txt


6
यह उस फ़ाइल /path/archive.tarको जोड़ने / अपडेट करने के बजाय एक मौजूदा फ़ाइल को अधिलेखित करता है ।
एंथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.