root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
मैं इस समस्या को कैसे हल कर सकता हूं और /
फ़ाइल नाम रख सकता हूं ?
-C /
तो इसे निकालते समय निर्दिष्ट करें ।
root@server # tar fcz bkup.tar.gz /home/foo/
tar: Removing leading `/' from member names
मैं इस समस्या को कैसे हल कर सकता हूं और /
फ़ाइल नाम रख सकता हूं ?
-C /
तो इसे निकालते समय निर्दिष्ट करें ।
जवाबों:
इस सुविधा को अक्षम करने के लिए --absolute-names
या -P
विकल्प का उपयोग करें ।
tar fczP bkup.tar.gz /home/foo/
tar fcz bkup.tar.gz --absolute-names /home/foo
-C /
@Marcus के उत्तर में वर्णित विकल्प का उपयोग करने से STDERR संदेश से छुटकारा मिल जाएगा यदि वह आपका प्राथमिक लक्ष्य है।
यह वास्तव में एक विशेषता है, एक समस्या नहीं है। पूर्ण स्थानों वाले अभिलेखागार एक सुरक्षा जोखिम हैं। हमलावर ऐसे अभिलेखागार का उपयोग करके उपयोगकर्ताओं को महत्वपूर्ण सिस्टम स्थानों में फ़ाइलें स्थापित करने के लिए बरगला सकते हैं।
हां, आप उपयोग कर सकते हैं -P
। लेकिन आगे की स्लैश को हटाने के लिए टार की अनुमति देने में क्या गलत है, और केवल रूट निर्देशिका में निष्कर्षण करने के लिए संग्रह के उपयोगकर्ता की आवश्यकता है? फिर वे होशपूर्वक महत्वपूर्ण सिस्टम स्थानों को प्रभावित कर रहे हैं, और दुर्घटना से ऐसा नहीं कर सकते।
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]
-P
- उदाहरण के लिए, यदि आप FUSE में कुछ प्रकार की फाइल सिस्टम स्नैपशॉट सुविधा प्रदान कर रहे हैं। जब आप cwd
उपयोगकर्ता के दृष्टिकोण से बजाय एक विशिष्ट निर्देशिका में एक स्नैपशॉट खोलना चाहते हैं, तो कुछ समय हो सकता है ।
यदि आप STDERR में मुद्रित होने वाले "सदस्य नामों में से प्रमुखता को हटाना" से छुटकारा पाना चाहते हैं, लेकिन फिर भी उन प्रमुख स्लैश को छोड़ना चाहते हैं, जो टार समझदारी से डिफ़ॉल्ट रूप से करते हैं, मैंने टिप्पणीकार टाइमसॉफ्ट द्वारा यहां एक उत्कृष्ट समाधान देखा ।
समाधान में निर्देशिका को रूट (/) में बदलने के लिए -C विकल्प का उपयोग करना शामिल है, फिर फ़ाइल पेड़ को एक प्रमुख स्लैश के बिना संग्रह करने के लिए निर्दिष्ट करना , क्योंकि अब आपको केवल एक रिश्तेदार पथ की आवश्यकता है। यह सामान्य टार कमांड बनाने के समान कार्य करता है, लेकिन किसी स्ट्रिपिंग की आवश्यकता नहीं होती है:
tar fcz bkup.tar.gz -C / home/foo/
tar c -C / home/foo/*
) द्वारा निरूपित फ़ाइलों को टार करना चाहते हैं तो भी यह काम नहीं करता है , क्योंकि शेल बदले हुए रूट के बारे में नहीं जानता है। लेकिन फिर भी अन्य मामलों के लिए एक अच्छा जवाब है।
-C /
मेरे लिए काम नहीं करता है, अवधि। यह मेरे लिए stderr को नहीं रोकता है।
एक महीने देर से, लेकिन मुझे अपने मामले के लिए सबसे उपयुक्त समाधान मिला (एक शेल स्क्रिप्ट में) मूल निर्देशिका में जाना और वहां कमांड निष्पादित करना है।
cd /var/www/
tar -czf mysite.gz mysite
के बजाय:
tar -czf /var/www/mysite.gz /var/www/mysite
यह है कि मैंने यह कैसे बल बल विधि का उपयोग करके किया 2>&1 | grep -v "Removing leading"
:।
उदाहरण के लिए:
tar -cf "$BKUPDIR/${BKUPFILE}.tar" --overwrite --exclude '.*' --one-file-system "$SRCDIR" 2>&1 | grep -v "Removing leading"
tar
कमांड 2
घातक त्रुटि पर वापस आ सकती है।