Chuyển đổi tên tệp UTF-8 NFD sang UTF-8 NFC, bằng rsync hoặc afpd


24

Tôi có một máy chủ tệp gia đình đang chạy FreeNAS 8. Vài ngày trước tôi đã sử dụng rsync để tải lên toàn bộ thư viện iTunes của mình từ Mac để tôi có thể tải thư viện của mình qua mạng thay vì tắt ổ USB chậm. Điều này chủ yếu hoạt động và iTunes chạy tốt hơn nhiều, nhưng tôi gặp vấn đề khi truy cập bất kỳ bài hát nào có các ký tự không phải là ascii trong đó (lần đầu tiên tôi nhận thấy vấn đề khi tải các bản nhạc của Queensrÿche). Các tệp sẽ hiển thị trong Finder, nhưng mọi nỗ lực truy cập chúng đều khiến chúng biến mất cho đến khi tôi kết nối lại với máy chủ.

Sau một số nghiên cứu tôi phát hiện ra điều này là do OSX sử dụng một thứ tự ký tự UTF khác với Linux. Các hệ thống tệp OSX sử dụng Mẫu D Chuẩn hóa Unicode (NFD), trong đó linux sử dụng Mẫu C (NFC). Rsync không chuyển đổi các biểu mẫu này khi nó thực hiện sao chép từ máy Mac của tôi sang máy chủ, bây giờ khi iTunes cố gắng truy cập một tệp có ký tự đặc biệt qua mạng, các tệp trên máy chủ có mã hóa sai và báo cáo afpd họ không ' t tồn tại

Cách tốt nhất để giải quyết vấn đề này là gì? Có thể làm cho rsync thực hiện chuyển đổi unicode trong khi tải thư viện cơ sở lên máy chủ không? Tôi có thể định cấu hình afpd để truyền / nhận tên tệp ở định dạng NFD không? Có một giải pháp dễ dàng để thay đổi tên tệp trên máy chủ không? Tôi đã tìm thấy một số nội dung về một chương trình có tên là convmv, nhưng tôi không biết liệu tôi có thể chạy chương trình đó trên FreeNAS hay không.


1
Âm thanh như một lỗi với phiên bản OSync của rsync.
Ignacio Vazquez-Abrams

Câu trả lời:


4

Lưu ý: Nếu bạn đang sử dụng phiên bản 3.0.0 hoặc mới hơn của rsync, --iconvtùy chọn như được đề cập trong các câu trả lời khác rõ ràng là giải pháp ưu việt.

Một cái gì đó nên hoạt động là rsyncing giữa thư mục nguồn và hệ thống tệp từ xa được gắn (SMB, NFS, AFP), mà rsync sẽ chỉ coi là hệ thống tệp cục bộ.

Tuy nhiên, tôi không biết điều này hoạt động tốt như thế nào trong thực tế và bạn phải giải quyết các vấn đề khác nhau, ví dụ: thuật toán chuyển đổi delta sẽ không được sử dụng theo mặc định (vì nguồn và đích là xác thực cục bộ) (có thể - không có toàn bộ tập tin sẽ hoạt động?), bạn phải kiểm tra, ví dụ, SMB bảo toàn hiệu quả thời gian sửa đổi, v.v.


Đây cuối cùng là những gì tôi đã làm. Tôi đã xóa toàn bộ bộ sưu tập khỏi NAS và chạy lại rsync, sử dụng kết nối CIFS được gắn cục bộ thay vì daemon rsync trên NAS. Bây giờ tôi chỉ sửa các vấn đề itunes từ viết hoa tên tệp. : /
ChiperSoft

50

Bạn có thể sử dụng --iconvtùy chọn của rsync để chuyển đổi giữa UTF-8 NFC & NFD, ít nhất là nếu bạn đang sử dụng máy Mac. Có một utf-8-macbộ ký tự đặc biệt là viết tắt của UTF-8 NFD. Vì vậy, để sao chép các tệp từ máy Mac sang NAS, bạn cần chạy một cái gì đó như:

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

Điều này sẽ chuyển đổi tất cả tên tệp cục bộ từ UTF-8 NFD sang UTF-8 NFC trên máy chủ từ xa. Nội dung của tệp sẽ không bị ảnh hưởng.


1
Tôi không phải là Poster gốc nên nó không phụ thuộc vào tôi, nhưng đây là một giải pháp hiệu quả và sạch sẽ hơn nhiều so với giải pháp được gắn cờ như được chấp nhận. Diễn viên này chắc chắn, sẽ rất hữu ích.
ItsGC

1
Câu trả lời chính xác; Tôi không có ý tưởng nào UTF8-MAClà viết tắt của NFD; khi được sử dụng với iconvchính nó, điều này cung cấp một cơ chế chung để dịch qua lại giữa NFC và NFD.
mkuity

câu trả lời tuyệt vời, điều này giải quyết một vấn đề lâu dài trong việc đồng bộ hóa máy mac với máy chủ linux!
meduz

2
Trên mac bạn cũng có thể cầnbrew tap homebrew/dupes && brew install homebrew/dupes/rsync && rehash
SaveTheRbtz

Tôi nhận đượcrsync: --iconv: unknown option
KMC

7

Hiện tại tôi đang sử dụng rsync --iconvnhư thế này:

Sao chép tệp từ máy chủ Linux sang máy OS X

Bạn nên thực thi lệnh này từ máy 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/

Sao chép tệp từ máy OS X sang máy chủ Linux

Bạn nên thực thi lệnh này từ máy 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

Không sử dụng rsync để sao chép các tệp vào NAS của bạn. Khi bạn sử dụng rsync để sao chép các tệp, tên tệp sẽ được lưu trữ trên NAS của bạn ở định dạng UTF NFD (tức là định dạng OSX) nhưng máy chủ Samba chạy trên NAS của bạn chỉ hiểu tên tệp định dạng NFC UTF. Sử dụng giao diện CIFS / SMB (Samba) để sao chép các tệp và mọi thứ sẽ ổn.


0

Từ kinh nghiệm của tôi, tôi khuyên bạn nên sử dụng SMB thay vì ssh. Iconv giải quyết vấn đề với mã hóa, nhưng vẫn còn vấn đề với các ký tự được phép trên các hệ thống khác nhau:

Tên tệp gốc trên Mac:

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

Sau khi sao chép bằng rsync qua 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

Sau khi sao chép bằng rsync qua ssh (với ant không có cờ 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.