UTF-8 NFD फ़ाइल नाम को UTF-8 NFC में, rsync या afpd में परिवर्तित करें


24

मेरे पास एक होम फाइल सर्वर है जो FreeNAS 8 चला रहा है। कुछ दिनों पहले मैंने अपनी पूरी आईट्यून्स लाइब्रेरी को मैक से अपलोड करने के लिए rsync का इस्तेमाल किया था ताकि मैं अपनी लाइब्रेरी को स्लो USB ड्राइव के बजाय नेटवर्क पर लोड कर सकूं। यह ज्यादातर काम करता था, और आईट्यून्स अब बहुत बेहतर चलता है, लेकिन मैं ऐसे किसी भी गाने को एक्सेस करने के मुद्दों पर चल रहा हूं, जिसमें गैर-असिसी किरदार हैं (मैंने पहली बार क्वींसक्रेश ट्रैक लोड करते समय समस्या पर ध्यान दिया था)। फाइंडर में फाइलें दिखेंगी, लेकिन उन्हें एक्सेस करने की किसी भी कोशिश ने उन्हें तब तक गायब कर दिया जब तक कि मैं सर्वर से जुड़ नहीं गया।

कुछ शोध के बाद मुझे यह पता चला क्योंकि OSX लिनक्स से एक अलग UTF वर्ण क्रम का उपयोग करता है। OSX फाइलसिस्टम यूनिकोड नॉर्मलाइजेशन फॉर्म D (NFD) का उपयोग करते हैं, जहां linux फॉर्म C (NFC) का उपयोग करता है। Rsync इन रूपों को तब परिवर्तित नहीं करता है जब यह मेरे मैक से सर्वर पर कॉपी करता है, अब जब iTunes नेटवर्क पर एक विशेष चरित्र के साथ एक फ़ाइल तक पहुंचने की कोशिश करता है, तो सर्वर पर मौजूद फाइलों में गलत एन्कोडिंग और एफडीपी रिपोर्ट होती है जो वे डॉन ' टी मौजूद है।

इस समस्या का समाधान करने का सबसे अच्छा तरीका क्या है? क्या बेस लाइब्रेरी को सर्वर पर अपलोड करते समय rsync को यूनिकोड रूपांतरण करना संभव है? क्या मैं NFD प्रारूप में फ़ाइल नाम संचारित / प्राप्त करने के लिए afpd को कॉन्फ़िगर कर सकता हूं? सर्वर पर फ़ाइल नाम बदलने के लिए एक आसान समाधान है? मुझे एक प्रोग्राम के बारे में कुछ सामान मिला, जिसका नाम convmv है, लेकिन मुझे नहीं पता कि मैं FreeNAS पर चल सकता हूं या नहीं।


1
Rsync के OS X संस्करण के साथ एक बग जैसा लगता है।
इग्नासियो वाज़केज़-अब्राम्स

जवाबों:


4

नोट: यदि आप संस्करण 3.0.0 या नए rsync का उपयोग कर रहे हैं, --iconvतो अन्य उत्तरों में वर्णित विकल्प स्पष्ट रूप से बेहतर समाधान है।

कुछ ऐसा काम करना चाहिए जो स्रोत निर्देशिका और माउंटेड रिमोट फाइल सिस्टम (एसएमबी, एनएफएस, एएफपी) के बीच rsyncing है , जो rsync सिर्फ स्थानीय फ़ाइल सिस्टम के रूप में व्यवहार करेगा।

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


यह आखिरकार मैंने क्या किया। मैंने NAS से पूरे संग्रह को हटा दिया और rsync को फिर से चलाया, NAS पर rsync डेमॉन के बजाय स्थानीय रूप से माउंट किए गए CIFS कनेक्शन का उपयोग किया। अब मैं सिर्फ फ़ाइल नाम पूंजीकरण से itunes मुद्दों को ठीक कर रहा हूँ। : /
चपेरसॉफ्ट

50

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

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

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


1
मैं मूल पोस्टर नहीं हूं, इसलिए यह मेरे ऊपर नहीं है, लेकिन यह एक बहुत साफ और कुशल समाधान है जिसे स्वीकार किया गया है। यह सुनिश्चित करने के लिए अभिनीत, इतना उपयोगी होगा।
इसका जीजीसी

1
बहुत बढ़िया जवाब; मुझे ऐसा कोई विचार नहीं था जो UTF8-MACएनएफडी के लिए खड़ा है; जब iconvखुद के साथ प्रयोग किया जाता है, तो यह एनएफसी और एनएफडी के बीच आगे-पीछे अनुवाद के लिए एक सामान्य तंत्र प्रदान करता है।
mklement 15

महान जवाब, यह एक लंबे समय से एक सिंक सर्वर के साथ एक मैक में समस्या खड़ी हल करती है!
मेडुज

2
मैक पर आपको आवश्यकता भी हो सकती हैbrew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
SaveTheRbtz

मुझे मिलता हैrsync: --iconv: unknown option
KMC

7

वर्तमान में मैं rsync --iconvइस तरह का उपयोग कर रहा हूँ :

लिनक्स सर्वर से OS X मशीन में फाइल कॉपी करना

आपको OS X मशीन से इस कमांड को निष्पादित करना चाहिए :

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 'username@server.ip.address.here:/home/username/path/on/server/' /Users/username/path/on/machine/

OS X मशीन से लिनक्स सर्वर पर फाइल कॉपी करना

आपको OS X मशीन से इस कमांड को निष्पादित करना चाहिए :

rsync -a --delete --iconv=UTF-8-MAC,UTF-8 /Users/username/path/on/machine/ 'username@server.ip.address.here:/home/username/path/on/server/'

0

अपने NAS पर फ़ाइलों को कॉपी करने के लिए rsync का उपयोग न करें। जब आप फ़ाइल को कॉपी करने के लिए rsync का उपयोग करते हैं तो फ़ाइलनाम आपके NAS पर UTF NFD प्रारूप (यानी OSX प्रारूप) में संग्रहीत किए जाएंगे, लेकिन आपके NAS पर चलने वाला सांबा सर्वर केवल UTF NFC प्रारूप फ़ाइलनाम को समझता है। फ़ाइलों को कॉपी करने के लिए CIFS / SMB (Samba) इंटरफ़ेस का उपयोग करें और सब कुछ ठीक हो जाएगा।


0

अपने अनुभव से मैं ssh के बजाय SMB का उपयोग करने की सलाह देता हूं। Iconv एन्कोडिंग के साथ समस्या को हल करता है, लेकिन अलग-अलग प्रणालियों पर अनुमत पात्रों के साथ अभी भी समस्या है:

मैक पर मूल फ़ाइल नाम:

https-//img-9gag-fun.9cache.com/photo/adK9jzN_460s

SMB पर rsync द्वारा कॉपी करने के बाद:

-as seen by Mac (over SMB):     https-//img-9gag-fun.9cache.com/photo/adK9jzN_460s
-as seen by Ubuntu (over SMB):  https-img-9gag-fun.9cache.comphotoadK9jzN_460s
-as seen by Windows10 (over SMB):   https-∀∀img-9gag-fun.9cache.com∀photo∀adK9jzN_460s
-as seen by Ubuntu server locally:  https-img-9gag-fun.9cache.comphotoadK9jzN_460s

Ss पर rsync द्वारा कॉपी करने के बाद (iconv ध्वज के बिना चींटी के साथ):

-as seen by Mac (over SMB):     H0INHQ~6
-as seen by Ubuntu (over SMB):  H0INHQ~6
-as seen by Windows10 (over SMB):   H0INHQ~6
-as seen by Ubuntu server locally:  https-::img-9gag-fun.9cache.com:photo:adK9jzN_460s
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.