Rsync với các tệp ký tự đặc biệt không hoạt động giữa Mac và Linux


17

Tôi muốn sử dụng rsync để sao lưu máy chủ Ubuntu của mình với một đĩa nằm trên máy Mac. Nhưng tôi không làm cho nó hoạt động chính xác, vì mỗi lần tôi chạy lại hoạt động rsync sau thời gian ban đầu, các tệp có ký tự đặc biệt sẽ bị xóa đầu tiên và sau đó được đồng bộ hóa lại. Có vẻ như có vấn đề với các bộ ký tự khác nhau.

Các giải pháp ưu tiên có vẻ là để sử dụng các --iconvtùy chọn:

Bạn có thể sử dụng tùy chọn --iconv 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 bộ ký tự utf-8-mac đặ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.

Nhờ @Jan, tôi đã cập nhật phiên bản rsync trên máy mac của mình từ 2.6.9. đến 3.1.1. Tuy nhiên, tôi vẫn không hoàn toàn ở đó, vì bây giờ tôi nhận được một lỗi nữa:

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]

Tôi không hiểu tại sao "hành động được yêu cầu không được hỗ trợ" vì có vẻ như phiên bản rsync trên Ubuntu của tôi (12.04) là bài 3.xx và do đó sẽ hỗ trợ --iconvtùy chọn này.

EDIT: Hãy để tôi nói thêm rằng khi tôi (trên Mac, nota bene) khởi tạo rsync TỪ Mac ĐẾN Linux, mọi thứ đều hoạt động tuyệt vời:

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

Nhưng đi theo cách khác 'từ mac không hoạt động. Thật kỳ lạ, thử nghiệm để khởi tạo rsync từ máy linux sẽ hiển thị thông báo lạ này:

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]

bao gồm cả yêu cầu rất lạ [server=2.6.9], mặc dù tôi đã cập nhật lên 3.1.1 trên Mac. Vì một số lý do, có vẻ như máy linux của tôi 'chỉ thấy' phiên bản rsync gốc trên Mac.

Bất kỳ đề nghị về cách giải quyết này?

Câu trả lời:


17

Giải pháp rất đơn giản: Phần lớn là do một bình luận tôi đã đọc khi nghiên cứu vấn đề, tôi nghĩ rằng bạn phải xác định bộ ký tự theo thứ tự chuyển đổi; nhưng có vẻ như đó không phải là cú pháp chính xác. Thay vào đó, người ta phải luôn luôn sử dụng --iconv=utf-8-mac,utf-8khi khởi tạo rsync từ máy mac và luôn luôn sử dụng --iconv=utf-8,utf-8-mackhi khởi tạo rsync từ máy linux, bất kể tôi muốn đồng bộ hóa các tệp từ máy mac hay linux.

Sau đó, nó hoạt động như ma thuật!

EDIT: Thật vậy, đôi khi, kiểm tra trang hướng dẫn chặt chẽ là một việc nên làm. Đây rồi, màu đen trắng:

--iconv=CONVERT_SPEC
              Rsync  can  convert  filenames between character sets using this
              option.  Using a CONVERT_SPEC of "." tells rsync to look up  the
              default  character-set via the locale setting.  Alternately, you
              can fully specify what conversion to do by giving a local and  a
              remote   charset   separated   by   a   comma   in   the   order
              --iconv=LOCAL,REMOTE, e.g.  --iconv=utf8,iso88591.   This  order
              ensures  that the option will stay the same whether you're push-
              ing  or  pulling  files.

Uhm ... nó đang xảy ra với tôi từ Ubuntu đến Amazon S3 ...: |
Tom Roggero

Đừng bận tâm! AWS CLI đã sửa nó cho tôi.
Tom Roggero

Trắng trên đen;)
Xin chào Thế giới

2

Tôi có thể xác nhận điều này hoạt động, tôi đã có cùng một vấn đề. Trong trường hợp của tôi, bất kỳ tệp nào có ký tự có dấu đều không thể đọc được trên đích. Tôi chỉ phát hiện ra nó bằng cách chạy so sánh thư mục trên máy Mac của mình bằng ứng dụng So sánh thư mục: https://itunes.apple.com/gb/app/compare- Folders / id816042486? Mt = 12

Đã thêm ở trên --iconv = utf-8-mac, utf-8 và BOOM! rsync thay thế mọi tập tin có dấu bằng một tập tin mới.

Để thêm một số thông tin vì có vẻ như các liên kết trên không còn hoạt động, để nâng cấp rsync lên 3.1.2, cài đặt Macports và chạy: sudo port cài đặt rsync

Lý do tại sao bạn thấy máy chủ từ xa trả lại phiên bản 2.6.9 là vì phiên bản cũ thực sự vẫn còn đó và máy chủ từ xa đang nhìn thấy máy chủ đó thay vì phiên bản mới.

Phiên bản 2.6.9 được đặt trong / usr / bin

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.