उस निर्देशिका में टार फ़ाइल न बनाएं जिसे आप पैक कर रहे हैं:
tar -czf /tmp/workspace.tar.gz .
चाल है, सिवाय इसके कि जब आप अनपैक करते हैं, तो यह सभी वर्तमान निर्देशिका में फ़ाइलों को निकालेगा। बेहतर करने के लिए:
cd ..
tar -czf workspace.tar.gz workspace
या, यदि आप उस निर्देशिका का नाम नहीं जानते हैं जो आप में थे:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(यह मानता है कि जहाँ आप हैं, वहाँ पहुँचने के लिए आपने सिम्बलिंक का पालन नहीं किया है और यह शेल आपको सिम्लिंक के माध्यम से पीछे की ओर कूदकर दूसरा अनुमान लगाने की कोशिश नहीं करता है - bashइस संबंध में विश्वसनीय नहीं है। यदि आपको इसके बारे में चिंता करनी है। cd -P ..एक भौतिक परिवर्तन निर्देशिका करने के लिए उपयोग करें। बेवकूफ है कि यह मेरे विचार में डिफ़ॉल्ट व्यवहार नहीं है - भ्रामक, कम से कम, उन लोगों के लिए जिनके लिए cd ..कभी कोई वैकल्पिक अर्थ नहीं था।)
चर्चा में एक टिप्पणी कहती है:
मुझे [...] को शीर्ष निर्देशिका से बाहर करने की आवश्यकता है और मुझे [...] को आधार निर्देशिका में टार को रखने की आवश्यकता है।
टिप्पणी का पहला भाग बहुत मायने नहीं रखता है - यदि टार फ़ाइल में वर्तमान निर्देशिका है, तो यह तब नहीं बनेगी जब आप उस संग्रह से फ़ाइल निकालेंगे, क्योंकि परिभाषा के अनुसार, वर्तमान निर्देशिका पहले से मौजूद है (बहुत अजीब परिस्थितियों को छोड़कर) )।
टिप्पणी के दूसरे भाग को एक दो तरीकों से निपटाया जा सकता है:
- या तो: फ़ाइल को कहीं और बनाएं -
/tmpएक संभावित स्थान है - और फिर इसे पूरा होने के बाद मूल स्थान पर वापस ले जाएं।
- या: यदि आप जीएनयू टार का उपयोग कर रहे हैं, तो
--exclude=workspace.tar.gzविकल्प का उपयोग करें । स्ट्रिंग =एक पैटर्न के बाद है - उदाहरण सबसे सरल पैटर्न है - एक सटीक मिलान। आपको यह निर्दिष्ट करने की आवश्यकता हो सकती है कि --exclude=./workspace.tar.gzक्या आप वर्तमान निर्देशिका में सिफारिशों के विपरीत काम कर रहे हैं; --exclude=workspace/workspace.tar.gzयदि आप सुझाए गए अनुसार एक स्तर पर काम कर रहे हैं, तो आपको निर्दिष्ट करने की आवश्यकता हो सकती है । यदि आपके पास बहिष्कृत करने के लिए कई टार फाइलें हैं, तो ' *' का उपयोग करें , जैसे कि --exclude=./*.gz।