Saya ingin menggunakan rsync untuk membuat cadangan data dari server Linux jarak jauh ke Mac lokal saya. Dan saya ingin menginisialisasi operasi ini di Mac lokal saya. Semua berfungsi dengan baik kecuali ada masalah karakter khusus: setiap kali saya menjalankan kembali operasi rsync (setelah sinkronisasi awal), file-file dengan karakter khusus pertama-tama dihapus dan kemudian disinkronkan kembali. Sejauh yang saya mengerti, ada masalah dengan set karakter yang berbeda, dan solusi yang disukai tampaknya menggunakan --iconv
opsi:
Anda dapat menggunakan opsi --iconv rsync untuk mengkonversi antara UTF-8 NFC & NFD, setidaknya jika Anda menggunakan Mac. Ada set karakter utf-8-mac khusus yang merupakan singkatan dari UTF-8 NFD. Jadi untuk menyalin file dari Mac Anda ke NAS Anda, Anda perlu menjalankan sesuatu seperti:
rsync -a --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Ini akan mengonversi semua nama file lokal dari UTF-8 NFD ke UTF-8 NFC pada server jarak jauh. Konten file tidak akan terpengaruh.
Masalahnya adalah ini hanya berfungsi 'satu arah' bagi saya, yaitu saat menyinkronkan dari Mac ke linux. Tapi saya ingin 'pergi ke arah lain', yaitu menyinkronkan DARI mesin linux KE Mac. Dan saya ingin menginisialisasi operasi dari Mac lokal saya. Tetapi ketika saya mencoba:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Saya menerima kesalahan:
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]
Saya bingung untuk memahami mengapa ini tidak berhasil. Versi rsync saya di Mac diperbarui dari 2.6.9. ke 3.1.1. menggunakan Macports . Perhatikan bahwa operasi bekerja ketika saya (di Mac, nota bene) memulai rsync DARI Mac KE Linux:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Tapi sebaliknya 'dari mac - yang ingin saya lakukan - tidak bekerja.
Anehnya, pengujian untuk memulai sinkronisasi dari mesin linux membuat pesan aneh ini:
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]
termasuk, perhatikan, klaim yang sangat aneh [server=2.6.9]
, meskipun saya telah memperbarui ke 3.1.1 di Mac. Untuk beberapa alasan, sepertinya mesin linux saya 'hanya melihat' versi rsync asli di Mac.
Ada saran tentang cara mengatasi ini?
UPDATE 23 Oktober : Per saran bagus @Lee Johnson (lihat di bawah), memulai sinkronisasi dari server linux sekarang berfungsi. Untuk kelengkapan, sekarang saya telah mencoba semua kombinasi, dan sebuah pola menarik muncul:
PADA MAC:
KARYA: File dari Mac ke Linux
GAGAL: File dari Linux ke Mac
PADA LINUX
KARYA: File dari Linux ke Mac
GAGAL: File dari Mac ke Linux
Dengan kata lain, --iconv
opsi ini tampaknya hanya bekerja satu arah, dengan file dari mesin lokal ke remote, bukan sebaliknya. Sepertinya bug bagi saya, tapi mungkin itu cara yang seharusnya bekerja?
Adakah yang bisa berbagi cahaya tentang ini?
.DS_Store
dari sinkronisasi dan karena OSX ini tidak dapat menghapus direktori dengan file-file ini di dalamnya. Saya mengatur set karakter dengan --iconv
, jalur rsync pada mac dengan --rsync-path
(Saya menggunakan homebrew), dan kemudian harus menambahkan --delete-excluded
sehingga direktori yang membandel dapat dihapus.
rsync
(mis. dari homebrew) pada mac dan memanggilnya dari linux, perlu untuk menentukan path yang benar menggunakan--rsync-path="/usr/local/bin/rsync"