2012-05-09 9 views
19

मैं सर्वर के दैनिक बैकअप बनाने के लिए tar का उपयोग कर रहा हूं और/proc और/sys सिस्टम निर्देशिकाओं के बैकअप से बचना चाहता हूं, लेकिन "proc" या "sys नामक किसी भी निर्देशिका को छोड़कर "फाइल पेड़ में कहीं और।tar एकल फ़ाइलों/निर्देशिकाओं को छोड़कर, पैटर्न

, उदाहरण के निम्नलिखित निर्देशिका वृक्ष होने ("bla" किया जा रहा है सामान्य फ़ाइलें) के लिए:

# find 
. 
./sys 
./sys/bla 
./foo 
./foo/sys 
./foo/sys/bla 

मैं बाहर करने के लिए ./sys लेकिन नहीं ./foo/sys चाहते हैं।

मैं एक --exclude पैटर्न है कि करता है कि खोजने के लिए प्रतीत नहीं कर सकते ...

# tar cvf /dev/null * --exclude=sys 
foo/ 

या ...

# tar cvf /dev/null * --exclude=/sys 
foo/ 
foo/sys/ 
foo/sys/bla 
sys/ 
sys/bla 

कोई भी विचार? (लिनक्स डेबियन 6)

+0

क्या आप सुनिश्चित हैं कि कोई बहिष्कार नहीं है? यदि आप मैक ओएस का उपयोग कर रहे हैं तो यह एक अलग कहानी है! देखो [यहां] (http://www.gnu.org/software/tar/manual/html_node/exclude.html#SEC108) – drinchev

+0

सुनिश्चित नहीं है कि मैं आपका प्रश्न समझता हूं। एक 'बहिष्करण' विकल्प है, लेकिन मुझे नहीं पता कि एकल, पूर्ण फ़ाइल नामों (उस नाम से कोई भी फ़ाइल नहीं) के लिए इसे कैसे मिलान किया जाए - ऊपर दिए गए मेरे उदाहरण देखें। –

+0

यहां देखें: http://stackoverflow.com/questions/984204/shell-command-to-tar-directory-excluding-certain-files- फ़ोल्डर्स – paulsm4

उत्तर

8

आप इस तरह से अन्य sys या proc निर्देशिका संग्रहीत किया जाएगा बाहर निकालने के पैटर्न के लिए पूर्ण पथ निर्दिष्ट कर सकते हैं,:

tar --exclude=/sys --exclude=/proc/
+2

सच है, लेकिन इसके बारे में महत्वपूर्ण जानकारी यह है कि बहिष्कृत फ़ाइल नाम से मेल खाना चाहिए बिल्कुल 'tar' लिस्टिंग द्वारा सूचित नोटेशन। मेरे उदाहरण के लिए यह '।/Sys' होगा - जैसा कि मैंने अभी पाया है। –

5

टार आप में एक टैग फ़ाइल रखकर निर्देशिका बाहर कर सकते हैं का उपयोग करना कोई भी निर्देशिका जिसे छोड़ा जाना चाहिए।

टैग फ़ाइलें बनाएं,

touch /sys/.exclude_from_backup 
touch /proc/.exclude_from_backup 
फिर

,

tar -czf backup.tar.gz --exclude-tag-all=.exclude_from_backup * 
+2

सिद्धांत में अच्छा विचार लेकिन अक्सर/sys और/proc को लिखा नहीं जा सकता है। – pjv

6

इस मामले में आप उपयोग कर सकते हैं:

--anchored --exclude=sys/\* 

क्योंकि मामले में अपने टार अग्रणी प्रदर्शित नहीं करता है "/" आपको फ़िल्टर के साथ समस्या है।

+0

यह मेरे लिए चाल है, धन्यवाद! मैं एक विशिष्ट निर्देशिका को बाहर करना चाहता था, पैटर्न से मेल खाने वाली सभी निर्देशिका/उपनिर्देशिका नहीं। bsdtar में "--anchored" विकल्प नहीं है, और bsdtar के साथ हम विशिष्ट फ़ोल्डरों को बाहर करने के लिए पूर्ण पथ का उपयोग कर सकते हैं। –

+3

आह इसे मिला! bsdtar में एंकर "^" है: 'bsdtar cvjf test.tar.bz2 - exfile.avi --exclude"^myexcludedfolder "*' –