2009-06-27 12 views
5

परिदृश्य: मेरे पास एक ऐसे सर्वर पर एक निर्देशिका है जो मेरी वेबसाइट होस्ट करती है जिसमें सैकड़ों उपयोगकर्ता द्वारा सबमिट की गई छवियां होती हैं। मैं एक बैकअप स्क्रिप्ट बना रहा हूं जो निर्देशिका से सभी छवियों को लेता है और उन्हें एक .tar.gz फ़ाइल में संपीड़ित करता है। आदेश मैं अब तक है:

टार -czpf /path/to/backups/my_backup.tar.gz path/to/छवियों/

समस्या: कोई मेरी पथ के अंदर/करने के लिए/images/मेरे पास है एक निर्देशिका टीएमपी/कहा जाता है। जब मैं कमांड चलाता हूं, तो मुझे एक .tar.gz फ़ाइल मिलती है जिसमें पथ/से/छवियों/निर्देशिका में सभी छवियां होती हैं और एक उपनिर्देशिका जिसे tmp/कहा जाता है।

प्रश्न: मैं .tar.gz फ़ाइल में tmp/subdirectory को छोड़ने/शामिल करने के लिए आदेश कैसे प्राप्त कर सकता हूं।लिनक्स टैर कमांड: एक निर्देशिका को संपीड़ित करना, लेकिन उपनिर्देशिका

धन्यवाद अग्रिम में एक लाख।

उत्तर

12

आप देख रहे हैं --exclude तर्क के लिए।

--exclude=PATTERN 

कुछ उपयोगकर्ताओं को exclude विकल्प भ्रमित करने लगता है। यहाँ कुछ आम नुकसान कर रहे हैं:

  • tar के मुख्य संचालन मोड एक पथ नाम स्पष्ट रूप से आदेश पंक्ति अपनी फ़ाइल नाम में से एक है, तो घटकों बाहर रखा गया है पर सूचीबद्ध पर कार्रवाई नहीं करता है। उपरोक्त उदाहरण में, यदि आप एक संग्रह बनाने और फ़ाइलों कि *.o के साथ समाप्त बाहर करते हैं, लेकिन स्पष्ट रूप से फ़ाइल dir.o/foo नाम सभी विकल्पों को सूचीबद्ध किया गया है के बाद, dir.o/foo संग्रह से बाहर रखा जाएगा।

  • आप कभी-कभी --exclude=PATTERN और --exclude-from=FILE-OF-PATTERNS (-X FILE-OF-PATTERNS) के अर्थ को भ्रमित कर सकते हैं। सावधान रहें: --exclude=PATTERN का उपयोग करें जब फ़ाइलों को बाहर रखा जाना चाहिए कमांड लाइन पर एक पैटर्न के रूप में दिया गया है। --exclude-from=FILE-OF-PATTERNS फ़ाइल का नाम प्रस्तुत करने के लिए उपयोग करें जिसमें पैटर्न की एक सूची है, प्रति पंक्ति एक; इनमें से प्रत्येक पैटर्न शून्य, एक, या कई फ़ाइलों को बाहर कर सकते हैं।

  • जब आप --exclude=PATTERN उपयोग करते हैं, तो जीएनयू tar* तरह वाइल्डकार्ड वर्णों को देखता है, पैटर्न पैरामीटर उद्धृत करने के लिए सुनिश्चित करें। आप ऐसा नहीं करते हैं हैं, तो खोल * खुद का विस्तार हो सकता है हाथ में फ़ाइलों का उपयोग, इसलिए tar बिल्कुल एक पैटर्न, या बिल्कुल भी नहीं के बजाय फ़ाइलों की एक सूची प्राप्त हो सकती है, आदेश कुछ हद तक अवैध बना रही है। यह आपके इच्छित चीज़ों के अनुरूप नहीं हो सकता है।

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

$ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY 
बजाय

:

$ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY 
  • आप उपयोग खोल सिंटैक्स का उपयोग करना होगा, या ग्लोबिंग, बजाय regexp वाक्य रचना, का उपयोग करते समय को बाहर tar में विकल्प। यदि आप फ़ाइलों को वर्णित करने के लिए regexp वाक्यविन्यास का उपयोग करने का प्रयास करते हैं, तो आपका आदेश विफल हो सकता है।
+0

उत्तर के लिए धन्यवाद। आप बहुत सही हैं कि - थोड़ा उलझन में हो सकता है। जब तक मैं आपकी स्पष्टीकरण नहीं पढ़ता तब तक मुझे 100% स्वयं समझ में नहीं आया। धन्यवाद – VinkoCM

3
tar -czpf /path/to/backups/my_backup.tar.gz --exclude path/to/images/tmp path/to/images/ 
0

यह (जीएनयू टार कल्पना करते हुए) काम करना चाहिए:

tar -czpf /path/to/backups/my_backup.tar.gz --exclude=tmp path/to/images/ 
संबंधित मुद्दे