टार: सदस्य नामों से अग्रणी `/ 'हटाना


137
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names

मैं इस समस्या को कैसे हल कर सकता हूं और /फ़ाइल नाम रख सकता हूं ?


2
क्या वास्तव में उम्मीद के मुताबिक काम नहीं हो रहा है?

34
यह एक समस्या नहीं है। आप टार संग्रह में अग्रणी स्लैश नहीं चाहते हैं । गंभीरता से। यदि आप अपने सिस्टम रूट में एक आर्काइव निकालना चाहते हैं, -C /तो इसे निकालते समय निर्दिष्ट करें ।
ThiefMaster

जवाबों:


69

इस सुविधा को अक्षम करने के लिए --absolute-namesया -Pविकल्प का उपयोग करें ।

tar fczP bkup.tar.gz /home/foo/

tar fcz bkup.tar.gz --absolute-names /home/foo

54
यह सही उत्तर है, लेकिन जागरूक रहें, कि ज्यादातर मामलों में, यह वह नहीं है जो आप चाहते हैं , क्योंकि यह एक संग्रह का परिणाम होता है जो संपूर्ण पथ में अर्क होता है!
रूबो77

8
-C /@Marcus के उत्तर में वर्णित विकल्प का उपयोग करने से STDERR संदेश से छुटकारा मिल जाएगा यदि वह आपका प्राथमिक लक्ष्य है।
मैट सैंडर्स

1
जैसा कि @ rubo77 ने टिप्पणी की है, आमतौर पर यह कमांड का अपेक्षित परिणाम नहीं है।
alfredocambera

3
अधिकांश समय यह वह नहीं है जो एक उपयोगकर्ता चाहता है, बस इसलिए कि उनमें से अधिकांश ने मैनुअल को तब तक नहीं पढ़ा है जब तक उन्हें ज़रूरत नहीं है (इसके लिए किसी को भी समय नहीं मिला है)। इसलिए, यह कम से कम, अपने उत्तर का विस्तार करने के लिए समझदार होगा, लोगों को ऐसा नहीं करने की चेतावनी देता है जब तक कि वे पूरी तरह से सुनिश्चित न हों कि वे समझते हैं कि इसका प्रभाव क्या है। विशेष रूप से एक उत्तर के रूप में स्वीकार किया जा रहा है।
म्लादेन बी।

1
@Toskan उदाहरण जोड़ा
Barmar

89

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

हां, आप उपयोग कर सकते हैं -P। लेकिन आगे की स्लैश को हटाने के लिए टार की अनुमति देने में क्या गलत है, और केवल रूट निर्देशिका में निष्कर्षण करने के लिए संग्रह के उपयोगकर्ता की आवश्यकता है? फिर वे होशपूर्वक महत्वपूर्ण सिस्टम स्थानों को प्रभावित कर रहे हैं, और दुर्घटना से ऐसा नहीं कर सकते।


5
कभी-कभी सुविधाएँ समस्याएँ होती हैं। मुझे यह स्क्रिप्ट एक बैकअप स्क्रिप्ट की स्थापना के बाद मिली, जो कि एक गैर-शून्य निकास स्थिति पर ईमेल करेगी tar। यह विशेष संदेश tarएक स्टेटस के साथ बाहर निकलने के लिए पैदा कर रहा था 1, जो मुझे सफल बैकअप पर झूठे ईमेल अलर्ट प्राप्त करने के लिए प्रेरित कर रहा था, सिर्फ इसलिए tarकि यह संदेश STDERR को लिख रहा था। मैंने @ मार्कस के समाधान के अपने स्वयं के cd /path/to/network/share && tar -cJf scripts.backup.tar.xz -C / home/user/scripts 2>/dev/null || [send an email alert]
ट्वीक्ड

1
मुझे लगता है कि उपयोग करने के लिए कुछ उपयोग के मामले हैं -P- उदाहरण के लिए, यदि आप FUSE में कुछ प्रकार की फाइल सिस्टम स्नैपशॉट सुविधा प्रदान कर रहे हैं। जब आप cwdउपयोगकर्ता के दृष्टिकोण से बजाय एक विशिष्ट निर्देशिका में एक स्नैपशॉट खोलना चाहते हैं, तो कुछ समय हो सकता है ।
DIMMSum

81

यदि आप STDERR में मुद्रित होने वाले "सदस्य नामों में से प्रमुखता को हटाना" से छुटकारा पाना चाहते हैं, लेकिन फिर भी उन प्रमुख स्लैश को छोड़ना चाहते हैं, जो टार समझदारी से डिफ़ॉल्ट रूप से करते हैं, मैंने टिप्पणीकार टाइमसॉफ्ट द्वारा यहां एक उत्कृष्ट समाधान देखा ।

समाधान में निर्देशिका को रूट (/) में बदलने के लिए -C विकल्प का उपयोग करना शामिल है, फिर फ़ाइल पेड़ को एक प्रमुख स्लैश के बिना संग्रह करने के लिए निर्दिष्ट करना , क्योंकि अब आपको केवल एक रिश्तेदार पथ की आवश्यकता है। यह सामान्य टार कमांड बनाने के समान कार्य करता है, लेकिन किसी स्ट्रिपिंग की आवश्यकता नहीं होती है:

tar fcz bkup.tar.gz -C / home/foo/

यह वृद्धिशील बैकअप के साथ काम नहीं करेगा। लेकिन एक अच्छा जवाब।
गजादीपति

यदि आप शेल-विस्तार (उदाहरण tar c -C / home/foo/*) द्वारा निरूपित फ़ाइलों को टार करना चाहते हैं तो भी यह काम नहीं करता है , क्योंकि शेल बदले हुए रूट के बारे में नहीं जानता है। लेकिन फिर भी अन्य मामलों के लिए एक अच्छा जवाब है।
बोरिस

1
-C /मेरे लिए काम नहीं करता है, अवधि। यह मेरे लिए stderr को नहीं रोकता है।
एक्यूमेनस

3
@ABB सुनिश्चित करें कि निम्नलिखित मार्ग -C / सापेक्ष है।
zurfyx

क्या यह तरीका काम करेगा यदि किसी उपयोगकर्ता के पास रूट डायरेक्टरी की अनुमति नहीं है?
म्लादेन बी।

31

एक महीने देर से, लेकिन मुझे अपने मामले के लिए सबसे उपयुक्त समाधान मिला (एक शेल स्क्रिप्ट में) मूल निर्देशिका में जाना और वहां कमांड निष्पादित करना है।

cd /var/www/
tar -czf mysite.gz mysite

के बजाय:

tar -czf /var/www/mysite.gz /var/www/mysite

9
वास्तव में आप इसका उपयोग कर सकते हैं: tar -zcvf mysite.gz -C / var / www / mysite / इसका लाभ यह है कि आप इसे किसी भी निर्देशिका से निष्पादित कर सकते हैं
alfredocambera

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

मुझे शायद एक सही उत्तर के रूप में स्वीकार किया जाना चाहिए था।
म्लादेन बी।

मैं यह नहीं देखता कि यह सवाल का जवाब कैसे देता है। यह कुछ अलग है जो किया जा सकता है। ……… जैसे: प्रश्न: मैं लॉस एंजिल्स से न्यूयॉर्क तक कैसे जा सकता हूं? A: इसके बजाय सैन फ्रांसिस्को जाएं।
जी-मैन

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

7

यह है कि मैंने यह कैसे बल बल विधि का उपयोग करके किया 2>&1 | grep -v "Removing leading":।

उदाहरण के लिए:

tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v  "Removing leading"

4
इसके साथ समस्या यह है कि त्रुटि कोड छुपाता है। इसलिए अगर आप एक bash script में tar से एरर कोड को चेक करना चाहते हैं, तो यह 0 पर सफलता में नहीं आएगा।
ब्रायन

@staticx, त्रुटि कोड की परवाह किए बिना 0 है।
एक्यूमेनस

1
@ABB मेरी tarकमांड 2घातक त्रुटि पर वापस आ सकती है।
Jite

1
@Brian आप बाहर निकलने के कोड को प्राप्त करने के लिए $ PIPESTATUS का उपयोग कर सकते हैं। देखें unix.stackexchange.com/questions/14270/...
simpleuser

3

-Cकेवल उस पथ के लिए उपयोग करने का प्रयास करें जो संपूर्ण पथों के साथ संपीड़ित करने से रोकेगा:

root@server # tar fcz bkup.tar.gz -C /home/ foo/

2

मैंने इस समस्या को हल किया:

cd /home/foo && tar czf ~/backup.tar.gz .

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

cd / && tar xzf backupt.tar.gz इसे स्थानांतरित करने के बाद।

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