Перетворення імен файлів UTF-8 NFD в UTF-8 NFC в rsync або afpd


24

У мене на домашньому файловому сервері працює FreeNAS 8. Кілька днів тому я використовував rsync, щоб завантажити всю свою бібліотеку iTunes з Mac, щоб я міг завантажувати свою бібліотеку через мережу замість повільного USB-накопичувача. Це в основному спрацювало, і iTunes зараз працює набагато краще, але я стикаюся з проблемами доступу до будь-яких пісень, у яких символи не-ascii (я вперше помітив проблему під час завантаження треків Queensrÿche). Файли відображатимуться у Finder, але будь-яка спроба доступу до них зникала, поки я не підключився до сервера.

Після деяких досліджень я дізнався, що це тому, що OSX використовує інший порядок символів UTF від Linux. У файлових системах OSX використовується форма Unicode Normalization Form D (NFD), де Linux використовує форму C (NFC). Rsync не конвертує ці форми, коли виконує копію з мого mac на сервер, тепер, коли iTunes намагається отримати доступ до файлів із спеціальним символом по мережі, файли на сервері мають неправильне кодування та звіти afpd, які вони не роблять ' t існують.

Який найкращий спосіб вирішити цю проблему? Чи можливо змусити rsync виконувати перетворення Unicode під час завантаження базової бібліотеки на сервер? Чи можна налаштувати afpd для передачі / прийому імен файлів у форматі NFD? Чи є просте рішення змінити імена файлів на сервері? Я знайшов деякі відомості про програму з назвою convmv, але не знаю, чи можу я її запустити на FreeNAS.


1
Звучить помилка з версією rsync для OS X.
Ігнасіо Васкес-Абрамс

Відповіді:


4

Примітка. Якщо ви використовуєте версію 3.0.0 або новішу версію rsync, --iconvваріант, як згадується в інших відповідях, очевидно, є найкращим рішенням.

Щось, що має працювати, - це rsyncing між вихідним каталогом та змонтованою віддаленою файловою системою (SMB, NFS, AFP), яку rsync просто вважатиме локальною файловою системою.

Однак я не знаю, наскільки добре це працює на практиці, і вам доведеться обійтися різними проблемами, наприклад, алгоритм передачі дельти не буде використовуватися за замовчуванням (оскільки джерело та призначення є "локальними") (можливо - не буде працювати весь файл?), Ви повинні перевірити, наприклад, чи SMB ефективно зберігає час модифікації тощо.


Це в кінцевому підсумку те, що я закінчив робити. Я видалив всю колекцію з NAS і знову запустив rsync, використовуючи локально встановлений CIFS-з'єднання замість демона rsync в NAS. Тепер я просто виправляю проблеми з itunes з великої літери файлу. : /
ChiperSoft

50

Ви можете використовувати --iconvопцію rsync для перетворення між UTF-8 NFC та NFD, принаймні, якщо ви працюєте на Mac. Існує спеціальний utf-8-macнабір символів, який розшифровується як UTF-8 NFD. Отже, щоб скопіювати файли з Mac у ваш NAS, вам потрібно буде запустити щось на зразок:

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

Це перетворить усі локальні імена файлів з UTF-8 NFD в UTF-8 NFC на віддаленому сервері. На вміст файлів це не вплине.


1
Я не Оригінальний плакат, тому це не до мене, але це набагато більш чисте та ефективне рішення, ніж той, що позначено як прийнято. Якщо зіграти це точно, буде дуже корисно.
ЇїGC

1
Чудова відповідь; Я не мав уявлення, що UTF8-MACозначає NFD; При використанні з iconvсамим собою це забезпечує загальний механізм перекладу назад і назад між NFC і NFD.
мклемент

чудова відповідь, це вирішує давню проблему синхронізації Mac з сервером Linux!
meduz

2
На mac вам також знадобитьсяbrew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
SaveTheRbtz

Я отримуюrsync: --iconv: unknown option
KMC

7

В даний час я використовую rsync --iconvтак:

Копіювання файлів з сервера Linux на машину 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 на сервер Linux

Ви повинні виконати цю команду з машини 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

Не використовуйте rsync для копіювання файлів у ваш NAS. Якщо ви використовуєте rsync для копіювання файлів, імена файлів зберігатимуться у вашій NAS у форматі NFD UTF (тобто у форматі OSX), але Samba-сервер, що працює у вашій NAS, розуміє лише назви файлів формату NFC у форматі NTD. Використовуйте інтерфейс CIFS / SMB (Samba) для копіювання файлів, і все буде добре.


0

Зі свого досвіду рекомендую використовувати SMB замість ssh. Iconv вирішує проблему з кодуванням, але все ще існує проблема з дозволеними символами в різних системах:

Оригінальне ім'я файлу на Mac:

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

Після копіювання rsync через SMB:

-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

Після копіювання rsync через ssh (з мурашкою без прапор 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 та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.