Rsync को उस ओर की फ़ाइलों को हटाने के लिए कहना जो भेजने वाले पक्ष पर मौजूद नहीं है, जो कि प्राप्त पक्ष पर अपवादों के साथ है


29

मैंने ये सूत्र पढ़े हैं:

लेकिन, जहां तक ​​मैं बता सकता हूं (शायद मुझे कुछ याद आ रहा है), वे निम्नलिखित प्रश्न को कवर नहीं करते हैं:

आप rsyncफ़ाइलों को कॉपी करने और प्राप्त करने वाले पक्ष को हटाने के लिए कैसे कहते हैं जो अपवाद के साथ भेजने वाले पक्ष में मौजूद नहीं हैं? (उदाहरण .hgप्राप्त पक्ष पर एक व्यापारिक भंडार को न निकालें , भले ही भेजने वाले पक्ष पर कोई भंडार न हो)।

एक संभावना?

नीचे @Richard Holloway के उत्तर से उधार। कहो मैं निम्नलिखित पंक्ति है:

rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path

जहां तक ​​मैं समझता हूं, यह लाइन rsyncप्राप्त पथ पर सब कुछ हटा देगी , जो भेजने वाले पथ पर मौजूद नहीं है, सिवाय उन चीजों के जो मेल खाते हैं dont_delete_me। मेरा सवाल अब यह है: क्या rsync फाइल को उस साइड पर रखेगा जो मेल खाने वाले dont_delete_me साइड मेल पर कुछ न होने पर भी मेल खाता है dont_delete_me?

जवाबों:


33

यदि आप उपयोग करते हैं --deleteऔर --excludeएक साथ बाहर रखा स्थान में है, तो स्रोत फ़ाइलों को हटा दिए जाने पर भी हटाए नहीं जाएंगे।

लेकिन यह मुद्दा उठाता है कि फ़ोल्डर बिल्कुल नहीं होगा rsync। तो आपको उस फ़ोल्डर में एक और rsyncनौकरी की आवश्यकता होगी sync

उदाहरण के लिए।

rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh

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

आप इसे एक लाइनर के रूप में नहीं कर सकते।


धन्यवाद @ रिचर्ड। आपका जवाब मुझे यह सोचने पर मजबूर कर रहा है कि मेरा मूल प्रश्न जितना मैंने सोचा था उससे कहीं अधिक आसान हो सकता है। अगर मैं सिंगल लाइन का उपयोग करता हूं: rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/pathतो क्या rsyncवह प्राप्त पथ पर सब कुछ डिलीट नहीं करेगा जो भेजने वाले मार्ग पर मौजूद नहीं है, सिवाय चीजों के मिलान के dont_delete_me? सबसे महत्वपूर्ण बात यह rsyncहै dont_delete_me कि भेजने वाले पक्ष से मिलान किए गए मैचों पर कुछ नहीं होने पर भी क्याdont_delete_me चीजें प्राप्त होती रहेंगी ? अगर ऐसा है, तो मुझे लगता है कि मुझे वही लाइन चाहिए, जो मुझे चाहिए?
अमेलियो वाज़क्वेज़-रीना

आप सही हैं, लेकिन यदि आप इसे एक पंक्ति में करते हैं, तो आपको नई फ़ाइलें और NOT_delete_me फ़ोल्डर में परिवर्तन नहीं मिलेगा। यदि आप परिवर्तन और परिवर्धन को सिंक नहीं करना चाहते हैं, तो आप यहाँ वर्णित के रूप में --exclude ध्वज का उपयोग कर सकते हैं।
रिचर्ड होलोवे

--deleteजब तक आप स्पष्ट रूप से निर्दिष्ट नहीं करते हैं, तब तक @AmV बहिष्कृत फ़ाइलें हटा दी नहीं जातीं --delete-excluded। का विवरण --deleteऔर --delete-excludedrsync मैनुअल में देखें।
गिल्स एसओ- बुराई को रोकना '

4

मैंने पाया कि निम्नलिखित समाधान मेरे उद्देश्यों के लिए काम करता है:

rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest

(नोट: -nड्राई-रन करने के लिए विकल्प जोड़ें , और इसमें बदलाव न --deleteकरें --delete-excluded!)

कमांड चलाने से निम्नलिखित गुण होते हैं:

  • स्रोत srcनिर्देशिका unmodified रहता है
  • गंतव्य destफ़ोल्डर इसके अलावा स्रोत फ़ोल्डर से मेल खाता है:

    • do_not_send_to_destसूची में आइटम गंतव्य पर नहीं भेजे जाते हैं, और
    • do_not_modify_in_destसूची में आइटम गंतव्य में अनमॉडिफाइड छोड़ दिए जाते हैं।
  • (नोट: गैर-मौजूद वस्तुओं के लिए " do_not_" फाइलों में से किसी में सूचीबद्ध होना कोई समस्या नहीं है । "

व्याख्या

मुझे लगता है कि rsync कमांड लाइन तर्क को बाएं से दाएं पढ़ता है, --deleteतर्क rsync को आंतरिक रूप से "स्विच मोड" (एक अर्थ में) का कारण लगता है, --exclude-fromविकल्प के दूसरे उपयोग को फिर से लेकिन एक अलग अर्थ के साथ अनुमति देता है।

चेतावनी:

  • यदि do_not_send_to_destसूची में कोई आइटम पहले से ही गंतव्य में मौजूद है, तो:

    • यह कमांड गंतव्य से उस आइटम को नहीं हटाती है (जब तक कि आइटम पहले स्रोत निर्देशिका से हटा नहीं दिया जाता है)
    • सावधानी: बदल रहा है --deleteकरने के लिए --delete-excludedगंतव्य है कि अपने दो सूचियों में से किसी पर सूचीबद्ध है में सब कुछ को नष्ट करेगा। xD (शायद rsync खुला / लचीला होना लिखा था, लेकिन कुछ बारीकियों के साथ है?)

हल्के से उपयोग परीक्षण किया गया।

मैं " rsync version 3.0.9 protocol version 30" का उपयोग कर रहा हूँ ।

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