Voglio usare rsync per eseguire il backup dei dati da un server Linux remoto sul mio Mac locale. E voglio inizializzare questa operazione sul mio Mac locale. Tutto funziona bene, tranne per il fatto che esiste un problema con i caratteri speciali: ogni volta che rieseguo l'operazione rsync (dopo la sincronizzazione iniziale), i file con caratteri speciali vengono prima eliminati e quindi risincronizzati. A quanto ho capito, c'è un problema con diversi set di caratteri e la soluzione preferita sembra essere l'uso --iconv
dell'opzione:
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/
Questo 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.
Il problema è che questo funziona solo "in un modo" per me, vale a dire quando si esegue la sincronizzazione dal Mac a Linux. Ma voglio 'andare dall'altra parte', ovvero sincronizzare DALLA MACCHINA Linux AL MAC. E voglio inizializzare l'operazione dal mio Mac locale. Ma quando provo:
rsync -av --delete --iconv=utf-8,utf-8-mac mynas:remotedir/ localdir/
Ricevo un 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é questo non funziona. La mia versione di rsync su Mac è stata aggiornata dalla 2.6.9. al 3.1.1. usando Macports . Si noti che l'operazione funziona quando I (su Mac, nota bene) avvia una sincronizzazione da Mac a Linux:
rsync -av --delete --iconv=utf-8-mac,utf-8 localdir/ mynas:remotedir/
Ma andare dall'altra parte "dal mac - che è quello che voglio fare - non funziona.
Stranamente, i test per avviare la sincronizzazione dalla macchina linux rendono 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]
incluso, nota, l'affermazione molto strana [server=2.6.9]
, anche se ho aggiornato a 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?
AGGIORNAMENTO 23 ottobre : l'eccellente suggerimento di Per @Lee Johnson (vedi sotto), l'avvio della sincronizzazione dal server Linux ora funziona. Per completezza, ora ho provato tutte le combinazioni e emerge un modello interessante:
SU MAC:
FUNZIONA: file da Mac a Linux
GUASTI: file da Linux a Mac
SU LINUX
FUNZIONA: file da Linux a Mac
GUASTI: file da Mac a Linux
In altre parole, l' --iconv
opzione sembra funzionare solo in un modo, con i file dal computer locale al telecomando, non viceversa. A me sembra un bug, ma forse è così che si suppone funzioni?
Qualcuno in grado di condividere la luce su questo?
.DS_Store
dalla sincronizzazione e per questo OSX non sono riuscito a eliminare le directory con questi file all'interno. Ho impostato i set di caratteri --iconv
, il percorso rsync sul Mac con --rsync-path
(sto usando homebrew), e quindi ho dovuto aggiungere in --delete-excluded
modo che le directory testarde potessero essere eliminate.
rsync
(es. da homebrew) sul mac e lo chiami da linux, è necessario specificare il percorso corretto usando--rsync-path="/usr/local/bin/rsync"