मेरे पास बैकअप शेल स्क्रिप्ट के भाग में निम्नलिखित कमांड है:
tar -cjf site1.bz2 /var/www/site1/
जब मैं पुरालेख की सामग्री को सूचीबद्ध करता हूं, मुझे मिलता है:
tar -tf site1.bz2
var/www/site1/style.css
var/www/site1/index.html
var/www/site1/page2.html
var/www/site1/page3.html
var/www/site1/images/img1.png
var/www/site1/images/img2.png
var/www/site1/subdir/index.html
लेकिन मैं /var/www/site1
निष्कर्षण को आसान बनाने और बेकार निरंतर निर्देशिका संरचना से बचने के लिए, निर्देशिका के भाग को और संग्रह के भीतर नाम दर्ज करना चाहूंगा । कभी नहीं पता, अगर मैं ऐसी वेबसाइट में बैकअप की गई वेबसाइटों को निकालता, जहाँ वेब डेटा को संग्रहीत नहीं किया जाता था /var/www
।
उपरोक्त उदाहरण के लिए, मैं यह करना चाहूंगा:
tar -tf site1.bz2
style.css
index.html
page2.html
page3.html
images/img1.png
images/img2.png
subdir/index.html
इसलिए, जब मैं निकालता हूं, तो फ़ाइलों को वर्तमान निर्देशिका में निकाला जाता है और मुझे बाद में निकाली गई फ़ाइलों को स्थानांतरित करने की आवश्यकता नहीं होती है, और इसलिए कि उप-निर्देशिका संरचना संरक्षित होती है।
stackoverflow
वेब पर और अन्य स्थानों पर टार और बैकअप के बारे में पहले से ही कई प्रश्न हैं, लेकिन उनमें से अधिकांश पूरे उप-निर्देशिका संरचना (चपटे) को छोड़ने के लिए कहते हैं, या नामों में प्रारंभिक / हटा दें या हटा दें (I don ' टी पता है कि निकालने के दौरान यह वास्तव में क्या बदलता है), लेकिन अब और नहीं।
यहाँ और वहाँ कुछ समाधानों को पढ़ने के बाद मैंने मैनुअल की कोशिश की:
tar -cjf site1.bz2 -C . /var/www/site1/
tar -cjf site1.bz2 -C / /var/www/site1/
tar -cjf site1.bz2 -C /var/www/site1/ /var/www/site1/
tar -cjf site1.bz2 --strip-components=3 /var/www/site1/
लेकिन उनमें से किसी ने भी मेरे इच्छित तरीके से काम नहीं किया। कुछ कुछ नहीं करते हैं, कुछ अन्य अब उप-निर्देशिकाओं को संग्रहीत नहीं करते हैं।
यह एक क्रॉन द्वारा शुरू की गई बैकअप शेल स्क्रिप्ट के अंदर है, इसलिए मुझे अच्छी तरह से पता नहीं है कि कौन सा उपयोगकर्ता इसे चलाता है, पथ और वर्तमान निर्देशिका क्या है, इसलिए हमेशा सब कुछ के लिए निरपेक्ष पथ लिखना आवश्यक है, और वर्तमान निर्देशिका को बदलना पसंद नहीं करेगा स्क्रिप्ट में आगे कुछ तोड़ने से बचने के लिए (क्योंकि यह न केवल बैकअप वेबसाइटों, बल्कि डेटाबेस भी है, फिर सभी को एफ़टीपी आदि भेजें)
इसे कैसे प्राप्त किया जाए?
क्या मुझे सिर्फ गलतफहमी है कि विकल्प -सी कैसे काम करता है?
-C
बस "निर्देशिका बदलें" का मतलब है, जबकि एक पथ (या उपसर्ग) की जगह केवल द्वारा किया जा सकता है --transform
। रीफ। superuser.com/questions/595510/prepend-prefix-in-tar/595512 आप सरल -सी (परिवर्तन निर्देशिका) और इसे बदल सकते हैं: `` tar cjf site1.bz2-ransransform "s / ^ \। \" // $ targetbase / "-C / var / www / site1। `` `