Rsync हटाने के विकल्पों में क्या अंतर हैं?


118

मैं rsync मैन पेज पर देखता हूं कि कई deleteविकल्प हैं, लेकिन वास्तव में उनके बीच के अंतर को नहीं समझते हैं। इन विकल्पों में क्या अंतर हैं?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
क्यों --delete-beforeवर्णित है (default)? मैं समझ नहीं पा रहा हूं कि (default)इसका क्या मतलब है।
मार्को मार्सला

1
यह अब manपृष्ठ के लिए डिफ़ॉल्ट के रूप में निर्दिष्ट नहीं है rsync version 3.1.2 protocol version 31। हालांकि, उद्धृत पाठ के साथ संस्करण पर मेरा अनुमान है कि यदि आप केवल --deleteइसके बजाय का उपयोग करते हैं --delete-WHEN, तो यह ऐसा है जैसे कि आपने निर्दिष्ट किया है --delete-WHENकि WHENचूक कहां है before
टॉम हेल

जवाबों:


114
  • --del/--delete_during: गंतव्य डायर की फाइलों को डिलीट कर दिया जाता है क्योंकि वे कॉपी की जाती हैं (मेमोरी की तुलना में बचाता है --delete-before: --delete-beforeडिलीट करने के लिए एक अलग स्कैन करता है)

  • --delete: गंतव्य निर्देशिका में फ़ाइलों को हटाता है यदि वे स्रोत निर्देशिका में मौजूद नहीं हैं।

  • --delete-before: स्रोत निर्देशिका से फ़ाइल-ही-नाम की प्रतिलिपि बनाने से पहले गंतव्य निर्देशिका में फ़ाइलें हटाएं

  • --delete-during: गंतव्य निर्देशिका में फ़ाइलों को हटाएं। स्रोत निर्देशिका से फ़ाइल-ही-नाम की प्रतिलिपि बनाएँ

  • --delete-delay: ट्रांसफर के दौरान मार्क डिलीट हो जाता है, लेकिन ट्रांसफर पूरा होने तक इंतजार करें

  • --delete-after: प्राप्तकर्ता हस्तांतरण के बाद हटाता है, इससे पहले नहीं ... यदि rsync के कुछ अन्य हिस्से ने अतिरिक्त फ़ाइलों को कहीं और स्थानांतरित कर दिया है, तो आप इसके बजाय यह चाहते हैं --delete-delay, क्योंकि --delete-delayयह तय करता है कि यह हस्तांतरण के बीच में क्या हटाने जा रहा है, जबकि --delete-afterफाइलों के लिए निर्देशिका की जांच करता है नष्ट हो जाना चाहिए कि सब कुछ खत्म हो गया है।

  • --delete-excluded: गंतव्य निर्देशिका से फ़ाइलें हटाता है जिन्हें स्पष्ट रूप से स्रोत निर्देशिका से स्थानांतरित करने से बाहर रखा गया है।

Rsync का बिंदु प्रतिलिपि नहीं है, यह संग्रह है। यह एक महत्वपूर्ण अंतर है। नष्ट / परिवर्तित फ़ाइलों को संसाधित करना महत्वपूर्ण है, और कई मामलों में बारीक है।

--deleteविशेष रूप से झंडा एक मैंने देखा है कई बार खराब कर दिया है। बहुत से लोग फ़ाइलों को कम प्राथमिकता भंडारण में स्थानांतरित करने के लिए rsync का उपयोग करते हैं, और इस मामले में आप चाहते हैं कि आप अभी भी जिस फ़ाइल को स्थानांतरित कर रहे हैं वह गंतव्य निर्देशिका में मौजूद हो। यह वह नहीं है जो डिलीट करता है: --deleteयह सुनिश्चित करता है कि, जब आप स्रोत निर्देशिका से किसी फ़ाइल को हटाते हैं, तो यह आपके गंतव्य निर्देशिका से भी हटा दिया जाता है, इसलिए आपका गंतव्य रद्दी से भरा नहीं होता है ... एक बार एक व्यक्ति ने अपना बैकअप मिटा दिया एक नई ड्राइव में डालकर, और उसकी रात की rsync स्क्रिप्ट को बंद न करें। स्क्रिप्ट ने देखा कि स्रोत dir अब खाली था, और उसने गंतव्य dir की प्रत्येक फ़ाइल को हटा दिया, इसलिए वे मिलान करेंगे।

अन्य विकल्पों में से अधिकांश स्थान या प्रदर्शन से संबंधित हैं। जब आप फ़ाइलों को हटाते हैं तो महत्वपूर्ण है यदि आप यह सुनिश्चित करना चाहते हैं कि कुछ भी करने से पहले स्थानांतरण सफल हो, लेकिन यदि आपका डिवाइस सभी सूचनाओं की 2 प्रतियों को संभालने के लिए बहुत छोटा है, तो आपको जाते ही हटना होगा, आदि। कई प्लेटफार्मों में अपने लंबे इतिहास की वजह से थोड़ा निराला: कुछ विकल्प जोड़े गए हैं ताकि जो लोग कुछ व्यवहार के अभ्यस्त थे, वे भ्रमित न हों।


3
तो क्या --delete और --delete- से पहले एक ही है? आदमी rsync यह नहीं कहता कि कब - डिलीट फाइलें डिलीट करता है।
ppr

@ppr: सिस्टम पर निर्भर करता है। इसके कई विशिष्ट विकल्प होने का कारण यह है कि सोलारिस पर डिलीट! = एचपी-यूएक्स पर डिलीट! = ऐक्स पर डिलीट! = लिनक्स पर डिलीट।
शैतानिकप्‍पी

जब एक पूरी निर्देशिका को rsyncing करते हैं, तो delete-afterसिंक्रनाइज़ेशन के बीच प्रत्येक फ़ाइल को हटाता है, या केवल पूरे dir को मिरर करने के बाद? मुझे लगा कि delete-afterमेरी जरूरतों के लिए पर्याप्त है, लेकिन जब मेरी एक ड्राइव का बैकअप होता है तो मुझे डिवाइस पर कोई जगह नहीं मिलती है।
श्रीधर सरनोबत

1
@ श्रीधर-सरनोबत: या तो। यह सब कुछ स्थानांतरित करने जा रहा है, और जब यह हो जाता है, तो यह चीजों को हटाना शुरू कर देता है। यदि आप इसे सब कुछ स्थानांतरित करने से पहले हटाना चाहते हैं, तो प्रयोग करें --delete-दौरान
Satanicpuppy

2
कुछ अनुभव के बाद, मुझे पता चला है कि यहां तक ​​कि delete-duringहमेशा no space left on device(लिनक्स पर) नहीं रोकता है । तो delete-beforeइससे बचने का एकमात्र गारंटीकृत तरीका है (जैसे कि किसी ड्राइव को मिरर करते समय जो लगभग भरा हुआ है, और डेस्टिनेशन ड्राइव भी लगभग पूरा है)।
श्रीधर सरनोबत

1

दो चीजें चल रही हैं:

  1. हटाने का काम कौन करता है
  2. जब यह होता है

या तो प्रेषक या रिसीवर को हटाने का निर्देश दिया जा सकता है (मुझे यकीन नहीं है कि यह क्यों मायने रखता है)। इसलिए जब एक कंप्यूटर से rsync दूसरी तरफ rsync सर्वर से जुड़ता है, तो यह निर्धारित करता है कि कौन प्रभावी रूप से डिलीट कमांड जारी कर रहा है।

जब ऐसा होता है तो यह बहुत आसान होता है ... इससे पहले कि सभी फाइलें हट जाएं, और फाइलों पर rsync प्रतियों को हटा दें। के दौरान इसका मतलब यह है कि जब यह फाइलों की सूची से गुजरता है, तो यह उनके पास आने पर उन्हें हटा देता है, और इसका मतलब है कि यह तब तक इंतजार करता है जब तक सभी फाइलें स्थानांतरित नहीं हो जाती हैं और फिर रिमोट साइड को हटा देता है। यह तभी मायने रखता है जब हस्तांतरण बाधित हो जाए।


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

1
आह, "इस की ओर से हटाएँ" है rsync द्वारा समर्थित है, लेकिन उस विकल्प का नाम है --remove-source-files
क्क्सप्लसोन

1

उल्लेख के लायक एक अन्य बिंदु यह है कि यदि आपका स्रोत निर्देशिका के साथ समाप्त होता है /*, तो rsync केवल उन फ़ाइलों पर विचार करेगा न कि स्वयं निर्देशिका (और इस प्रकार उन फ़ाइलों की अनुपस्थिति जो आपको गंतव्य पर हटाना चाहते हैं)।

यदि आप ऊपर दिए गए एक डिलीट ऑप्शन को निर्दिष्ट कर रहे हैं, लेकिन rsync ऐसा लगता है कि यह डिलीट नहीं हो रहा है, तो यह सुनिश्चित करने के लिए जांचें कि आप गलती से ग्लोब नहीं कर रहे हैं और फाइलों की एक सूची प्रदान कर रहे हैं, जब आप डायरेक्ट्री का मतलब है।

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