शेल कमांड टार डायरेक्टरी में कुछ फाइलों / फ़ोल्डरों को छोड़कर


810

क्या कोई सरल शेल कमांड / स्क्रिप्ट है जो कुछ फ़ाइलों / फ़ोल्डरों को संग्रहीत करने से रोकने का समर्थन करता है?

मेरे पास एक निर्देशिका है जिसे एक उप निर्देशिका के साथ संग्रहीत करने की आवश्यकता है जिसमें बहुत बड़ी फ़ाइलों की संख्या है जिन्हें मुझे बैकअप की आवश्यकता नहीं है।

बिलकुल समाधान नहीं:

tar --exclude=PATTERNआदेश दिए गए पैटर्न और शामिल नहीं उन फ़ाइलों से मेल खाता है, लेकिन मैं विशिष्ट फ़ाइलों और फ़ोल्डरों को नजरअंदाज किया जा करने के लिए (पूर्ण फ़ाइल पथ), अन्यथा वैध फ़ाइलें बाहर किए जा सकते की जरूरत है।

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

मुझे लगता है कि एकमात्र समाधान यह है कि एक फाइल बनाने के लिए एक फाइल बनाई जाए जिसमें फ़ोल्डर / फ़ोल्डर को बाहर रखा जाए, फिर rsync का उपयोग करें --exclude-from=file सभी फ़ाइलों को tmp निर्देशिका में कॉपी करें, और फिर उस निर्देशिका को संग्रहीत करने के लिए टार का उपयोग करें।

क्या कोई बेहतर / अधिक कुशल समाधान के बारे में सोच सकता है?

EDIT: चार्ल्स मा का समाधान अच्छी तरह से काम करता है। बड़ा गोटा यह है कि --exclude='./folder' MUST टार कमांड की शुरुआत में होना चाहिए । पूर्ण कमांड (सीडी पहले, इसलिए बैकअप उस निर्देशिका के सापेक्ष है):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

120
एक और चीज ने मुझे उस पर पकड़ा, एक नोट के लायक हो सकता है: बहिष्कृत फ़ोल्डरों के अंत में ट्रेलिंग स्लैश का कारण होगा कि उन फ़ोल्डरों को बिल्कुल भी बाहर नहीं करना है
रेखिट

7
@Rekhyt धन्यवाद, मैं 15 मिनट के लिए कमांड को देख रहा था ... फिर 30
इयरकैम

9
ऐसा लगता है कि --exclude की स्थिति टार के संस्करण पर निर्भर करती है। टार के लिए 1.23, --exclude को मुख्य कमांड्स के बाद आना चाहिए।
जोएल जी मैथ्यू

2
"" (उद्धरण चिह्न) मत भूलना।
मीटाई.कॉम

3
--excludeपहले होना जरूरी नहीं है, लेकिन इसे स्रोत निर्देशिका (साइगविन पर टार 1.29 के साथ परीक्षण) से पहले कहीं आना होगा।
wortwart

जवाबों:


1038

आपके पास टार के लिए एकाधिक बहिष्कृत विकल्प हो सकते हैं

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

आदि काम करेंगे। स्रोत और गंतव्य वस्तुओं के सामने रखना सुनिश्चित करें ।--exclude


78
यह उत्तर देता है कि यह दिखता है --exclude पहले आता है ... tar cvfpz ../stuff.tgz --exclude = 'node_modules' --exclude = '। Git'।
जेम्स ओ ब्रायन

13
एक उदाहरण के रूप में, यदि आप अपने वर्डप्रेस प्रोजेक्ट फ़ोल्डर का बैकअप लेने की कोशिश कर रहे हैं, तो अपलोड फ़ोल्डर को छोड़कर, आप इस कमांड का उपयोग कर सकते हैं: tar -cvf wordpress_backup.tar wordpress --exclude = wp-content / uploads
shasi kanth

12
मैं निम्नलिखित आदेश के साथ आया: tar -zcv --exclude='file1' --exclude='patter*' --exclude='file2' -f /backup/filename.tgz . ध्यान दें कि -fध्वज को टार फ़ाइल से पहले देखने की आवश्यकता है: सुपरयूज़र.com
अल्फ्रेड बेज़

21
बहिष्कृत निर्देशिका के अंत में एक "/" विफल हो जाएगा। मुझे लगता है कि टार को लगता है कि समाप्त करने के लिए / निर्देशिका नाम का एक हिस्सा है। BAD: --exclude = mydir / GOOD: --exclude = mydir
जोशिया

4
> स्रोत और गंतव्य आइटम से पहले --exclude रखना सुनिश्चित करें। या बहिष्करण के लिए एक निरपेक्ष पथ का उपयोग करें: tar -cvpzf backups / target.tar.gz --exclude = '/ home / username / backups' / home / username
CloudKidr.com पर रात्रि

131

आप --excludeटार के लिए निर्देशिका को बाहर कर सकते हैं ।

यदि आप अपने /usrउपयोग के अलावा सब कुछ संग्रह करना चाहते हैं:

tar -zcvf /all.tgz / --exclude=/usr

आपके मामले में शायद कुछ ऐसा हो

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir

17
स्पष्ट करने के लिए, आप --exclude के लिए पूर्ण पथ का उपयोग कर सकते हैं।
जोहान सोडरबर्ग

2
कुछ उदाहरणों में, यह आवश्यक है कि --exclude फ़ाइलों / फ़ोल्डरों को संग्रहित करने के लिए
पूर्ववर्ती करें

68

टार का उपयोग करके बैकअप से फ़ाइलों / निर्देशिकाओं को बाहर करने के लिए संभावित विकल्प:

कई पैटर्न का उपयोग करके फ़ाइलों को छोड़ दें

tar -czf backup.tar.gz --exclude=PATTERN1 --exclude=PATTERN2 ... /path/to/backup

पैटर्न की एक सूची के साथ भरी हुई एक बहिष्कृत फ़ाइल का उपयोग करके फ़ाइलों को छोड़ दें

tar -czf backup.tar.gz -X /path/to/exclude.txt /path/to/backup

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

tar -czf backup.tar.gz --exclude-tag-all=exclude.tag /path/to/backup

3
मापदंडों का क्रम मायने रखता है और यह फॉर्म मेरे लिए काम करता है।
व्यापम

1
मैं भी। Ubuntu 16.04 पर टार (GNU टार) 1.28 के लिए, मापदंडों के केवल इस विशिष्ट क्रम ने काम किया।
अल्वारियोरिग

43

कई सवालों के साथ पुराना सवाल है, लेकिन मैंने पाया कि मेरे लिए कोई भी बहुत स्पष्ट नहीं था, इसलिए मैं अपनी कोशिश को जोड़ना चाहूंगा।

यदि आपके पास निम्न संरचना है

/home/ftp/mysite/

निम्नलिखित फ़ाइल / फ़ोल्डर के साथ

/home/ftp/mysite/file1
/home/ftp/mysite/file2
/home/ftp/mysite/file3
/home/ftp/mysite/folder1
/home/ftp/mysite/folder2
/home/ftp/mysite/folder3

इसलिए, आप एक ऐसी टार फाइल बनाना चाहते हैं, जिसमें हर घर के अंदर / घर / ftp / mysite (साइट को नए सर्वर पर ले जाने के लिए) हो, लेकिन file3यह केवल कबाड़ है, और इसमें सब कुछfolder3 भी आवश्यक नहीं है, इसलिए हम उन दोनों को छोड़ देंगे।

हम प्रारूप का उपयोग करते हैं

tar -czvf <name of tar file> <what to tar> <any excludes>

जहाँ c = create, z = zip, और v = verbose (आप फाइल को देख सकते हैं जैसे कि वे दर्ज किए गए हैं, यह सुनिश्चित करने के लिए उपयोगी है कि आपके द्वारा बाहर की गई कोई भी फ़ाइल जोड़ी नहीं जा रही है)। और f = फ़ाइल।

इसलिए, मेरी आज्ञा इस तरह दिखेगी

cd /home/ftp/
tar -czvf mysite.tar.gz mysite --exclude='file3' --exclude='folder3'

ध्यान दें कि बाहर रखी गई फ़ाइलें / फ़ोल्डर आपके टार के मूल में हैं (मैंने / के सापेक्ष यहां पूर्ण पथ की कोशिश की है लेकिन मैं यह काम नहीं कर सकता)।

आशा है कि यह किसी को मदद करेगा (और अगली बार जब मैं इसे Google करूँगा)


6
इस उत्तर ने निश्चित रूप से मेरी मदद की! मेरे लिए गेटा यह था कि मेरी कमान कुछ tar -czvf mysite.tar.gz mysite --exclude='./mysite/file3' --exclude='./mysite/folder3'इस तरह दिखती थी, और इसने कुछ भी बाहर नहीं किया।
अनीश रामास्वामी

2
आपका नमूना मेरे साथ जारी किए गए मुद्दे के समान था! धन्यवाद!
क़ोरबानी

2
अच्छा और स्पष्ट धन्यवाद। मेरे लिए मुद्दा यह था कि अन्य उत्तरों में सापेक्ष रास्तों का निरपेक्ष होना शामिल है। लेकिन आपको केवल उस फ़ोल्डर का नाम जोड़ना है जिसे आप बाहर करना चाहते हैं।
ह्यूबर्ट

2
यह एक अधिक स्पष्ट उत्तर है। उदाहरण के कारण मैं इसे प्राप्त करने में सक्षम था क्योंकि पथ पहले भ्रमित थे। बहुत बहुत धन्यवाद!
फगियानी

2
इसने काम कर दिया! कृपया याद रखें कि बाहर करने के लिए एक अनुगामी स्लैश न जोड़ें। उदाहरण के लिए, जबकि "फाइल 3" या "फाइल 3 / सबफ़ोल्डर" काम करता है, "फाइल 3 /" और "फाइल 3 / सबफ़ोल्डर /" नहीं!
लुकाफेरोइरो

24

आप निर्देशिका को बाहर करने के लिए मानक "चींटी अंकन" का उपयोग कर सकते हैं।
यह मेरे लिए काम करता है और किसी भी .गित या नोड_मॉड्यूल निर्देशिका को बाहर करता है:

tar -cvf myFile.tar --exclude=**/.git/* --exclude=**/node_modules/*  -T /data/txt/myInputFile.txt 2> /data/txt/myTarLogFile.txt

myInputFile.txt में शामिल हैं:

/ देव २ / जावा
/ देव २ / जावास्क्रिप्ट


4
मेरा मानना ​​है कि इसके लिए बैश शेल विकल्प वेरिएबल globstarको सक्षम करना होगा। के साथ जाँच करें shopt -s globstar। मुझे लगता है कि यह अधिकांश यूनिक्स आधारित ओएस पर डिफ़ॉल्ट रूप से बंद है। बैश मैनुअल से: " ग्लोबस्टार: यदि सेट **किया जाता है , तो फ़ाइल नाम विस्तार के संदर्भ में उपयोग किया जाने वाला पैटर्न सभी फ़ाइलों और शून्य या अधिक निर्देशिकाओं और उपनिर्देशिकाओं से मेल खाएगा। यदि पैटर्न '/' द्वारा पीछा किया जाता है, तो केवल निर्देशिकाएं और उपनिर्देशिकाएं मेल खाती हैं। "
not2qubit

15

मैंने अनुभव किया है कि, कम से कम साइगविन के साथ टार के संस्करण मैं उपयोग कर रहा हूँ ( "CYGWIN_NT-5,1 1.7.17 (0,262 / 5/ 3) 2012-10-19 14:39 i686 Cygwin" पर एक Windows XP होम संस्करण SP3 मशीन), विकल्पों का क्रम महत्वपूर्ण है।

जबकि इस निर्माण ने मेरे लिए काम किया:

tar cfvz target.tgz --exclude='<dir1>' --exclude='<dir2>' target_dir

वह काम नहीं किया:

tar cfvz --exclude='<dir1>' --exclude='<dir2>' target.tgz target_dir

यह, जबकि tar --helpनिम्नलिखित का खुलासा करता है:

tar [OPTION...] [FILE]

तो, दूसरी कमांड को भी काम करना चाहिए, लेकिन जाहिर तौर पर ऐसा नहीं लगता ...

सर्वश्रेष्ठ आरजीडी,


5
बस ऊपर जोड़ना चाहते हैं, यह महत्वपूर्ण है कि बाहर की जाने वाली निर्देशिका में अंतिम बैकस्लैश नहीं होना चाहिए। तो, --exclude = '/ path / to / को बाहर / निर्देशिका' है सही , --exclude = '/ path / to / को बाहर / dir /' है गलत
GeertVc

17
इसका कारण यह है कि टारगेट आर्काइव target.tgz f स्विच का एक तर्क है, जिसे इसे फॉलो करना चाहिए
वैलेंटिनो

14

यह बहिष्कृत पैटर्न पीएनजी या एमपी 3 के साथ-साथ डायरेक्टरी नाम जैसे .गित और नोड_मॉड्यूल्स जैसे फ़ाइल नाम प्रत्यय को संभालता है

tar --exclude={*.png,*.mp3,*.wav,.git,node_modules} -Jcf ${target_tarball}  ${source_dirname}

धन्यवाद - कि मैं क्या देख रहा था :)
अलेक्जेंडर ब्र।

11

जिन लोगों के पास इसके मुद्दे हैं, उनके लिए टार के कुछ संस्करण केवल बहिष्कृत मूल्य में './' के बिना ठीक से काम करेंगे।

Tar --version

टार (GNU टार) 1.27.1

कमांड सिंटैक्स जो काम करता है:

tar -czvf ../allfiles-butsome.tar.gz * --exclude=acme/foo

ये काम नहीं करेंगे:

$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=./acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='./acme/foo'
$ tar --exclude=./acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='./acme/foo' -czvf ../allfiles-butsome.tar.gz *
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude=/full/path/acme/foo
$ tar -czvf ../allfiles-butsome.tar.gz * --exclude='/full/path/acme/foo'
$ tar --exclude=/full/path/acme/foo -czvf ../allfiles-butsome.tar.gz *
$ tar --exclude='/full/path/acme/foo' -czvf ../allfiles-butsome.tar.gz *

10

मुझे यह कहीं और मिला, इसलिए मैं इसका श्रेय नहीं लूंगा, लेकिन यह मेरे मैक विशिष्ट मुद्दों (भले ही यह बंद हो गया है) के लिए ऊपर दिए गए किसी भी समाधान से बेहतर काम किया है:

tar zc --exclude __MACOSX --exclude .DS_Store -f <archive> <source(s)>

2
इस उत्तर के लिए धन्यवाद, डार्विन पर टार निश्चित रूप से एक अलग वाक्यविन्यास है और यह मुझे पागल कर रहा था क्यों अन्य उत्तरों में "--exclude = blah" काम नहीं कर रहे थे। यह एक महान पर काम किया MAC।
माइकल

1
COPYFILE_DISABLE=1टार का उपयोग करते समय मत भूलना , अन्यथा आप प्राप्त कर सकते हैं। अपने टारबॉल में फाइलें।
बेनोइट डफेज़

आपके उत्तर को शामिल करने के लिए धन्यवाद। उस स्रोत का लिंक शामिल करना हमेशा अच्छा होता है जहां आपको उत्तर मिला हो। बोनस: यदि स्रोत किसी अन्य स्टैकओवरफ़्लो या स्टैकएक्सचेंज पोस्ट से था, तो आपको अतिरिक्त कर्म मिलते हैं (या तो अंक या बैज - मुझे याद नहीं है जो)। किसी भी तरह, वे एक मुस्कान प्राप्त करते हैं, और हर कोई जीतता है। कोई डाउनस्वाइड्स :-) यह उन लोगों की भी मदद करता है जो अतिरिक्त जानकारी खोजना चाहते हैं। कभी-कभी लोग सिर्फ इसलिए उत्थान करेंगे क्योंकि आपने एक स्रोत लिंक शामिल किया था। अंत में, इस संबोधित किए गए विशिष्ट मुद्दे को साझा करना, या यह एक बेहतर समाधान क्यों था, यह किसी और को एक अनोखी समस्या में मदद कर सकता है।
शेरिलहोमन

8

मैक OSX के लिए मुझे करना था

tar -zcv --exclude='folder' -f theOutputTarFile.tar folderToTar

के -fबाद नोट करें--exclude=


6

मैं मानता हूं --exclude ध्वज सही दृष्टिकोण है।

$ tar --exclude='./folder_or_file' --exclude='file_pattern' --exclude='fileA'

साइड इफेक्ट के लिए चेतावनी का एक शब्द जो मुझे तुरंत स्पष्ट नहीं मिला: इस उदाहरण में 'fileA' का बहिष्करण 'fileA' खोजेगा। RECURSIVELY खोजेगा!

उदाहरण: एक निर्देशिका जिसमें एकल उपनिर्देशिका होती है जिसमें एक ही नाम की फ़ाइल होती है (data.txt)

data.txt
config.txt
--+dirA
  |  data.txt
  |  config.docx
  • यदि --exclude='data.txt'संग्रह का उपयोग करते समय EITHER data.txt फ़ाइल नहीं होगी । यह अप्रत्याशित परिणाम का कारण बन सकता है यदि किसी नोड_मॉड्यूल निर्देशिका जैसे तृतीय पक्ष लाइब्रेरी को संग्रहीत करना।

  • इस मुद्दे से बचने के लिए पूरे रास्ते को देना सुनिश्चित करें, जैसे --exclude='./dirA/data.txt'


5

हजारों फ़ाइलों के प्रसंस्करण 'xargs: Argument list too long'के उपयोग के कारण संभावित त्रुटियों से बचने के लिए find ... | xargs ..., आप findसीधे tarउपयोग करने के लिए आउटपुट कर सकते हैं find ... -print0 | tar --null ...

# archive a given directory, but exclude various files & directories 
# specified by their full file paths
find "$(pwd -P)" -type d \( -path '/path/to/dir1' -or -path '/path/to/dir2' \) -prune \
   -or -not \( -path '/path/to/file1' -or -path '/path/to/file2' \) -print0 | 
   gnutar --null --no-recursion -czf archive.tar.gz --files-from -
   #bsdtar --null -n -czf archive.tar.gz -T -

आप 'बहिष्कृत' स्ट्रिंग को इस तरह उद्धृत कर सकते हैं: 'somedir / filesdir / *' तो शेल तारांकन और अन्य सफेद वर्णों का विस्तार करने वाला नहीं है।
ज़नीक

xargs -n 1xargs: Argument list too longत्रुटि से बचने का एक और विकल्प है ;)
Tuxdude

5

इस सूत्र को पढ़ने के बाद, मैंने RHEL 5 पर थोड़ा परीक्षण किया और यहाँ abc निर्देशिका को टार्गेट करने के लिए मेरे परिणाम हैं:

यह निर्देशिका त्रुटि और लॉग और निर्देशिका के तहत सभी फ़ाइलों को बाहर करेगा:

tar cvpzf abc.tgz abc/ --exclude='abc/error' --exclude='abc/logs'

अपवर्जित निर्देशिका के बाद वाइल्डकार्ड जोड़ने से फाइलें बाहर हो जाएंगी, लेकिन निर्देशिकाओं को संरक्षित करेंगी:

tar cvpzf abc.tgz abc/ --exclude='abc/error/*' --exclude='abc/logs/*'

ऊपर के दूसरे उदाहरण में प्रत्येक बहिष्कृत खंड में अंतिम स्लैश के बाद तारांकन होना चाहिए, लेकिन पोस्ट उन्हें नहीं ले गया।
माइक

4

टार एपेंड (-r) विकल्प के साथ संयोजन में खोज कमांड का उपयोग करें। इस तरह आप एक दो चरण के समाधान (फ़ाइलों की सूची बनाएँ, टार बनाएँ) के बजाय एक एकल चरण में मौजूदा टार में फ़ाइलों को जोड़ सकते हैं।

find /dir/dir -prune ... -o etc etc.... -exec tar rvf ~/tarfile.tar {} \;

4

आप अपनी आवश्यकताओं के आधार पर "--exclude-tag" विकल्पों में से एक का उपयोग कर सकते हैं:

  • --exclude टैग = फ़ाइल
  • --exclude-टैग-सब = फ़ाइल
  • --exclude टैग अंडर = फ़ाइल

निर्दिष्ट फ़ाइल को होस्ट करने वाले फ़ोल्डर को बाहर रखा जाएगा।


4

विभिन्न संस्करणों के लिए इस सभी अच्छे उत्तरों को पढ़ने और स्वयं के लिए समस्या को हल करने के बाद, मुझे लगता है कि बहुत छोटे विवरण हैं जो बहुत महत्वपूर्ण हैं, और जीएनयू / लिनक्स सामान्य उपयोग के लिए दुर्लभ हैं , जो पर्याप्त रूप से तनावग्रस्त नहीं हैं और टिप्पणियों से अधिक के योग्य हैं।

इसलिए मैं हर मामले के लिए सवाल का जवाब देने की कोशिश नहीं करने जा रहा हूं, बल्कि इसके बजाय यह दर्ज करने की कोशिश करें कि जब चीजें काम नहीं करती हैं तो कहां देखें

सूचना के लिए यह बहुत महत्वपूर्ण है:

  1. विकल्प सामग्री का क्रम: यह वही नहीं है - फ़ाइल विकल्प और निर्देशिकाओं को बैकअप करने के बाद पहले -exclude रखें। यह मेरे लिए कम से कम अप्रत्याशित है, क्योंकि मेरे अनुभव में, जीएनयू / लिनक्स कमांड्स में, आमतौर पर विकल्पों का क्रम मायने नहीं रखता है।
  2. अलग-अलग टार संस्करण विभिन्न विकल्पों में इस विकल्प की अपेक्षा करते हैं: उदाहरण के लिए, @ एंड्रयू का जवाब दर्शाता है कि GNU tar v 1.26 और 1.28 में अंतिम शामिल नहीं है, जबकि मेरे मामले में, GNU tar 1.29 के साथ, यह दूसरा तरीका है।
  3. ट्रेलिंग स्लैश मैटर : कम से कम जीएनयू टार 1.29 में, यह कोई भी नहीं होना चाहिए

मेरे मामले में, डेबियन खिंचाव पर जीएनयू टार 1.29 के लिए, जो कमांड काम करता था वह था

tar --exclude="/home/user/.config/chromium" --exclude="/home/user/.cache" -cf file.tar  /dir1/ /home/ /dir3/

उद्धरण कोई मायने नहीं रखते थे, यह उनके साथ या उनके बिना काम करता था।

मुझे उम्मीद है कि यह किसी के लिए उपयोगी होगा।


आपके उत्तर के लिए धन्यवाद। मैं एक समाधान के लिए बहुत लंबे समय से क्या महसूस कर रहा था, और आपके जवाब ने मुझे सही दिशा में निर्देशित किया। हालाँकि, मेरे मामले में (Ubuntu 18.04.3, Tar 1.29) मैं केवल इसे फ़ोल्डर नाम और पथ को जोड़ने के साथ काम कर सकता था, उदाहरण के लिए: tar --exclude = folder1 --exclude = folder2 -czvf / opt / archieve। tgz फ़ोल्डर
निताई

2

टार फाइलें बनाने के लिए आप cpio (1) का उपयोग कर सकते हैं। cpio फ़ाइलों को स्टड पर आर्काइव करने के लिए ले जाता है, इसलिए यदि आपने पहले से ही उस कमांड को खोज लिया है जिसका उपयोग आप फ़ाइलों को संग्रह का चयन करने के लिए करना चाहते हैं, तो टार फाइल बनाने के लिए इसे cpio में पाइप करें:

find ... | cpio -o -H ustar | gzip -c > archive.tar.gz

2

gnu tar v 1.26 - theexclude को आर्काइव फ़ाइल और बैकअप निर्देशिका तर्कों के बाद आने की जरूरत है, इसमें कोई अग्रणी या अनुगामी स्लैश नहीं होना चाहिए, और कोई उद्धरण (एकल या दोहरा) पसंद नहीं करता है। तो PARENT निर्देशिका के सापेक्ष इसका बैकअप लिया जाना चाहिए:

tar cvfz /path_to/mytar.tgz ./dir_to_backup --exclude=some_path/to_exclude


बहुत प्रयोग के बाद मैंने अपने आदेश में कमोबेश यही बात पाई है tar (GNU tar) 1.28
PicoutputCls

2
tar -cvzf destination_folder source_folder -X /home/folder/excludes.txt

-X एक फ़ाइल को इंगित करता है जिसमें फ़ाइल नाम की एक सूची होती है जिसे बैकअप से बाहर रखा जाना चाहिए। उदाहरण के लिए, आप बैकअप में ~ के साथ समाप्त होने वाले किसी भी फ़ाइल नाम को शामिल नहीं करने के लिए इस फ़ाइल में * ~ निर्दिष्ट कर सकते हैं।


मुझे लगता है, यह सबसे अच्छा समाधान है, क्योंकि यह उन मामलों में भी काम करता है, जिनमें शामिल होने की संख्या बड़ी है। विकल्प पैक में एक्स विकल्प को शामिल करना भी संभव है, इसलिए सबसे छोटा रूप संभवतः है:tar cXvfJ EXCLUDE-LIST ARCHIVE.tar.xz SOURCE-FOLDER
काई पेट्ज़के

0

आपका सबसे अच्छा शर्त है कि आप टार्स के साथ, एक्सएआरजीएस (बड़ी संख्या में तर्कों को संभालने के लिए) का उपयोग करें। उदाहरण के लिए:

find / -print0 | xargs -0 tar cjf tarfile.tar.bz2

4
इसके कारण कई बार टैक हो सकता है - और बार-बार फाइल भी पैक हो जाएगी। सही है:find / -print0 | tar -T- --null --no-recursive -cjf tarfile.tar.bz2
jrrgensen

मैंने कहीं पढ़ा है कि उपयोग करते समय xargs, व्यक्ति को टार rविकल्प का उपयोग करना चाहिए cक्योंकि जब findवास्तव में परिणामों का भार मिल जाता है, तो xargs उन परिणामों को विभाजित कर देगा (स्थानीय कमांड लाइन तर्कों की सीमा के आधार पर) को चंक्स में और प्रत्येक भाग पर टार्क आह्वान करेगा। इसके परिणामस्वरूप एक संग्रह होगा जिसमें अंतिम चंक होगा, xargsजो findकमांड द्वारा प्राप्त किए गए सभी परिणामों को नहीं देगा ।
स्टीफन

0

संभावित निरर्थक उत्तर लेकिन जब से मैंने इसे उपयोगी पाया, यहाँ यह है:

जबकि एक FreeBSD रूट (यानी csh का उपयोग करते हुए) मैं अपने पूरे रूट फाइलसिस्टम को / mnt पर कॉपी करना चाहता था, लेकिन बिना / usr और (जाहिर है) / mnt के बिना। यह काम किया है (मैं / पर हूँ):

tar --exclude ./usr --exclude ./mnt --create --file - . (cd /mnt && tar xvd -)

मेरा पूरा मुद्दा यह है कि टार को निर्दिष्ट करने के लिए यह आवश्यक था ( ./ डालकर ) कि बाहर रखी गई निर्देशिकाओं को जहां अधिक से अधिक निर्देशिका का हिस्सा कॉपी किया जा रहा है।

मेरा € 0.02


0

मुझे कोई सौभाग्य नहीं मिला कि एक 5 गीगाबाइट उपनिर्देशिका को कुछ स्तरों को गहरा करने के लिए टार मिल रहा है। अंत में, मैंने सिर्फ यूनिक्स जिप कमांड का उपयोग किया। इसने मेरे लिए बहुत आसान काम किया।

तो इस विशेष उदाहरण के लिए मूल पद
(tar --exclude = '। / Folder' --exclude = '। / Upload / folder2' -zcvf /backup/filename.tgz।) से।

समतुल्य होगा:

zip -r /backup/filename.zip -x अपलोड / फोल्डर / ** \ * अपलोड / फोल्डर 2 / ** \ *

(नोट: यहां वह पोस्ट है जिसका मैंने मूल रूप से इस्तेमाल किया था जिसने मुझे /superuser/312301/unix-zip-directory-but-excluded-specific-subdirectories-and-everything-within-t ) मदद की


3
खबरदार: zipखाली निर्देशिका पैक नहीं करता है, लेकिन tarकरता है!
t0r0X

0

इसकी जांच - पड़ताल करें

tar cvpzf zip_folder.tgz . --exclude=./public --exclude=./tmp --exclude=./log --exclude=fileName

0

मैं लोकलहोस्ट पर फ्रेश फ्रंट-एंड वर्जन (कोणीय फोल्डर) रखना चाहता हूं। इसके अलावा, मेरे मामले में गिट फ़ोल्डर बहुत बड़ा है, और मैं इसे बाहर करना चाहता हूं। मुझे इसे सर्वर से डाउनलोड करने की आवश्यकता है, और एप्लिकेशन चलाने के लिए इसे अनपैक करें।

कोणीय फ़ोल्डर को / var / lib / tomcat7 / webapps से कंप्रेस करें, इसे angular.23.12.19.tar.gz नाम के साथ / tmp फ़ोल्डर में ले जाएँ।

आदेश:

tar --exclude='.git' -zcvf /tmp/angular.23.12.19.tar.gz /var/lib/tomcat7/webapps/angular/

0

सक्सेस केस: 1) यदि बैकअप लेने के लिए पूर्ण पथ दिया जाता है, तो बहिष्करण में भी पूर्ण पथ का उपयोग किया जाना चाहिए।

tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude = '/ opt / ABC / csv / ' --exclude = '/ opt / ABC / log / ' / opt / ABC

2) यदि बैकअप लेने के लिए वर्तमान पथ दिया जाता है, तो बहिष्करण में भी केवल वर्तमान पथ का उपयोग किया जाना चाहिए।

tar -zcvf backup_27032020.tar.gz --exclude = 'ABC / csv / ' --exclude = 'ABC / log / ' ABC

विफलता मामला:

  1. यदि वर्तमान निर्देशिका को अनदेखा करने के लिए बैकअप और पूर्ण पथ लेने के लिए दे रहा है, तो काम न करें

    tar -zcvf /opt/ABC/BKP_27032020/backup_27032020.tar.gz --exclude = '/ opt / ABC / csv / ' --exclude = '/ opt / ABC / log / ' ABC

नोट: बैकअप निर्देशिका ठीक होने से पहले / बाद में बाहर करने का उल्लेख है।


0

यदि आप संस्करण नियंत्रण प्रणाली (वीसीएस) फ़ाइलों को बाहर करने की कोशिश कर रहे हैं, तो टार पहले से ही इसके बारे में दो दिलचस्प विकल्पों का समर्थन करता है! :)

  1. विकल्प: --exclude-vcs

यह विकल्प फ़ाइलों और निर्देशिकाओं संस्करण नियंत्रण प्रणाली का पालन करके प्रयोग किया है: CVS, RCS, SCCS, SVN, Arch, Bazaar, Mercurial, और Darcs

संस्करण 1.32 के अनुसार, निम्न फ़ाइलों को बाहर रखा गया है:

  • CVS/, और इसके तहत सब कुछ
  • RCS/, और इसके तहत सब कुछ
  • SCCS/, और इसके तहत सब कुछ
  • .git/, और इसके तहत सब कुछ
  • .gitignore
  • .gitmodules
  • .gitattributes
  • .cvsignore
  • .svn/, और इसके तहत सब कुछ
  • .arch-ids/, और इसके तहत सब कुछ
  • {arch}/, और इसके तहत सब कुछ
  • =RELEASE-ID
  • =meta-update
  • =update
  • .bzr
  • .bzrignore
  • .bzrtags
  • .hg
  • .hgignore
  • .hgrags
  • _darcs

    1. विकल्प: --exclude-vcs-ignores

जब निर्देशिका है कि कुछ संस्करण नियंत्रण प्रणाली (VCS) के तहत कर रहे संग्रह, यह अक्सर सुविधाजनक है इस VCS 'से छोड़े जाने के पैटर्न को पढ़ने के लिए उपेक्षा फ़ाइलें (जैसे .cvsignore, .gitignoreआदि) यह विकल्प संभावना प्रदान करते हैं।

एक निर्देशिका संग्रह से पहले, देखें कि क्या वह निम्न फ़ाइलों के किसी भी शामिल हैं: cvsignore, .gitignore, .bzrignore, या .hgignore। यदि हां, तो इन फाइलों से अनदेखा पैटर्न पढ़ें।

पैटर्न के साथ बहुत ज्यादा व्यवहार किया जाता है क्योंकि VCS उनके साथ व्यवहार करेगा, अर्थात:

.cvsignore

इसमें शेल-स्टाइल ग्लोबिंग पैटर्न शामिल है जो केवल उस निर्देशिका पर लागू होता है जहां यह फ़ाइल रहती है। फ़ाइल में कोई टिप्पणी की अनुमति नहीं है। खाली लाइनों को नजरअंदाज कर दिया जाता है।

.gitignore

इसमें शैल-शैली के गोलाकार पैटर्न हैं। उस निर्देशिका पर लागू होता है जहां .gitfileस्थित है और उसके सभी उपनिर्देशिका हैं।

किसी भी लाइन की शुरुआत #एक टिप्पणी के साथ होती है। बैकस्लैश टिप्पणी चरित्र से बच जाता है।

.bzrignore

शैल ग्लोबिंग-पैटर्न और नियमित अभिव्यक्ति शामिल है (यदि RE:16 के साथ उपसर्ग किया गया है ) पैटर्न निर्देशिका और इसके सभी उपनिर्देशिकाओं को प्रभावित करते हैं।

किसी भी लाइन की शुरुआत #एक टिप्पणी के साथ होती है।

.hgignore

इसमें पॉज़िक्स रेगुलर एक्सप्रेशन (17) शामिल हैं। रेखा syntax: globगोलाकार पैटर्न को खोल देती है। लाइन syntax: regexpवापस स्विच हो जाती है। टिप्पणियाँ एक के साथ शुरू होती हैं #। पैटर्न निर्देशिका और उसकी सभी उपनिर्देशिकाओं को प्रभावित करते हैं।

  1. उदाहरण

tar -czv --exclude-vcs --exclude-vcs-ignores -f path/to/my-tar-file.tar.gz path/to/my/project/


-1

निम्नलिखित बैश स्क्रिप्ट को ट्रिक करना चाहिए। यह जवाब दिया का उपयोग करता है यहाँ मार्कस Sundman द्वारा।

#!/bin/bash

echo -n "Please enter the name of the tar file you wish to create with out extension "
read nam

echo -n "Please enter the path to the directories to tar "
read pathin

echo tar -czvf $nam.tar.gz
excludes=`find $pathin -iname "*.CC" -exec echo "--exclude \'{}\'" \;|xargs`
echo $pathin

echo tar -czvf $nam.tar.gz $excludes $pathin

यह आपकी ज़रूरत की कमांड का प्रिंट आउट लेगा और आप इसे वापस कॉपी और पेस्ट कर सकते हैं। संभवतः इसे कमांड लाइन पर सीधे प्रदान करने का एक अधिक सुरुचिपूर्ण तरीका है।

बस * .CC को किसी अन्य सामान्य एक्सटेंशन, फ़ाइल नाम या रेगेक्स के लिए बदलें जिसे आप बाहर करना चाहते हैं और यह अभी भी काम करना चाहिए।

संपादित करें

बस थोड़ा स्पष्टीकरण जोड़ने के लिए; फाइल्स को चुने हुए रेगेक्स (इस मामले में * .CC) से मेल खाती सूची मिलती है। इस सूची को xargs के माध्यम से इको कमांड में भेज दिया जाता है। यह प्रिंट करता है - 'सूची से एक प्रविष्टि'। स्लैश () 'निशान के लिए भागने के पात्र हैं।


1
इंटरेक्टिव इनपुट की आवश्यकता अधिकांश शेल स्क्रिप्ट के लिए एक खराब डिजाइन विकल्प है। इसके बजाय कमांड-लाइन मापदंडों को पढ़ें और आपको शेल के टैब पूरा होने, इतिहास पूरा होने, इतिहास संपादन, आदि का लाभ मिलता है
ट्रिपल

1
इसके अतिरिक्त, आपकी स्क्रिप्ट उन रास्तों के लिए काम नहीं करती है, जिनमें व्हॉट्सएप या शेल मेटाचैकर होते हैं। जब तक आपको विशेष रूप से व्हॉट्सएप टोकन और वाइल्डकार्ड विस्तार करने के लिए शेल की आवश्यकता नहीं होती है तब तक आपको मूल रूप से हमेशा दोहरे उद्धरण चिह्नों में चर रखना चाहिए । जानकारी के लिए, कृपया देखें stackoverflow.com/questions/10067266/…
ट्रिपल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.