2010-06-30 10 views
35

मैं एक PHP स्क्रिप्ट चला रहा हूं जो मुझे उन फ़ाइलों के पूर्ण पथ प्राप्त करता है जिन्हें मैं टैर करना चाहता हूं। यह मेरे पास वाक्यविन्यास है:मैं टैर के लिए पूर्ण पथ कैसे बहिष्कृत करूं?

tar -cf tarname.tar -C /www/path/path/file1.txt /www/path/path2/path3/file2.xls 

जब मैं इसे अनार करता हूं, तो यह फ़ाइलों के लिए पूर्ण पथ बनाता है। मैं इसे दिखाने के लिए बस सब कुछ के साथ /path कैसे प्राप्त करूं?

उत्तर

50

यदि आप फ़ाइल नाम के पहले n प्रमुख घटकों को हटाना चाहते हैं, तो आपको strip-components की आवश्यकता है। तो आपके मामले में, निकासी पर,

tar xvf tarname.tar --strip-components=2 

man pagetar के इस एक सहित कई विकल्प हैं, की एक सूची है करो। इस ऑपरेशन के लिए tar के कुछ पुराने संस्करण --strip-path का उपयोग करते हैं।

51

आप गलत तरीके से -C स्विच का उपयोग कर रहे हैं, जिसका उपयोग निर्देशिकाओं को बदलने के लिए किया जाता है। तो तुम क्या करने की जरूरत है:

tar -cf tarname.tar -C /www/path path/file1.txt path2/path3/file2.xls 

या आप /www/path के अंतर्गत सब कुछ पैकेज करना चाहते हैं तो कार्य करें:

tar -cf tarname.tar -C /www/path . 

आप -C स्विच कई बार उपयोग कर सकते हैं।

+4

जब मैं ऐसा करने का प्रयास करता हूं तो मुझे अपने संग्रह में डॉट नाम की एक फ़ाइल मिलती है। tar -cf tarname.tar some_file_in_current_folder -C/कुछ/पथ। –

+0

'tar -tvf tarname.tar' आज़माएं और आप देखेंगे कि यह एक फ़ाइल नहीं है। –

0

अगर तुम नहीं जानते कि कितने घटक पथ में हैं, तो आप इस कोशिश कर सकते:

tar xvf some.tar --transform 's?.*/??g' 

--transform तर्क एक प्रतिस्थापन है:

DIR_TO_PACK=/www/path/ 
cd $DIR_TO_PACK/.. 
tar -cf tarname.tar $(basename $DIR_TO_PACK) 
9

मेरे लिए निम्नलिखित सबसे अच्छा काम करता sed के लिए regex, जिसके लिए हर निकाले गए फ़ाइलपाथ खिलाया जाता है। --strip-components के विपरीत, यह सभी पथ जानकारी को हटा देगा, न केवल घटकों की निश्चित संख्या।

+2

ध्यान दें कि लंबे नाम विकल्प '--transform' केवल जीएनयू टैर के लिए है। बीएसडी टैर का समतुल्य विकल्प '-s' निम्नलिखित'/old/new/[gps] 'पैटर्न है, और इस तरह से उपयोग करते हुए, जैसा कि आपने कहा है कि यह निर्देशिका पदानुक्रम को फ़्लैट करेगा, अभ्यास में उपयोगी नहीं हो सकता है। – Meow

+1

सर्वश्रेष्ठ विकल्प जब आप नहीं जानते कि खरगोश छेद कितना गहरा होता है (मेरा मतलब है, आपकी निर्देशिका संरचना)। सुनिश्चित करें कि सभी फ़ाइल नाम निर्देशिकाओं में अद्वितीय हैं या आप अप्रत्याशित परिणामों का अनुभव कर सकते हैं। – trs

संबंधित मुद्दे