Tùy chọn rsync --iconv trên Mac không hoạt động (đồng bộ hóa từ máy chủ Linux từ xa sang máy Mac cục bộ)


9

Tôi muốn sử dụng rsync để sao lưu dữ liệu từ máy chủ Linux từ xa sang máy Mac cục bộ. Và tôi muốn khởi tạo thao tác này trên máy Mac cục bộ của mình. Tất cả đều hoạt động tốt, ngoại trừ có một vấn đề về ký tự đặc biệt: mỗi lần tôi chạy lại hoạt động rsync (sau khi đồng bộ hóa 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. Theo tôi hiểu, có một vấn đề với các bộ ký tự khác nhau và giải pháp ưa thích dường như là sử dụng --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.

Vấn đề là điều này chỉ hoạt động 'một chiều' đối với tôi, cụ thể là khi đồng bộ hóa từ máy Mac sang linux. Nhưng tôi muốn 'đi theo con đường khác', tức là đồng bộ hóa TỪ máy linux với máy Mac. Và tôi muốn khởi tạo hoạt động từ máy Mac cục bộ của mình. Nhưng khi tôi thử:

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

Tôi nhận được một lỗi:

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 thể hiểu tại sao điều này không hiệu quả. Phiên bản rsync của tôi trên Mac được cập nhật từ 2.6.9. đến 3.1.1. sử dụng Macports . Lưu ý rằng hoạt động sau đó hoạt động khi tôi (trên Mac, nota bene) khởi tạo rsync TỪ Mac ĐẾN Linux:

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

Nhưng đi theo cách khác 'từ mac - đó là điều tôi muốn làm - không hoạt động.

Thật kỳ lạ, thử nghiệm để bắt đầu đồng bộ hóa 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, lưu ý, 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 máy 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ẬP NHẬT 23 tháng 10 : Đề xuất tuyệt vời của Per @Lee Johnson (xem bên dưới), bắt đầu đồng bộ hóa từ máy chủ linux hiện hoạt động. Để hoàn thiện, bây giờ tôi đã thử tất cả các kết hợp và một mô hình thú vị xuất hiện:

TRÊN MAC:

CÔNG TRÌNH: Tệp từ Mac sang Linux

FAILS: Tệp từ Linux sang Mac

TRÊN LINUX

CÔNG TRÌNH: Tệp từ Linux sang Mac

FAILS: Tệp từ Mac sang Linux

Nói cách khác, --iconvtùy chọn dường như chỉ hoạt động theo một cách, với các tệp từ máy cục bộ đến điều khiển từ xa chứ không phải theo cách khác. Nó trông giống như một lỗi với tôi, nhưng có lẽ đó là cách nó được CUNG CẤP để làm việc?

Bất cứ ai cũng có thể chia sẻ ánh sáng về điều này?


1
khi sử dụng một tùy chỉnh rsync(ví dụ từ homebrew) trên mac và gọi nó từ linux, cần phải chỉ định đường dẫn chính xác bằng cách sử dụng--rsync-path="/usr/local/bin/rsync"
meduz

Tôi đã loại trừ .DS_Storekhỏi đồng bộ hóa và vì OSX này không thể xóa các thư mục có các tệp này bên trong. Tôi thiết lập các bộ ký tự với --iconv, đường dẫn rsync trên mac với --rsync-path(tôi đang sử dụng homebrew) và sau đó phải thêm --delete-excludedđể các thư mục cứng đầu có thể bị xóa.
Daniel

Câu trả lời:


12

Sau rất nhiều thử nghiệm, và rất nhiều nhờ những gợi ý hữu ích của @Lee Johnson, cuối cùng tôi đã tìm ra giải pháp, hiện đang gây cho tôi sự bối rối rõ ràng. Phần lớn là do một bình luận tôi đọc được khi nghiên cứu vấn đề, tôi nghĩ bạn phải chỉ định bộ ký tự theo thứ tự biến đổi; nhưng có vẻ như đó không phải là cú pháp chính xác. Thay vào đó, một người nên

LUÔN LUÔN sử dụng --iconv=utf-8-mac,utf-8khi khởi tạo rsync từ 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!


UTF8-MAC là một bộ ký tự giả và nó không khả dụng với iconvlib trên hệ thống Linux, ngay cả với phiên bản 3.1.1 mới nhất trong Ubuntu 14.04 LTS. Điều đó không hoạt động nếu bạn cố gắng bắt đầu đồng bộ hóa trên Linux.
Achim Lammerts

5

Gần đây bạn đã nâng cấp lên OS X Yosemite? Tôi gặp vấn đề tương tự, trước khi tôi nhớ rằng tôi đã cập nhật / usr / bin / rsync với phiên bản 3.1. Khi tôi nâng cấp lên Yosemite, nó đã được thay thế bằng phiên bản 2.6.9 cũ.

Trong trường hợp của riêng tôi, tôi đã khắc phục sự cố trên máy Mac bằng cách gửi lại 3.1 rsync của tôi vào / usr / bin:

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit

Cảm ơn một triệu, điều đó giải quyết được bí ẩn tại sao tôi có được 2.6.9 đó. thông điệp. (Tuy nhiên, trên máy Mac của tôi, phiên bản cài đặt Macport có trong / opt / local / bin / rsync, nhưng thay đổi liên kết đến phép thuật đó đã hoạt động.) Thật không may, tôi muốn khởi tạo đồng bộ hóa từ máy MAC của mình, vì vậy điều này chỉ giúp Theo như tôi hiểu thì máy Linux của tôi có thể biết phải làm gì. Vậy tại sao nó không hoạt động khi khởi tạo từ máy Mac của tôi? Đó là, "rsync -av --delete --iconv = utf-8, utf-8-mac mynas: remoteir / localdir /"
Nick The Swede

Tôi cũng xin nói rằng thật không may là tôi có tiếng tăm quá thấp để có thể +1 câu trả lời hữu ích của bạn và vì nó vẫn không hoạt động theo cách tôi muốn, tôi không thể đánh dấu nó là giải quyết. Trong tâm trí tôi, ngôi sao vàng trong mọi trường hợp (và tôi hứa sẽ quay lại và +1 bạn ngay khi đại diện của tôi đạt trên 15)!
Nick The Swede

Bạn có nói rằng nó vẫn không hoạt động từ phía OS X, ngay cả khi rsync 3.x đang chạy? Tôi không nghĩ rằng nó --iconvđược hỗ trợ trong 2.6.9; ngay cả khi rsync chỉ chuyển tùy chọn đến máy chủ từ xa để xử lý, nó vẫn cần nhận ra tùy chọn ở phía OS X. Điều gì which rsync; rsync --versionnói với bạn, từ một thiết bị đầu cuối OS X?
Lee Johnson

Đúng rồi. Như bạn có thể thấy trong thông báo lỗi (trích dẫn màu xám thứ ba trong câu hỏi), nó nhận ra rằng tôi đang sử dụng 3.1 trên mac: [Người nhận = 3.1.1] và tuyên bố rằng hành động không được hỗ trợ, mặc dù nó rõ ràng hoạt động từ phía Linux, cũng như khi tôi đồng bộ hóa, từ máy Mac, các tệp trên máy Mac sang máy chủ linux. Nhưng từ mac, các tệp từ linux đến mac không hoạt động. Thật kỳ lạ (ít nhất là với đôi mắt của tôi).
Nick The Swede

2
Khi bạn đang thử điều này từ Linux, điều gì xảy ra nếu bạn buộc đường dẫn thực thi bằng thứ gì đó giống như --rsync-path=/opt/local/bin/rsynclấy phiên bản 3.1.1 đã biết của bạn về phía Mac?
Lee Johnson
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.