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?
rsync
(mis. dari homebrew) pada mac dan memanggilnya dari linux, perlu untuk menentukan path yang benar menggunakan--rsync-path="/usr/local/bin/rsync"
.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.Jawaban:
Setelah banyak bereksperimen, dan sangat banyak karena saran bermanfaat @Lee Johnson, saya akhirnya menemukan solusinya, yang sekarang menurut saya sangat jelas. Sebagian besar karena komentar yang saya baca ketika meneliti masalah, saya pikir Anda seharusnya menentukan karakter yang diatur dalam urutan transformasi; tetapi tampaknya itu bukan sintaks yang benar. Sebaliknya, seseorang harus
SELALU digunakan
--iconv=utf-8-mac,utf-8
saat menginisialisasi rsync dari mac, dan SELALU digunakan--iconv=utf-8,utf-8-mac
saat menginisialisasi rsync dari mesin linux, tidak masalah jika saya ingin menyinkronkan file dari mesin mac atau linux.Maka itu bekerja seperti sihir!
sumber
Apakah Anda baru saja meningkatkan ke OS X Yosemite? Saya memiliki masalah yang sama, sebelum saya ingat bahwa saya telah memperbarui / usr / bin / rsync dengan versi 3.1. Ketika saya memutakhirkan ke Yosemite, ini diganti dengan versi 2.6.9 yang lama.
Dalam kasus saya sendiri, saya memperbaiki masalah pada Mac dengan menghubungkan kembali 3.1 rsync saya kembali ke / usr / bin:
sumber
--iconv
didukung di 2.6.9; bahkan jika rsync hanya mengirim opsi ke host jarak jauh untuk penanganan, ia perlu mengenali opsi di sisi OS X. Apa yang Andawhich rsync; rsync --version
katakan, dari terminal OS X?--rsync-path=/opt/local/bin/rsync
untuk mendapatkan versi 3.1.1 Anda yang dikenal di sisi Mac?