मैं दूरस्थ लिनक्स सर्वर से अपने स्थानीय मैक पर बैकअप डेटा के लिए 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
विकल्प केवल एक ही तरीके से काम करने लगता है, स्थानीय मशीन से फ़ाइलों तक, दूसरे तरीके से नहीं। यह मेरे लिए एक बग की तरह लग रहा है, लेकिन शायद यही वह तरीका है जो काम करने के लिए बहुत ही उपयोगी है?
किसी को भी इस पर प्रकाश साझा करने में सक्षम?
.DS_Store
सिंक से बाहर कर रहा था और इसके कारण OSX इन फ़ाइलों के साथ निर्देशिकाओं को हटा नहीं सका। मैं चरित्र सेट के साथ सेट करता हूं --iconv
, मैक पर rsync पथ --rsync-path
(मैं होमब्रे का उपयोग कर रहा हूं), और फिर इसे जोड़ना था --delete-excluded
ताकि जिद्दी निर्देशिकाओं को हटाया जा सके।
rsync
मैक पर एक रिवाज (उदाहरण के लिए homebrew से) का उपयोग किया जाता है और इसे लिनक्स से कॉल किया जाता है, तो उपयोग करने के लिए सही रास्ता निर्दिष्ट करना आवश्यक है--rsync-path="/usr/local/bin/rsync"