दो फ़ोल्डरों को स्वचालित रूप से सिंक्रनाइज़ कैसे रखें?


86

मैं अपने सभी उपप्रकार के साथ एक फ़ोल्डर की एक सिंक्रनाइज़ कॉपी करना चाहूंगा।

यह इस तरह से स्वचालित रूप से काम करना चाहिए: जब भी मैं मूल फ़ोल्डर से सामान बनाता हूं, संशोधित करता हूं या हटाता हूं, उन परिवर्तनों को स्वचालित रूप से सिंक-फ़ोल्डर में लागू किया जाना चाहिए।

इस कार्य के लिए सबसे अच्छा तरीका कौन सा है?

BTW: मैं Ubuntu 12.04 पर हूँ

अंतिम लक्ष्य एक अलग रीयल-टाइम बैकअप प्रतिलिपि है, बिना सिमलिंक या माउंट के उपयोग के। मैंने अपने कंप्यूटरों के बीच डेटा को सिंक्रनाइज़ करने के लिए Ubuntu One का उपयोग किया, और थोड़ी देर बाद कुछ गलत हो गया और मेरा सभी डेटा एक सिंक्रनाइज़ेशन के दौरान खो गया।

इसलिए मैंने अपने डेटा की बैकअप प्रतिलिपि रखने के लिए एक और कदम जोड़ने का सोचा:

  • मैं अपना डेटा "फ़ोल्डर A" पर संग्रहीत रखता हूं
  • मुझे "फ़ोल्डर ए" से "फ़ोल्डर बी" ( cronएक स्क्रिप्ट rsync? हो सकता है?) का एक तरफ़ा सिंक बनाने के लिए मेरे वर्तमान प्रश्न के उत्तर की आवश्यकता है । मुझे इसकी आवश्यकता है कि ए से बी तक केवल एक ही रास्ता हो ताकि बी में कोई भी परिवर्तन ए पर लागू न हो।
  • मैं केवल उबंटू वन के साथ "फ़ोल्डर बी" को सिंक्रनाइज़ करता रहता हूं

    । इस तरह से ए में किसी भी परिवर्तन को बी से अपील की जाएगी, जिसे यू 1 से पता लगाया जाएगा और क्लाउड से सिंक्रनाइज़ किया जाएगा। अगर कुछ भी गलत होता है और U1 B पर मेरा डेटा हटा देता है, तो मैं हमेशा उन्हें A पर रखता हूं।

लैन्ज की टिप्पणियों से प्रेरित होकर, एक और विचार उबंटू वन के तहत एक फ़ोल्डर की सामग्री का बैकअप लेने के लिए स्टार्टअप पर rsync चलाने का हो सकता है, और rsync पूरा होने के बाद ही Ubuntu One को शुरू किया जा सकता है।

तुम उसके बारे में क्या सोचते हो? कैसे पता करें कि rsync कब समाप्त होता है?


आप क्या खत्म करने की कोशिश कर रहे हैं? क्या फ़ोल्डरों को वास्तव में अलग होने की आवश्यकता है, क्या आप एक नाम को दूसरे से नहीं जोड़ सकते हैं, या निर्देशिका को द्वितीयक स्थान पर बांध सकते हैं ? इसके अलावा, इन खोज परिणामों पर एक नज़र डालें ।
lanzz

1
मैं वास्तविक लाइव सिंक्रोनाइज़ेशन (यानी स्रोत निर्देशिका में फ़ाइल परिवर्तन के लिए लगातार देखना) के खिलाफ आवधिक के पक्ष में सलाह rsyncदूंगा।
lanzz

जवाबों:


99

आप inotifywait( modify,create,delete,moveसक्षम झंडे के साथ ) का उपयोग कर सकते हैं और rsync

while inotifywait -r -e modify,create,delete,move /directory; do
    rsync -avz /directory /target
done

यदि आपके पास inotifywaitअपने सिस्टम पर नहीं है , तो दौड़ेंsudo apt-get install inotify-tools


3
यदि आप SSH का उपयोग अपने दूरस्थ मशीन तक पहुँचने के लिए परिवहन के रूप में करना चाहते हैं -e ssh user@remote:/target, rsyncतो आप इसे जोड़ना चाह सकते हैं ।
फाल्कन

2
धन्यवाद @ फाल्कन, मैं आमतौर पर उपयोग करता हूं rsync -avz --delete --exclude-from=.rsyncignore /directory user@server:path। हालाँकि मैं एक सरल उत्तर लिखना चाहता था।
सिल्‍गन

4
स्पष्ट करने के लिए: क्या यह एक बार चलने वाली चीज़ है, या आप इसे एक bashrc या कुछ और से जोड़ेंगे?
ब्रैड जॉनसन

1
आप पूरे समय पर विचार कर सकते हैं कि लूप एक ऐसी प्रक्रिया के रूप में है जो जरूरत पड़ने पर सिंक्रनाइज़ हो जाती है। मैं आमतौर पर इसे उस प्रोजेक्ट के मेकफाइल में जोड़ता हूं, जिस पर मैं काम कर रहा हूं। इस तरह मैं सर्वर और निर्देशिका को चुन सकता हूं जो मैं चाहता हूं कि इसे बचाया जाए। मेरे उपयोग के मामलों में से एक है जब मैं अपने लैपटॉप में डीप लर्निंग एल्गोरिदम प्रोग्राम करता हूं और मैं इसे बेहतर सीपीयू और जीपीयू के साथ समर्पित कंप्यूटर में भारी प्रक्रिया को करने के लिए सिंक्रनाइज़ करता हूं। मैं उन फ़ाइलों को भी बाहर करता हूं जिनकी मुझे आवश्यकता नहीं है, जैसे कि .gitफ़ोल्डर।
सिलगॉन

2
यह फ़ाइल का नाम नहीं संभालता, उपयोगmodify,create,delete,move
urusha

24

आपको कुछ इस तरह की आवश्यकता है: https://github.com/axkibe/lsyncd यह एक उपकरण है जो rsync और inotify को जोड़ता है - पूर्व एक उपकरण है जो दर्पण, सही विकल्प सेट, अंतिम बिट के लिए एक निर्देशिका के साथ है। उत्तरार्द्ध एक निर्देशिका ओटी फ़ाइल में परिवर्तनों के एक कार्यक्रम को सूचित करने के लिए कर्नेल को बताता है। इसे कहते हैं:

यह कुछ सेकंड के लिए घटनाओं को एकत्र और संयोजित करता है और फिर परिवर्तनों को सिंक्रनाइज़ करने के लिए एक (या अधिक) प्रक्रिया (तों) को जन्म देता है।

लेकिन - https://www.digitalocean.com/community/tutorials/how-to-mirror-local-and-remote-directories-on-a-vps-with-lsyncd पर डिजिटल महासागर के अनुसार - में होना चाहिए Ubuntu रिपॉजिटरी!

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


1
lsyncd पहली बार में चांदी की गोली की तरह लग रहा था, लेकिन इसमें बहुत सारे खुले मुद्दे हैं और जाहिर तौर पर macOS कार्यान्वयन "पुराना और पुराना है।" मैं इसे 10.12 पर काम करने के लिए नहीं मिला।
एक भुगतान किया बेवकूफ

@apaidnerd निष्पक्ष होने के लिए, यह 90 मुद्दों बनाम 420 बंद खुला है। हालांकि, पिछले वर्ष केवल 10/40 मुद्दे बंद किए गए थे।
मतीन उल्हाक

8

@ सिलागॉन उत्तर का सिर्फ सरल संशोधन:

while true; do 
  inotifywait -r -e modify,create,delete /directory
  rsync -avz /directory /target
done

(@ सिलगॉन संस्करण कभी-कभी उबंटू 16 पर दुर्घटनाग्रस्त हो जाता है अगर आप इसे क्रोन में चलाते हैं)


2
आप इसे क्रोन में क्यों चलाएंगे?
Saygley

@saygley एक विशिष्ट कार्य के लिए, Ubuntu रिबूट करने के बाद सिंक प्रक्रिया को स्वचालित रूप से चलाया जाना चाहिए
डेनिस कुज़िन

5
मैं देख रहा हूँ .. फिर भी, क्योंकि यह सामान्य रूप से एक बार शुरू किया जाना चाहिए और जब तक सर्वर चालू रहता है; मैं इसके बजाय rc.local के भीतर कुछ पर विचार करेंगे।
Saygley

2

आप fschange का लाभ ले सकते हैं । यह एक लिनक्स फाइलसिस्टम परिवर्तन अधिसूचना है। स्रोत कोड उपरोक्त लिंक से डाउनलोड करने योग्य है, आप इसे स्वयं संकलित कर सकते हैं। fschangeएक खरीद फ़ाइल (/ proc / fschange) से डेटा को पढ़ने के द्वारा फ़ाइल परिवर्तनों का ट्रैक रखने के लिए इस्तेमाल किया जा सकता है। जब डेटा किसी फ़ाइल को लिखा जाता है, तो fschange सटीक अंतराल की रिपोर्ट करता है जिसे केवल कहने के बजाय संशोधित किया गया है कि फ़ाइल को बदल दिया गया है। यदि आप अधिक उन्नत समाधान की तलाश कर रहे हैं, तो मैं Resilio Connect की जाँच करने का सुझाव दूंगा । यह क्रॉस-प्लेटफ़ॉर्म है, उपयोग और निगरानी के लिए विस्तारित विकल्प प्रदान करता है। चूंकि यह बिटटोरेंट आधारित है, इसलिए यह किसी भी अन्य मौजूदा सिंक टूल की तुलना में तेज़ है। यह उनकी ओर से लिखा गया था।


0

मैं स्थानीय फ़ाइलों और निर्देशिकाओं को सिंक्रनाइज़ करने के लिए इस मुफ्त कार्यक्रम का उपयोग करता हूं: https://github.com/Fitus/Zaloha.sh । रिपॉजिटरी में एक सरल डेमो भी है।

अच्छी बात: यह बैश शेल स्क्रिप्ट (केवल एक फ़ाइल) है। अन्य कार्यक्रमों की तरह ब्लैक बॉक्स नहीं। डॉक्यूमेंटेशन भी है। इसके अलावा, कुछ तकनीकी प्रतिभाओं के साथ, आप अपनी पसंद के अंतिम समाधान बनाने के लिए इसे "मोड़" और "एकीकृत" कर सकते हैं।

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