Rsync con file di caratteri speciali che non funzionano tra Mac e Linux


18

Voglio usare rsync per eseguire il backup del mio server Ubuntu con un disco residente su un Mac. Ma non riesco a farlo funzionare correttamente, poiché ogni volta che riesco a eseguire nuovamente l'operazione rsync dopo l'ora iniziale, i file con caratteri speciali vengono prima eliminati e quindi risincronizzati. Sembra che ci sia un problema con diversi set di caratteri.

La soluzione preferita sembra essere quella di utilizzare l' --iconvopzione:

Puoi usare l'opzione --iconv di rsync per convertire tra UTF-8 NFC e NFD, almeno se sei su un Mac. Esiste uno speciale set di caratteri utf-8-mac che sta per UTF-8 NFD. Quindi, per copiare i file dal Mac al NAS, è necessario eseguire qualcosa del tipo:

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

Ciò convertirà tutti i nomi di file locali da UTF-8 NFD a UTF-8 NFC sul server remoto. Il contenuto dei file non sarà interessato.

Grazie a @Jan, ho aggiornato la mia versione di rsync sul mio mac dalla 2.6.9. al 3.1.1. Tuttavia, non sono ancora del tutto lì, poiché ora ricevo un ulteriore errore:

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]

Sono in perdita per capire perché "l'azione richiesta non è supportata" poiché sembra che la versione rsync sul mio Ubuntu (12.04) sia post 3.xx e quindi dovrebbe supportare l' --iconvopzione.

EDIT: Vorrei aggiungere che quando (su Mac, nota bene) avvio una rsync DA MAC A Linux, tutto funziona magnificamente:

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

Ma andare dall'altra parte 'dal mac non funziona. Stranamente, il test per avviare rsync dalla macchina linux rende questo strano messaggio:

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]

compresa la strana affermazione [server=2.6.9], anche se ho aggiornato alla 3.1.1 sul Mac. Per alcuni motivi, sembra che la mia macchina linux 'vede' solo la versione rsync originale sul Mac.

Qualche suggerimento su come risolverlo?

Risposte:


18

La soluzione era imbarazzantemente semplice: molto a causa di un commento che ho letto durante la ricerca del problema, ho pensato che avresti dovuto specificare il set di caratteri nell'ordine di trasformazione; ma sembra che non sia la sintassi corretta. Piuttosto, si dovrebbe sempre usare --iconv=utf-8-mac,utf-8quando si inizializza rsync dal mac e si usa sempre--iconv=utf-8,utf-8-mac quando si inizializza rsync dalla macchina linux, non importa se si desidera sincronizzare i file dalla macchina mac o linux.

Quindi funziona come per magia!

EDIT: In effetti, a volte, controllare attentamente la pagina del manuale è una buona cosa da fare. Eccolo, nero su bianco:

--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 ... mi sta succedendo da Ubuntu ad Amazon S3 ...: |
Tom Roggero,

Non importa! AWS CLI ha risolto il problema per me.
Tom Roggero,

Bianco su nero;)
Ciao World

3

Posso confermare che funziona, stavo avendo lo stesso problema. Nel mio caso qualsiasi file con un carattere accentato era illeggibile sulla destinazione. L'ho notato solo eseguendo un confronto di cartelle sul mio Mac usando l'applicazione Confronta cartelle: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

Aggiunti i precedenti --iconv = utf-8-mac, utf-8 e BOOM! rsync ha sostituito tutti i file accentati con uno nuovo.

Per aggiungere alcune informazioni come sembra che i collegamenti sopra non funzionino più, aggiornare rsync a 3.1.2, installare Macports ed eseguire: sudo port install rsync

Il motivo per cui è stato visualizzato il server remoto che restituisce la versione 2.6.9 è perché la versione precedente è in realtà ancora lì e il server remoto sta vedendo quello invece di quello nuovo.

La versione 2.6.9 si trova in / usr / bin

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.