rsync - मैक पर काम नहीं करने का विकल्प (रिमोट लिनक्स सर्वर से लोकल मैक पर सिंक)


9

मैं दूरस्थ लिनक्स सर्वर से अपने स्थानीय मैक पर बैकअप डेटा के लिए rsync का उपयोग करना चाहता हूं। और मैं इस ऑपरेशन को अपने स्थानीय मैक पर शुरू करना चाहता हूं। सभी ठीक काम करता है सिवाय इसके कि एक विशेष चरित्र की समस्या है: हर बार जब मैं rsync ऑपरेशन (प्रारंभिक सिंक के बाद) को फिर से चलाता हूं, तो विशेष वर्णों वाली फ़ाइलों को पहले हटा दिया जाता है और फिर पुन: सिंक किया जाता है। जहां तक ​​मैं समझता हूं, विभिन्न चरित्र सेटों के साथ एक समस्या है, और पसंदीदा समाधान--iconv विकल्प का उपयोग करने के लिए लगता है :

आप कम से कम अगर आप मैक पर हैं तो आप UTF-8 NFC और NFD के बीच कनवर्ट करने के लिए rsync's-iconv विकल्प का उपयोग कर सकते हैं। एक विशेष utf-8-mac वर्ण सेट है जो UTF-8 NFD के लिए खड़ा है। तो अपने मैक से अपने एनएएस में फ़ाइलों की प्रतिलिपि बनाने के लिए, आपको कुछ इस तरह चलाने की आवश्यकता होगी:

rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

यह UTF-8 NFD से सभी स्थानीय फ़ाइलनामों को रिमोट सर्वर पर UTF-8 NFC में बदल देगा। फ़ाइलों की सामग्री प्रभावित नहीं होगी।

समस्या यह है कि यह केवल मेरे लिए 'एक ही रास्ता' काम करता है, अर्थात् जब मैक से लिनक्स में सिंक्रनाइज़ किया जाता है। लेकिन मैं 'मैक के लिए दूसरी मशीन' से सिंक करने का दूसरा तरीका चाहता हूं। और मैं अपने स्थानीय मैक से ऑपरेशन को इनिशियलाइज़ करना चाहता हूँ। लेकिन जब मैं कोशिश करता हूं:

rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/

मुझे एक त्रुटि प्राप्त हुई:

iconv_open("UTF-8", "utf-8-mac") failed
rsync error: requested action not supported (code 4) at rsync.c(118) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]

मुझे यह समझने में नुकसान हो रहा है कि यह काम क्यों नहीं करता है। मैक पर मेरा rsync संस्करण 2.6.9 से अपडेट किया गया है। 3.1.1 को। Macports का उपयोग करना । ध्यान दें कि ऑपरेशन तब काम करता है जब मैं (मैक पर, nota bene) Mac से Linux के लिए rsync आरंभ करता हूं:

rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/

लेकिन दूसरे रास्ते से जा रहा 'मैक से - जो मैं करना चाहता हूं - वह काम नहीं करता है।

काफी हद तक, लिनक्स मशीन से सिंक को आरंभ करने के लिए परीक्षण इस अजीब संदेश को प्रस्तुत करता है:

rsync: on remote machine: --iconv=UTF-8-MAC: unknown option
rsync error: syntax or usage error (code 1) at /SourceCache/rsync/rsync-45/rsync/main.c(1333) [server=2.6.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

सहित, ध्यान दें, बहुत ही अजीब दावा है [server=2.6.9], हालांकि मैंने मैक पर 3.1.1 को अपडेट किया है। कुछ कारणों से, यह दिखता है कि मेरी लिनक्स मशीन मैक पर केवल मूल rsync संस्करण को देखती है।

इसे हल करने के बारे में कोई सुझाव?

अपडेट 23 अक्टूबर : प्रति वर्ष @Lee जॉनसन के शानदार सुझाव (नीचे देखें), अब लिनक्स सर्वर से सिंक की शुरुआत करते हुए काम करता है। पूर्णता के लिए, मैंने अब सभी संयोजनों की कोशिश की है, और एक दिलचस्प पैटर्न उभरता है:

मैक पर:

कार्य: मैक से लिनक्स तक की फाइलें

नाखून: लिनक्स से मैक तक की फाइलें

LINUX पर

कार्य: लिनक्स से मैक तक की फाइलें

नाखून: मैक से लिनक्स तक की फाइलें

दूसरे शब्दों में, --iconvविकल्प केवल एक ही तरीके से काम करने लगता है, स्थानीय मशीन से फ़ाइलों तक, दूसरे तरीके से नहीं। यह मेरे लिए एक बग की तरह लग रहा है, लेकिन शायद यही वह तरीका है जो काम करने के लिए बहुत ही उपयोगी है?

किसी को भी इस पर प्रकाश साझा करने में सक्षम?


1
जब rsyncमैक पर एक रिवाज (उदाहरण के लिए homebrew से) का उपयोग किया जाता है और इसे लिनक्स से कॉल किया जाता है, तो उपयोग करने के लिए सही रास्ता निर्दिष्ट करना आवश्यक है--rsync-path="/usr/local/bin/rsync"
meduz

मैं .DS_Storeसिंक से बाहर कर रहा था और इसके कारण OSX इन फ़ाइलों के साथ निर्देशिकाओं को हटा नहीं सका। मैं चरित्र सेट के साथ सेट करता हूं --iconv, मैक पर rsync पथ --rsync-path(मैं होमब्रे का उपयोग कर रहा हूं), और फिर इसे जोड़ना था --delete-excludedताकि जिद्दी निर्देशिकाओं को हटाया जा सके।
डेनियल

जवाबों:


12

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

ALWAYS का उपयोग --iconv=utf-8-mac,utf-8जब मैक से rsync को इनिशियलाइज़ करता है, और --iconv=utf-8,utf-8-macजब linux मशीन से rsync को इनिशियलाइज़ करता है , तो ALWAYS का उपयोग करता है , फिर चाहे मैं मैक या linux मशीन से फाइल सिंक करना चाहता हूँ।

फिर यह जादू की तरह काम करता है!


UTF8-MAC एक छद्म वर्ण है और यह लिनक्स सिस्टम पर iconvlib के साथ प्रति se उपलब्ध नहीं है, यहां तक ​​कि Ubuntu 14.04 LTS में नवीनतम 3.1.1 संस्करण के साथ भी नहीं। यदि आप लिनक्स पर सिंक शुरू करने की कोशिश करते हैं तो यह काम नहीं कर रहा है।
अचिम लामर्ट्स

5

क्या आपने हाल ही में OS X Yosemite में अपग्रेड किया था? मुझे एक ही समस्या थी, इससे पहले कि मुझे याद रहे कि मैंने संस्करण 3.1 के साथ अपडेट / usr / bin / rsync किया था। जब मैंने योसेमाइट में अपग्रेड किया, तो इसे पुराने 2.6.9 संस्करण के साथ बदल दिया गया।

अपने स्वयं के मामले में, मैंने अपने 3.1 rsync को / usr / bin में वापस लाकर मैक पर समस्या को ठीक किया:

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit

एक लाख धन्यवाद, इस रहस्य को सुलझाता है कि मुझे 2.6.9 मिला। संदेश। (मेरे मैक पर, हालांकि, मैकपोर्ट स्थापित संस्करण / ऑप्ट / स्थानीय / बिन / rsync में है, लेकिन उस स्पोर्ट के लिंक को बदलने से जादू हो गया।) दुर्भाग्य से, मैं अपने मैक मशीन से सिंक को इनिशियलाइज़ करना चाहता हूं, इसलिए यह केवल मदद करता है मुझे यह समझने में कि मेरी लिनक्स मशीन क्या कर सकती है। तो मेरे मैक से इनिशियलाइज़ होने पर यह काम क्यों नहीं करता है? यही है, "rsync -av --delete --iconv = utf-8, utf-8-mac mynas: remotedir / localdir /"
निक द

मुझे यह भी कहने दें कि दुर्भाग्य से मेरे पास आपके सहायक उत्तर को +1 करने में सक्षम होने के लिए बहुत कम प्रतिष्ठा है, और चूंकि यह अभी भी उस तरह से काम नहीं करता है जैसा मैं चाहता हूं, मैं इसे हल नहीं कर सकता। मेरे दिमाग में गोल्ड स्टार, किसी भी मामले में (और मैं वापस जाने का वादा करता हूं और जैसे ही आपका प्रतिनिधि 15 से ऊपर पहुंचता है)!
निक द स्वेड

क्या आप कह रहे हैं कि यह अभी भी ओएस एक्स की तरफ से काम नहीं करता है, यहां तक ​​कि rsync 3.x के साथ भी चल रहा है? मुझे नहीं लगता कि --iconv2.6.9 में समर्थित है; यहां तक ​​कि अगर rsync सिर्फ हैंडलिंग के लिए रिमोट होस्ट के लिए विकल्प को शिपिंग कर रहा है, तो उसे ओएस एक्स की तरफ विकल्प को पहचानना होगा। which rsync; rsync --versionOS X टर्मिनल से आपको क्या पता चलता है ?
ली जॉनसन

यह सही है। जैसा कि आप त्रुटि संदेश (प्रश्न में तीसरा ग्रे उद्धरण) में देख सकते हैं, यह पहचानता है कि मैं मैक पर 3.1 का उपयोग कर रहा हूं: [प्राप्तकर्ता = 3.1.1], और दावा करता है कि कार्रवाई समर्थित नहीं है, हालांकि यह स्पष्ट रूप से काम करता है लिनक्स की ओर से, साथ ही जब मैं सिंक करता हूं, मैक से, मैक पर लिनक्स सर्वर पर फाइल करता है। लेकिन मैक से, लिनक्स से मैक तक की फाइलें काम नहीं करती हैं। इतना अजीब (कम से कम मेरी नॉब आँखों को)।
निक द स्वेड

2
जब आप लिनक्स से यह कोशिश कर रहे हों, तब क्या होगा जब आप निष्पादन योग्य पथ --rsync-path=/opt/local/bin/rsyncको मैक साइड पर अपने ज्ञात 3.1.1 संस्करण को प्राप्त करने के लिए बाध्य करते हैं ?
ली जॉनसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.