UTF-8 NFD dosya adlarını UTF-8 NFC'ye dönüştürme, ya rsync ya da afpd


24

FreeNAS 8 çalıştıran bir ev dosya sunucum var. Birkaç gün önce, iTunes arşivimi Mac'ten yüklemek için rsync kullandım, böylece yavaş yavaş bir USB sürücü yerine kütüphanemi ağ üzerinden yükleyebildim. Bu çoğunlukla işe yaradı ve iTunes şimdi çok daha iyi çalışıyor, ancak içinde ascii olmayan karakterleri olan herhangi bir şarkıya erişme sorunlarıyla karşılaşıyorum (ilk önce Queensrÿche izlerini yüklerken sorunu fark ettim). Dosyalar Bulucu’da görünür, ancak bunlara erişme denemeleri, sunucuya yeniden bağlanana kadar kaybolur.

Bazı araştırmalardan sonra şunu öğrendim, çünkü OSX, Linux'tan farklı bir UTF karakter sırası kullanıyor. OSX dosya sistemleri, linux'un Form C (NFC) kullandığı Unicode Normalizasyon Form D'yi (NFD) kullanır. Rsync, kopyaları mac'umdan sunucuya gerçekleştirdiğinde bu formları dönüştürmüyor; iTunes, ağ üzerinden özel bir karaktere sahip bir dosyaya erişmeye çalıştığında, sunucudaki dosyalar yanlış kodlama ve afpd raporları veriyor. t var.

Bu sorunu çözmenin en iyi yolu nedir? Temel kütüphaneyi sunucuya yüklerken rsync'in unicode dönüşümünü gerçekleştirmesi mümkün müdür? Afpd'yi dosya isimlerini NFD formatında iletecek / alacak şekilde yapılandırabilir miyim? Sunucudaki dosya adlarını değiştirmek için kolay bir çözüm var mı? Convmv adlı bir program hakkında bir şeyler buldum, fakat bunu FreeNAS'ta çalıştırabilir miyim bilmiyorum.


1
Rsync'in OS X sürümünde bir hata gibi görünüyor.
Ignacio Vazquez-Abrams,

Yanıtlar:


4

Not: Sürüm 3.0.0 veya daha yeni bir rsync kullanıyorsanız, --iconvdiğer cevaplarda belirtildiği gibi seçenek açıkça üstün bir çözümdür.

Bir şey Çalışması gereken bir , kaynak dizini ve takılı olan uzak dosya sistemi (SMB, NFS, AFP) arasında rsyncing , rsync sadece yerel dosya sistemi olarak görecek.

Bununla birlikte, bunun pratikte ne kadar iyi çalıştığını bilmiyorum ve farklı konular üzerinde çalışmalısınız, örneğin delta-transfer algoritması varsayılan olarak kullanılmayacak (kaynak ve hedef “yerel” olduğundan) (belki - tüm dosya işe yaramaz mı?), örneğin SMB'nin değişiklik zamanlarını etkin bir şekilde koruduğunu vb. kontrol etmelisiniz.


Sonunda yaptığım şey bu. Tüm koleksiyonu NAS'tan sildim ve NAS üzerindeki rsync arka plan programı yerine yerel olarak bağlanmış CIFS bağlantısını kullanarak tekrar rsync kullandım. Şimdi sadece dosya adı büyük harflerinden kaynaklanan sorunları düzeltiyorum. : /
ChiperSoft

50

--iconvEn azından bir Mac kullanıyorsanız, UTF-8 NFC ve NFD arasında dönüştürme yapmak için rsync'in seçeneğini kullanabilirsiniz . utf-8-macUTF-8 NFD'yi temsil eden özel bir karakter seti vardır. Böylece, Mac'inizden NAS'ınıza dosyaları kopyalamak için, şöyle bir şey çalıştırmanız gerekir:

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

Bu, tüm yerel dosya adlarını uzak sunucudaki UTF-8 NFD'den UTF-8 NFC'ye dönüştürür. Dosyaların içeriği etkilenmeyecek.


1
Orijinal Poster değilim, bu yüzden bana bağlı değil, ancak bu kabul edildiği gibi işaretlenenden çok daha temiz ve verimli bir çözüm. Bundan emin olmak, çok faydalı olacak.
ItsGC

1
Mükemmel cevap; UTF8-MACNFD'nin anlamı olduğunu bilmiyordum ; iconvkendisi ile kullanıldığında , bu NFC ve NFD arasında ileri geri çeviri için genel bir mekanizma sağlar.
14

Harika cevap, bu bir mac bir linux sunucusuyla senkronize uzun süredir devam eden bir problem çözer!
meduz

2
Mac’te ayrıca ihtiyacınız olabilirbrew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
SaveTheRbtz

Anladımrsync: --iconv: unknown option
KMC

7

Şu anda böyle kullanıyorum rsync --iconv:

Dosyaları Linux sunucusundan OS X makinesine kopyalama

Bu komutu OS X makinesinden çalıştırmalısınız :

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

Dosyaları OS X makinesinden Linux sunucusuna kopyalama

Bu komutu OS X makinesinden çalıştırmalısınız :

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

Dosyaları NAS'ınıza kopyalamak için rsync kullanmayın. Dosyaları kopyalamak için rsync kullandığınızda, dosya adları NAS'ınızda UTF NFD biçiminde (yani OSX biçiminde) depolanır, ancak NAS'ınızda çalışan Samba sunucusu yalnızca UTF NFC biçimindeki dosya adlarını anlar. Dosyaları kopyalamak için CIFS / SMB (Samba) arayüzünü kullanın ve her şey yoluna girecek.


0

Tecrübelerime göre ssh yerine SMB kullanmanızı öneririm. Iconv kodlama ile ilgili sorunu çözüyor, ancak farklı sistemlerde izin verilen karakterlerle ilgili hala bir sorun var:

Mac'teki orijinal dosya adı:

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

Rsync tarafından SMB'ye kopyalandıktan sonra:

-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 tarafından ssh üzerinden kopyalandıktan sonra (iconv bayrağı olmayan karınca ile):

-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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.