आप एक बड़े tar.gz पुरालेख से एक एकल फ़ोल्डर कैसे निकालते हैं?


131

मैं 5GB संग्रह पर इस कमांड का उपयोग कर रहा हूं

tar -zxvf archive.tar.gz /folder/in/archive

क्या ऐसा करने का सही तरीका है? यह कोई कमांड लाइन उत्पादन के साथ हमेशा के लिए ले जा रहा है ...


क्या आपने एक निरपेक्ष या सापेक्ष पथ का उपयोग किया? सापेक्ष होना चाहिए, इसके अलावा यह सही लगता है। आपने इसे कब तक चलने दिया, और आपकी प्रणाली कितनी अच्छी है? यह ले जाएगा कम से कम एक तेजी से मशीन पर कई मिनट। संभावित रूप से एक घंटे या अधिक? मैं अब एक परीक्षा चला रहा हूं।
केविन

हां, यह ~ 1hr के बाद पूरा हुआ, लेकिन पूर्ण पथ गलत था, आप सही थे।
गैरेट हॉल

5
लिनक्स पर, आप देख सकते हैं कि आर्क कितनी दूर tarहै cat /proc/$(pidof tar)/fdinfo/0(कमांड को अनुकूलित करें यदि आपके पास एक से अधिक tarप्रक्रिया चल रही है)।
गाइल्स

महत्वपूर्ण हिस्सा भी कोई अनुगामी स्लैश नहीं है। का उपयोग करते हुए folder/folder2/काम नहीं करेगा।
955 पर मार्की 555

जवाबों:


145

tarडिफ़ॉल्ट रूप से सापेक्ष पथ संग्रहीत करता है । GNU टार यहां तक ​​कहता है कि अगर आप एक निरपेक्ष पथ को संचय करने का प्रयास करते हैं:

tar -cf foo.tar /home/foo
tar: Removing leading `/' from member names

यदि आपको किसी विशेष फ़ोल्डर को निकालने की आवश्यकता है, तो टार फाइल में एक नज़र डालें:

tar -tvf foo.tar

और सटीक फ़ाइल नाम पर ध्यान दें। अपनी foo.tarफ़ाइल के मामले में , मैं यह /home/foo/barकहकर निकाल सकता हूं:

tar -xvf foo.tar home/foo/bar # Note: no leading slash

तो नहीं, जिस तरह से आपने पोस्ट किया है वह (आवश्यक) इसे करने का सही तरीका नहीं है। आपको अग्रणी स्लैश को छोड़ना होगा। यदि आप पूर्ण रास्तों का अनुकरण करना चाहते हैं, तो cd /पहले करें और सुनिश्चित करें कि आप सुपरसियर हैं। इसके अलावा, यह वही करता है:

tar -C / -xvf foo.tar home/foo/bar # -C is the ‘change directory’ option

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

नोट: यदि आप -Pविकल्प का उपयोग करते हैं , tar तो निरपेक्ष पथ संग्रह करेंगे । इसलिए यह हमेशा निकालने से पहले बड़े अभिलेखागार की सामग्री की जांच करने के लिए भुगतान करता है।


36
--strip-components=Nयहाँ कुछ के लिए उपयोगी हो सकता है।
एक्यूमेनस

2
मेरे मामले में इसके ./foldername/बजाय लिखना आवश्यक था foldername, मुझे लगता है कि यह इसलिए था क्योंकि जब मैंने टार बनाया था तो मैंने इसे बनाया था tar -cvf santi.tar ./*और जब मैंने टार को "सूचीबद्ध" किया था तो यह कहा गया थाdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
सैंटियागो एरीज़टी

1
और के बारे में .gz?
पीटर क्रूस

1
बदल @PeterKrauss -xvfको -xzvf(जोड़ने -zविकल्प) और स्पष्ट रूप से foo.tarकरने के लिए foo.tar.gzया जो कुछ भी अपने संग्रह नाम पर है। वही -j(bz2) और कुछ हालिया संस्करणों पर, -J(xz) रखता है । अन्यथा, एक पाइपलाइन zcat foo.tar.gz | tar -xvf - …भी काम करती है।
एलेक्सियो

और याद रखें, यदि आप निष्कर्षण के दौरान सभी वर्बोज़ आउटपुट से थक गए हैं तो बस vसभी उदाहरणों में छोड़ दें । जैसे, tar -tf foo.tarऔर tar -xf foo.tar ...
बो आर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.