Rsync के साथ दो तरह से सिंक


95

मेरे पास एक फ़ोल्डर / a और एक दूरस्थ फ़ोल्डर A / है। मैं अब कुछ इस तरह एक Makefile पर चलाने के लिए:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

जब मैं सिंक-म्यूजिक बनाता हूं, तो यह पहले सर्वर से लोकल और फिर इसके विपरीत, सभी डिफरेंशियल को लोकल से सर्वर में भेज देता है।

यह बहुत अच्छी तरह से काम करता है अगर भविष्य में सिर्फ अपडेट या नई फाइलें हैं। यदि वहाँ विलोपन हैं, तो यह कुछ नहीं करता है।

Rsync में वहाँ है --delete और --delete- के बाद विकल्पों को पूरा करने में मदद करने के लिए कि मुझे क्या चाहिए, लेकिन बात यह है, यह 2-तरह-सिंक पर काम नहीं करता है।

अगर मैं किसी स्थानीय फ़ाइल को हटाए जाने पर, किसी सिंक पर सर्वर फ़ाइलों को हटाना चाहता हूं, तो यह काम करता है, लेकिन अगर, किसी कारण से (मेरे द्वारा समझाया गया है) तो मेरे पास कुछ फाइलें हैं जो सर्वर में नहीं हैं, लेकिन स्थानीय रूप से मौजूद हैं और उन्हें हटा दिया गया है। मैं चाहता हूं कि स्थानीय रूप से उन्हें हटा दिया जाए और सर्वर को कॉपी नहीं किया जाए (जैसा कि ऐसा होता है)।

बात यह है कि मेरे पास संदर्भ में 3 मशीनें हैं:

  1. डेस्कटॉप
  2. स्मरण पुस्तक
  3. घर-सर्वर

इसलिए, कभी-कभी, सर्वर में वे फाइलें होंगी, जिन्हें नोटबुक सिंक के साथ हटा दिया गया था, उदाहरण के लिए और फिर, जब मैं अपने डेस्कटॉप के साथ एक सिंक चलाता हूं (जहां हटाए गए सर्वर फाइलें अभी भी मौजूद हैं) मैं चाहता हूं कि ये फाइलें हटा दी जाएं और न हों सर्वर पर फिर से कॉपी किया गया।

मुझे लगता है कि यह केवल एक डेटाबेस और संचालन के ट्रैक के साथ संभव है: पी

कोई सरल उपाय? धन्यवाद।


1
मुझे ऐसी ही समस्या है। क्या आपको कोई हल मिला, mwm?
mouche

7
मैंने वास्तव में अब किया। मैं अनुभव की तरह एक ड्रॉपबॉक्स प्राप्त करने की कोशिश कर रहा था और एक समाधान के साथ आया था जिसमें फ़ाइल परिवर्तनों की निगरानी के लिए यूनिसन (जिसमें rsync का उपयोग किया गया है) और lsyncd शामिल हैं। मैंने इस समाधान के साथ अन्य लोगों को भी पाया और शीर्ष » cerebralmastication.com/2011/04/fast-two-way-sync-in-ubuntu
mwm

आजकल मैं अपने होम सर्वर पर स्थानीय रूप से नेक्लाउड का उपयोग कर रहा हूं। मेरे द्वारा प्रबंधित 100% "ड्रॉपबॉक्स" संपूर्णता। android / ios / win / macos / linux / web क्लाइंट है।
mwm

जवाबों:


63

यूनिसन आज़माएँ: http://www.cis.upenn.edu/~bcpierce/unison/

वाक्य - विन्यास: unison dirA/ dirB/

यूनिसन पूछती है कि फाइलें अलग-अलग होने पर क्या करना है, लेकिन आप निम्नलिखित का उपयोग करके प्रक्रिया को स्वचालित कर सकते हैं जो डिफ़ॉल्ट को स्वीकार करता है (गैर-सुरक्षित विकल्प):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ कोई सवाल नहीं पूछता है, और आउटपुट करने के लिए लिखता है कि कितनी फ़ाइलों को अनदेखा किया गया था (क्योंकि उन्होंने विरोध किया था)।


7
छोटी निर्देशिकाओं के लिए उपयोग करना बहुत आसान है। लेकिन यह बड़ी संख्या में फ़ाइलों के साथ निर्देशिकाओं के लिए बेहद कम है। जहाँ rsync लगभग तुरंत कॉपी करना शुरू कर देगा, वहीं यूनिसन को कभी-कभी कॉपी शुरू करने में 12 घंटे से अधिक समय लगता है, क्योंकि यह किसी भी चीज़ को कॉपी करने से पहले हर फाइल को स्कैन करता है।
ब्रेंट फौस्ट

1
यह इस पर अच्छा है। कम से कम गिट का उपयोग करने के लिए आसान है और परिवहन तेजी से है। इसके लिए जीआईबीब द्वारा विकसित एक एक्सटेंशन है जिसे लार्ज फाइल स्टोरेज कहा जाता है ।
8

1
गिट की मुख्य समस्याएं बड़ी फाइलें हैं और यह वास्तव में स्पष्ट तरीके से तैयार की गई हैं। ऐड-ऑन द्वारा दोनों को यथोचित रूप से बेहतर बनाया जा सकता है जैसे कि गिट-एनेक्स, बड़ी फ़ाइल स्टोरेज, आदि
एलेक्स

3
@ एक पेंच के लिए एक हथौड़ा, या एक नाखून के लिए एक पेचकश का उपयोग न करें। :)
ADTC

2
unison बढ़िया है - लेकिन बहुत अविश्वसनीय भी है। मेरे उपयोग के लगभग 50% मामलों में यह सरल काम नहीं किया है। इसका सबसे आम कारण खराब इंटर संस्करण क्षमता है। मैं कभी-कभी किसी ऐसे कंप्यूटर पर सामग्री के साथ सिंक करता हूं जिस पर मेरा कोई विशेषाधिकार नहीं है। यदि वह सर्वर मेरे द्वारा किए गए से भिन्न संस्करण में होता है, तो वह विफल हो जाता है। इसके अलावा, मैंने हाल ही में इसे एक ही संस्करण के ग्राहकों के बीच विफल कर दिया है, क्योंकि वे कुछ पुस्तकालय के विभिन्न संकलित संस्करणों का उपयोग कर रहे थे (यह एक ubuntu कंप्यूटर और रास्पबेरी पाई के बीच था)।
argentum2f


5

आप Osync का उपयोग कर सकते हैं: http://www.netpower.fr/osync , जो कि बुद्धिमान विलोपन प्रसार के साथ rsync है। इसमें कई विकल्प भी हैं जैसे रुका हुआ निष्पादन, नरम विलोपन और समय नियंत्रण।


5

चूँकि मूल प्रश्न में एक डेस्कटॉप और लैपटॉप और उदाहरण भी शामिल है, जिसमें म्यूज़िक फाइल्स शामिल हैं (इसलिए वह शायद GUI का उपयोग कर रहा है), मैं आज तक के सबसे अच्छे द्वि-दिशात्मक, मल्टी-प्लेटफ़ॉर्म, मुफ्त और ओपन सोर्स कार्यक्रमों में से एक का उल्लेख करूँगा: FreeFileSync

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


4

इसे इस्तेमाल करे,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

मैं बस इसका परीक्षण करता हूं और यह मेरे लिए काम करता है। मैं Windows7 (rsync पैकेज के साथ cygwin का उपयोग करके) और FreeNAS फाइलरवर के बीच 2-तरह का सिंक कर रहा हूं (FreeNAS, RBSync पैकेज के साथ FreeBSD पर चलता है)।


3
क्या यह नई स्थानीय फ़ाइलों को नहीं हटाएगा? -uगंतव्य पर नई फ़ाइलें स्किप की जाती हैं, लेकिन rsync के पास डिलीट करने की उम्र ट्रैक करने का एक तरीका नहीं है, इसलिए जब कोई स्थानीय फ़ाइल नई हो (और रखी जानी चाहिए) या पुरानी (और हटा दी जानी चाहिए) तो यह स्क्रिप्ट कैसे अंतर कर सकती है ? या मैं गलत समझ रहा हूं?
मैथेमेटिक्स 19

करता है --delete-excludedकि गंतव्य निर्देशिका पर मौजूद किसी भी फाइल नहीं बल्कि स्रोत निर्देशिका हटाना चाहते हैं? मैंने सोचा था कि आपको परिभाषित करना --exclude=<filename>होगा ताकि rsync केवल इन बहिष्कृतों को हटा न दे? या rsync सभी गैर-स्रोत निर्देशिका फ़ाइलों को "बहिष्कृत" के रूप में मानता है?
Mr_Moneybags

2
उत्तर मिला: भेजने वाले पक्ष पर फ़ाइलों को हटाने के अलावा, जो भेजने वाले पक्ष में नहीं हैं, यह rsync को यह भी बताता है कि प्राप्त किए गए पक्ष की किसी भी फ़ाइल को हटा दें जो बाहर हैं (देखें --exclude) rsync.samba.org/ftp /rsync/rsync.html
Mr_Moneybags

2
जो मैं समझता हूं, अगर मैं गंतव्य पर एक फ़ाइल बनाता हूं और फिर स्रोत से गंतव्य तक कॉपी करने के लिए rsync कमांड निष्पादित करता हूं, तो यह गंतव्य पर फ़ाइल को हटा देगा, क्योंकि कोई समय टिकटों का उपयोग नहीं किया जाता है। यह वह नहीं है जो आप सही चाहते हैं?
19

10
@ लुबिना: सही; यह समाधान पूर्ण 2-वे सिंक नहीं है : क्योंकि rsync सर्वर के--delete-excluded साथ पहले स्रोत के रूप में चलाया जाता है : स्थानीय रूप से जोड़ी गई फ़ाइलें उस रन के दौरान हटा दी जाएंगी (जबकि सर्वर में जोड़ी गई फ़ाइलें स्थानीय लक्ष्य पर कॉपी की जाती हैं )। सर्वर पर वापस सिंक की गई केवल स्थानीय फाइलें ही ऐसी फाइलें होती हैं जो सर्वर पर भी मौजूद होती हैं और स्थानीय स्तर पर (सर्वर संस्करणों की तुलना में हाल ही में) संशोधित की गईं - जो कि ओपी के परिदृश्य में होने की संभावना नहीं है। जैसा कि आप संकेत करते हैं, मेथिंक्स सच 2-वे सिंकिंग के साथ नहीं किया जा सकता है , क्योंकि रन के बीच बचत राज्य की आवश्यकता है। rsync
mklement0

3

आप की कोशिश कर सकते csync , इसके बारे में हुड के नीचे सिंक इंजन है ownCloud


2
2018 तक, csync विकास ठप हो गया है और खुद को ऐसा लग रहा है जैसे वे इसे पसंद कर रहे हैं। देखें: अधिक जानकारी के लिए github.com/owncloud/client/issues/4661
हारून

1

अब मैं SparkleShare https://www.sparkleshare.org/ का उपयोग कर रहा हूं

मैक, लिनक्स और विंडो पर काम करता है।


जैसे-जैसे समय बीतता है, मैं अपने समाधान को अपडेट करता रहता हूं। अब मैं अपने होम सर्वर पर नेक्लाउड का उपयोग कर रहा हूं। लिनक्स, मैक, विंडोज़, एंड्रॉइड और आईओएस पर नेक्लाउड क्लाइंट के साथ सिंक करना।
mwm

0

मुझे यकीन नहीं है कि यह दो सिंकिंग के साथ काम करता है, लेकिन काम करने के लिए -delete के लिए आपको - theccursive पैरामीटर भी जोड़ना होगा।


1
विकल्प की कमी बराबर --recurseहै -r, जो ओ पी है (संपीड़ित-विकल्प समूह में एम्बेडेड का उपयोग कर -avzru)।
mklement0

0

आप किसी फ़ोल्डर को रिमोट के साथ सिंक में रखने के लिए Cloudync का उपयोग कर सकते हैं :

pip install cloudsync
pip install cloudsync-gdrive
cloudsync sync file:c:/users/me/documents gdrive:/mydocs

यदि दूरस्थ NFS है, तो आप इसका उपयोग कर सकते हैं:

cloudsync sync file:c:/users/me/documents/ file:/mnt/nfs/whatevs

-1

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


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