Rsync के साथ कई निर्देशिकाओं को बाहर कैसे करें?


184

मैं rsync का उपयोग करके अपने घर निर्देशिका का बैकअप लेने की कोशिश कर रहा हूं, और मैं कुछ निर्देशिकाओं को बाहर करना चाहता हूं जिनमें कबाड़ शामिल हैं। मैं विशेष रूप से बाहर करना चाहते हैं /home/ben/.ccacheऔर /home/ben/build। दुर्भाग्य से rsync के लिए प्रलेखन अधिक भार था और मेरे प्रश्न का उत्तर नहीं दिया। यही मैंने कोशिश की:

rsync -arv --exclude "/home/ben/.ccache:/home/ben/build" /home/ben /media/ben/thumbdrive/

ऐसा करने का सही तरीका क्या है?


4
सिर्फ इतना कहना है कि झंडा चाहता था aतात्पर्य rपहले से ही :)-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
पोपुलस

जवाबों:


238

ठीक है, मैं वास्तव में गूंगा महसूस करता हूं। इससे पहले कि मैं इस सवाल को पोस्ट करता, मेरे दोस्त ने मुझे दिखाया कि यह कैसे करना है और यह वास्तव में सरल है। कई निर्देशिकाओं को बाहर करने के लिए आप बस कई --exclude=pathस्विच का उपयोग करते हैं । तो ठीक से ऊपर लिखा मेरा आदेश इस प्रकार है:

rsync -arv --exclude=.ccache --exclude=build /home/ben /media/ben/thumbdrive/

7
एक निरपेक्ष पथ ने मेरे लिए काम नहीं किया (निर्दिष्ट निर्देशिका चुपचाप बाहर नहीं की गई थी), जबकि स्रोत निर्देशिका के सापेक्ष एक पथ ने सही तरीके से काम किया। शायद मुझे कुछ याद आ रहा है, लेकिन मैं @FreeSoftwareServers के दावे के बारे में सतर्क रहूंगा कि निरपेक्ष रास्ते हमेशा काम करते हैं।
सोरेन ब्योर्नस्टैड

5
FYI करें: विकल्प में -aशामिल है -rइसलिए -arबेमानी है।
डेविड

4
FreeSoftwareServers का मानना ​​है कि के विपरीत, अपवर्जित पथ स्रोत पथ के सापेक्ष है, नहीं /। इसलिए यह टिप्पणी स्पष्ट रूप से गलत है और यदि आप इसका अनुसरण करते हैं तो असफलताएं आएंगी। इस प्रकार की मानसिक त्रुटि से बचने के लिए सबसे अच्छी रणनीति आपके प्रमुख को छोड़ना है। यदि स्रोत कहा जाता है, / home / me और यदि आप = '/ mydir /' को बाहर करते हैं, तो यह निर्देशिका mydir को / home / me में बाहर करता है, अर्थात यह / home / me / mydir NOT / mydir / / को बाहर करता है। यह दुर्भाग्यपूर्ण है कि मैं उस टिप्पणी को या तो कम नहीं कर सकता या संपादित नहीं कर सकता क्योंकि यह तकनीकी रूप से गलत है और गुमराह करेगी।
छिपकली

3
बाद के यात्रियों के लिए FYI करें, ऐसा लगता है कि @FreeSoftwareServer द्वारा प्रश्न में टिप्पणी को हटा दिया गया है। tl; dr: सापेक्ष रास्तों का उपयोग करें
Freedom_Ben

2
यदि आप गूंगे हैं तो मैं और 179 अन्य उर्ध्वगामी हैं!
श्रीधर सरनोबत

108

जब कई निर्देशिकाओं और / या फ़ाइलों को बाहर करने के लिए, एक पाठ फ़ाइल बनाएं और --exclude-fromस्विच का उपयोग करें। नामक एक फ़ाइल बनाएं exclude_me.txtऔर इसमें अपने बहिष्करणों को सूचीबद्ध करें। उदाहरण ( /home/ben/exclude_me.txt):

.ccache
build
.java
.gvfs
.xsession-errors

तब आपका rsync कुछ इस तरह दिखाई देगा:

rsync -arv --exclude-from='/home/ben/exclude_me.txt' /home/ben /media/ben/thumbdrive/

यह फ़िल्टर नियमों पर कुछ जानकारी है जो मदद कर सकती हैं:

  • /dir/ इसका मतलब है रूट फ़ोल्डर को बाहर करना /dir
  • /dir/*मतलब रूट फ़ोल्डर मिलता है, /dirलेकिन सामग्री नहीं
  • dir/ मतलब किसी भी फ़ोल्डर को कहीं भी छोड़ दें जहाँ नाम शामिल हो dir/

  • बाहर किए गए उदाहरण: उन /dir/, /usr/share/directory/, /var/spool/dir/ /var/spool/lpd/cfफ़ाइलों को छोड़ दें जो cfकिसी भी फ़ोल्डर के भीतर शुरू होती हैं/var/spool/lpd

इसके अलावा मैन पेज पर फ़िल्टर रूल्स सेक्शन देखें ।


4
यह ध्यान रखना महत्वपूर्ण है कि रूट फ़ोल्डर का अर्थ है ट्रांसफर का रूट नहीं रूट डायरेक्टरी।
jamesdlin

यह एक शानदार जवाब है!
अलेक्जेंडर झूकोव

85

आप घुंघराले ब्रेसिज़ के भीतर कई रास्तों को भी बाहर कर सकते हैं:

rsync -arv --exclude={.ccache,build} /home/ben /media/ben/thumbdrive/

40
यह अच्छी तरह से काम करता है, बस श के तहत नहीं, केवल बैश के नीचे, मुझे "कठिन रास्ता" पता चला
xor

7
अल्पविराम के बाद कोई स्थान नहीं। सीखा है कि कठिन तरीका भी 3
styl3r

और '' जैसे --exclude = '। Gvfs' का प्रयोग न करें
मार्टिन टी।

FWIW, मुझे लगता है कि घुंघराले ब्रेसिज़ ksh के साथ काम करते हैं। अन्य गोले के लिए, आप शायद कुछ का उपयोग कर सकते हैं IFS=$'\n'; rsync -arv $(printf '.ccache\nbuild\n' | sed 's/^/--exclude=/g') /home/ben /media/ben/thumbdrive/:। या, आप बस कई --excludeतर्कों का उपयोग कर सकते हैं , जिन्हें आपको मैन्युअल रूप से लिखना होगा।
TSJNachos117

1
यह कार्य "ब्रेस एक्सपेंशन" के कारण होता है, यदि कोई व्यक्ति विवरण देखना चाहता है।
श्रेलर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.