RSync: मैं दोनों दिशाओं में कैसे सिंक्रनाइज़ कर सकता हूँ?


85

मैं दोनों दिशाओं में दो निर्देशिकाओं को सिंक्रनाइज़ करने के लिए rsync का उपयोग करना चाहता हूं ।

मैं शास्त्रीय अर्थों में सिंक्रनाइज़ेशन का उल्लेख करता हूं ( कि यह rsync मैनुअल में कैसे होता है):
मैं दोनों दिशाओं में निर्देशिकाओं को अपडेट करना चाहता हूं , जिसके आधार पर उनमें से एक नया है

क्या यह rsync द्वारा किया जा सकता है (लिनक्स-तरीके में बेहतर) ?
यदि नहीं, तो अन्य उपाय क्या हैं?


3
मुझे विश्वास है कि serverfault.com में आपको बेहतर उत्तर मिलेंगे।
एस्टेबन कुबेर 21:09

जवाबों:


78

बस इसे दो बार चलाएं, "नया" मोड (-u या --update ध्वज) प्लस -t (फ़ाइल संशोधित समय कॉपी करने के लिए), -r (पुनरावर्ती फ़ोल्डर्स के लिए), और -v (क्रिया आउटपुट के लिए यह देखने के लिए कि यह क्या है करते हुए):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

यह डिलीट नहीं करेगा, लेकिन मुझे यकीन नहीं है कि केवल समय-समय पर सिंकिंग के साथ उस समस्या का एक अच्छा समाधान है।


3
चूंकि प्रश्न rsync के बारे में था, इसलिए मैं इस उत्तर को सही मानूंगा।
java.is.for.desktop

2
लेकिन आपने अन्य समाधानों के बारे में भी पूछा और यूनिसन एक बेहतर काम करते हैं, अन्यथा मैंने कभी अन्य उपकरण का उल्लेख नहीं किया। मैं समझता हूं कि आपके पास शायद विशिष्ट परिस्थितियां हैं जो rsync के उपयोग के पक्ष में हैं।
MaD70

1
शीश, तुम्हें 6 वर मिले और तुम अब भी शिकायत कर रहे हो? <j / k> यूनिसन वास्तव में एक दिलचस्प समाधान है, और मुझे खुशी है कि आपने इसका उल्लेख किया। :)
jsight

2
वैसे मैं शिकायत नहीं कर रहा हूँ, मैं समझा रहा हूँ। बस यह जांचने के लिए कि मुझे कुछ याद नहीं है (देशी अंग्रेजी बोलने वाला नहीं है)।
MaD70

1
MaD70 - कोई बात नहीं ... मैं सिर्फ मजाक कर रहा था। :)
jsight

64

क्या आप Unison File Synchronizer जानते हैं ?

Unison, Unix और Windows के लिए एक फाइल-सिंक्रोनाइज़ेशन टूल है। यह फ़ाइलों और निर्देशिकाओं के संग्रह के दो प्रतिकृतियों को अलग-अलग होस्ट्स (या एक ही होस्ट पर अलग-अलग डिस्क) पर संग्रहीत करने की अनुमति देता है, अलग-अलग संशोधित किया जाता है, और फिर प्रत्येक प्रतिकृति में बदलावों को दूसरे तक पहुंचाकर तारीख तक लाया जाता है। ...

ध्यान दें कि यह विफलता के लिए लचीला है:

असफलता के लिए सामंजस्य लचीला है। असामान्य समाप्ति या संचार विफलताओं के मामले में भी, हर समय एक संवेदनशील स्थिति में प्रतिकृतियां और अपनी निजी संरचनाओं को छोड़ना सावधान है।


3
+1। ऐसा करने का सबसे अच्छा तरीका है यूनिसन। डबल- rsync सही होना कठिन है और डिलीट को बिल्कुल भी हैंडल नहीं करता है।
अवधी

हाँ, यूनिसन गलती लचीला है। मैं इस पर जोर देने के लिए अपने उत्तर को अपडेट कर रहा हूं।
MaD70

6
Unison के बारे में नहीं सुना था। आज आप घर पर मेरी बैकअप स्क्रिप्ट को फिर से बनाने के लिए जिम्मेदार हैं।
एस्टेबन कुबेर

1
मुझे खुशी है कि मेरा जवाब इतना उपयोगी है (यह दिखाता है कि ध्वनि सैद्धांतिक आधार पर एक उपकरण व्यावहारिक कैसे हो सकता है)।
1870 में MaD70

यहाँ linuxjournal पर यूनिसन के लिए एक छोटा ट्यूटोरियल है।
लेप

14

आपको rsyncदो बार चलाने की आवश्यकता है और मैं इसे चलाने की सलाह देता हूं -au:

rsync -au /local/source/* /remote/destination
rsync -au /remote/destination/* /local/source

-a(फॉर ए आर्काइव) इसके लिए एक शॉर्टकट है -rlptgoD:

  • -r उप निर्देशिकाओं में फिर से जागना
  • -l इसके अलावा प्रतीकात्मक लिंक सिंक करें
  • -p फ़ाइल अनुमतियों को भी सिंक करें
  • -t फ़ाइल संशोधन समय भी सिंक करें
  • -g फ़ाइल समूहों को भी सिंक करें
  • -o फ़ाइल स्वामी को भी सिंक करें
  • -D विशेष (नियमित / मेटा नहीं) फ़ाइलों को भी सिंक करें

मूल रूप से जब भी आप एक समान वन-टू-वन कॉपी का उपयोग rsyncकरना चाहते हैं, तो आपको हमेशा ऐसा ही उपयोग करना चाहिए, -aजब अधिकांश उपयोगकर्ता " सिंकिंग " के बारे में बात करने की उम्मीद करते हैं । यहां अन्य उत्तर इस बात को नजरअंदाज करते हैं कि कभी-कभी किसी फ़ाइल की सामग्री अपरिवर्तित रहती है, लेकिन इसका स्वामी बदल गया है या इसकी पहुंच अनुमतियाँ बदल गई हैं और उस स्थिति rsyncमें फ़ाइल को सिंक नहीं किया जाएगा जो घातक हो सकती है।

लेकिन आपको यह भी आवश्यक -uहै कि rsyncकिसी भी फ़ाइल / फ़ोल्डर को पूरी तरह से अकेला छोड़ने के लिए कहता है, अगर यह गंतव्य पर पहले से मौजूद है और इसकी नई अंतिम संशोधन तिथि है। अगर फाइल / फोल्डर नया है या नहीं, तब भी बिना -u rsyncसिंक किए

कृपया ध्यान दें कि यह समाधान हटाई गई फ़ाइलों को संभाल नहीं सकता है। निम्नलिखित स्थितियों पर विचार करने के रूप में हटाए गए हैंडल को आसानी से संभव नहीं है: स्रोत पर एक फ़ाइल हटा दी गई है, अब कैसे rsyncपता चलेगा कि क्या वह फ़ाइल एक बार मौजूद है और हटा दी गई है (उस स्थिति में इसे गंतव्य पर भी हटा दिया जाना चाहिए) या क्या यह कभी भी स्रोत पर मौजूद नहीं था (उस स्थिति में इसे गंतव्य से कॉपी किया जाना चाहिए)। ये दो स्थितियां समान दिखती हैं, rsyncइसलिए यह नहीं जान सकते कि सही तरीके से कैसे प्रतिक्रिया दें। यह दूसरे तरीके के राउंड को सिंक करने में मदद नहीं करेगा क्योंकि यह उसी स्थिति को जन्म दे सकता है: एक फ़ाइल स्रोत पर मौजूद है लेकिन गंतव्य पर नहीं। क्यों? क्या यह गंतव्य पर कभी मौजूद नहीं है या इसे हटा दिया गया है? दोनों मामले समान दिखते हैं rsync

समन्वयन उपकरण जो हटाए गए फ़ाइलों को विश्वसनीय रूप से सिंक कर सकते हैं, आमतौर पर सभी पिछले सिंक ऑपरेशन के बारे में एक सिंक लॉग का प्रबंधन करते हैं। यदि वह लॉग बताता है कि एक बार एक फ़ाइल थी और उसे सिंक कर दिया गया था, लेकिन अब वह गायब है, तो यह स्पष्ट है कि उसे हटा दिया गया है। यदि लॉग के अनुसार ऐसी कोई फ़ाइल नहीं थी, तो उसे सिंक करना होगा। टाइमस्टैम्प के साथ सभी लॉग प्रविष्टियों को संग्रहीत करके, यह भी संभव है कि एक हटाई गई फ़ाइल वापस आती है और कई बार हटा दी जाती है फिर भी सिंक टूल को हमेशा पता चलेगा कि क्या करना है और परिणाम हमेशा सही होता है। rsyncऐसा कोई लॉग नहीं है, यह केवल ऑपरेशन के दो पक्षों की वर्तमान फ़ाइल स्थिति पर निर्भर करता है।

हालाँकि आप स्वयं का उपयोग करके एक सिंक कमांड बना सकते हैं rsyncऔर थोड़ा POSIX शेल स्क्रिप्टिंग कर सकते हैं जो ऊपर वर्णित के अनुसार सिंक टूल के बहुत पहले से ही बंद हो जाता है। जैसा कि मुझे खुद इस तरह के एक उपकरण की आवश्यकता थी, यहां स्टाकेवरफ्लो पर एक जवाब है जो आपको इस तरह की स्क्रिप्ट के निर्माण के माध्यम से मार्गदर्शन करता है।


खूबसूरती से लगाया।
पीटर रूबट्री

6

धन्यवाद jsight

rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

इसका परिणाम यह होगा कि 1 सिंक समाप्त होने के तुरंत बाद दूसरा सिंक हो जाएगा। यदि निर्देशिका संरचना बहुत बड़ी है, तो इससे समय की बचत होगी, क्योंकि किसी को पीसी से पहले बैठने की आवश्यकता नहीं है। यदि संरचना बड़ी है, तो क्रिया और प्रगति सामग्री को हटा दें

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a

1
बस सोच रहा था कि मुझे संशोधित समय की फाइल कॉपी में जोड़ना चाहिए? क्या कारण है कि मुझे छोड़ना चाहिए?
क्रि

@ क्रिप्स नहीं, मुझे ऐसा नहीं लगता। ऐसा लगता है कि इस उत्तर का उद्देश्य सिर्फ यह बताना था कि आप &&दो कमांड के बीच 1 कमांड के तुरंत बाद 2 कमांड चलाने के लिए उपयोग कर सकते हैं (यदि 1 कमांड सफल है), मैन्युअल रूप से एक के बाद एक चलाने के विपरीत। @ jsight का जवाब। इसके अलावा, मुझे लगता है कि -tइस उत्तर के पोस्ट होने के बाद विकल्प को शामिल करने के लिए @ jsight के उत्तर को संपादित किया गया था।
Ruben9922

1

उपयोग rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

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

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

Xxx-files को अलग-अलग / xxx-files में सिंक कर देगा। यदि अलग-अलग सामान / xxx-files मौजूद नहीं था, तो यह इसे बनाएगा - अर्थात इसे कॉपी करें।

-pogtEtv - फ़ाइल मेटाडेटा, प्लस v - वर्बोज़ और आर - पुनरावर्ती को संरक्षित करने के लिए विकल्पों का सिर्फ गुच्छा

--progress - वास्तविक समय में सिंक करने की प्रगति दिखाएं - यदि आप बड़ी फ़ाइलों की नकल करते हैं तो सुपर उपयोगी है

--bwlimit=2000 - कॉपी / सिंकिंग (bw = बैंडविड्थ) की अधिकतम गति सेट करता है

PS rsync गंभीर रूप से महत्वपूर्ण है जब आप स्थानीय मशीन के मामले में नेटवर्क पर काम करते हैं, तो आप जैसे कमांड का उपयोग कर सकते हैं cp

शुभ लाभ!


0

मैं उपयोग कर रहा हूँ rsyncके साथ inotifywait। जब आप कोई फ़ाइल बदलते हैं, rsyncतो निष्पादित किया जाएगा।

inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"

आप inotifywaitदोनों मेजबान पर चलाने की जरूरत है । कृपया उदाहरण inotifywait की जाँच करें


0

आपको जो चाहिए वो है Rclone । Rclone ("क्लाउड स्टोरेज के लिए rsync") विभिन्न क्लाउड स्टोरेज प्रदाताओं (बॉक्स, ड्रॉपबॉक्स, एफटीपी आदि) और स्थानीय फाइल सिस्टम से फ़ाइलों और निर्देशिकाओं को सिंक करने के लिए एक कमांड लाइन लिनक्स प्रोग्राम है। Rlone केवल मिरर सिंकिंग का समर्थन करता है।

एक और अधिक ग्राफिकल समाधान जिसमें रियल-टाइम सिंकिंग शामिल है, फ्रीफाइलस्क्यूंक का उपयोग करना होगा , जिसमें रियल टाइमस्क्यू कार्यक्रम शामिल है। FreefileSync समर्थन 2-वे द्विदिश समकालिकता जिसमें हैंडलिंग हटाना शामिल है।

FreFileSync गुई


0

मैं एक ही सवाल और अंत का उपयोग कर रहा था git। हो सकता है कि यह आपकी स्थिति के अनुकूल न हो, लेकिन अगर किसी को भी यह विषय मिल जाए और वही प्रश्न हो, तो आप एक संस्करण नियंत्रण प्रणाली पर विचार कर सकते हैं।

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