Rsync dengan file karakter khusus tidak berfungsi antara Mac dan Linux

18

Saya ingin menggunakan rsync untuk membuat cadangan server Ubuntu saya dengan disk yang berada di Mac. Tetapi saya tidak membuatnya berfungsi dengan baik, karena setiap kali saya menjalankan kembali operasi rsync setelah waktu awal, file dengan karakter khusus pertama kali dihapus dan kemudian disinkronkan kembali. Sepertinya ada masalah dengan rangkaian karakter yang berbeda.

The solusi pilihan tampaknya menggunakan --iconvopsi:

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 ke NAS Anda, Anda harus 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.

Berkat @Jan, saya memperbarui versi rsync saya di mac saya dari 2.6.9. ke 3.1.1. Namun, saya masih belum cukup di sana, karena sekarang saya menerima kesalahan lebih lanjut:

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 "tindakan yang diminta tidak didukung" karena tampaknya versi rsync pada Ubuntu saya (12.04) adalah posting 3.xx, dan karenanya harus mendukung --iconv opsi tersebut.

EDIT: Izinkan saya menambahkan bahwa ketika saya (di Mac, nota bene) memulai rsync DARI Mac TO Linux, semuanya bekerja dengan baik:

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

Tapi sebaliknya 'dari mac tidak bekerja. Anehnya, pengujian untuk memulai rsync 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 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?

Nick si Swedia
sumber

Jawaban:

18

Solusinya sangat sederhana: Banyak karena komentar yang saya baca ketika meneliti masalah, saya pikir Anda harus menentukan karakter yang diatur dalam urutan transformasi; tetapi tampaknya itu bukan sintaks yang benar. Sebaliknya, kita harus selalu menggunakan --iconv=utf-8-mac,utf-8ketika menginisialisasi rsync dari mac, dan selalu menggunakan --iconv=utf-8,utf-8-macketika menginisialisasi rsync dari mesin linux, tidak masalah jika saya ingin menyinkronkan file dari mac atau mesin linux.

Maka itu bekerja seperti sihir!

EDIT: Memang, kadang-kadang, memeriksa halaman manual dengan cermat adalah hal yang baik untuk dilakukan. Ini dia, hitam putih:

--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.
Nick si Swedia
sumber
Uhm ... itu terjadi pada saya dari Ubuntu ke Amazon S3 ...: |
Tom Roggero
Lupakan! AWS CLI memperbaikinya untuk saya.
Tom Roggero
Putih di atas hitam;)
Hello World
3

Saya dapat mengkonfirmasi ini berfungsi, saya mengalami masalah yang sama. Dalam kasus saya, file apa pun dengan karakter beraksen tidak dapat dibaca di tujuan. Saya hanya melihatnya dengan menjalankan perbandingan folder di Mac saya menggunakan aplikasi Compare Folders: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Menambahkan di atas --iconv = utf-8-mac, utf-8 dan BOOM! rsync mengganti setiap file beraksen dengan yang baru.

Untuk menambahkan beberapa informasi karena tampaknya tautan di atas tidak lagi berfungsi, untuk memutakhirkan rsync ke 3.1.2, instal Macports dan jalankan: sudo port install rsync

Alasan mengapa Anda melihat server jauh mengembalikan versi 2.6.9 adalah karena versi lama sebenarnya masih ada dan server jauh melihat yang bukan yang baru.

Versi 2.6.9 terletak di / usr / bin

vandit6354
sumber