Mac'te rsync --iconv seçeneği çalışmıyor (uzak Linux sunucusundan yerel Mac'e senkronize et)


9

Uzak bir Linux sunucusundan yerel Mac'ime veri yedeklemek için rsync kullanmak istiyorum. Ve bu işlemi yerel Mac bilgisayarımda başlatmak istiyorum. Özel bir karakter sorunu dışında tüm iyi çalışır: rsync işlemini her çalıştırdığımda (ilk senkronizasyondan sonra), özel karakterlere sahip dosyalar önce silinir ve sonra yeniden senkronize edilir. Anladığım kadarıyla, farklı karakter kümelerinde bir sorun var ve tercih edilen çözüm--iconv seçeneği kullanmak gibi görünüyor :

En azından Mac kullanıyorsanız, UTF-8 NFC ve NFD arasında dönüştürme yapmak için rsync'in --iconv seçeneğini kullanabilirsiniz. UTF-8 NFD anlamına gelen özel bir utf-8-mac karakter seti vardır. Mac'inizden NAS'ınıza dosya kopyalamak için aşağıdakine benzer bir şey çalıştırmanız gerekir:

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

Bu, tüm yerel dosya adlarını UTF-8 NFD'den uzak sunucudaki UTF-8 NFC'ye dönüştürür. Dosyaların içeriği etkilenmez.

Sorun şu ki, bu benim için sadece bir yolla çalışıyor, yani Mac'ten linux'a senkronize ederken. Ama 'öbür tarafa gitmek', yani linux makineden Mac'e senkronize etmek istiyorum. Ve işlemi yerel Mac'imden başlatmak istiyorum. Ama denediğimde:

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

Bir hata alıyorum:

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]

Bunun neden işe yaramadığını anlamak için kayboldum. Mac'teki rsync sürümüm 2.6.9'dan güncellendi. 3.1.1. Macports kullanarak . İşlemin Mac'te Linux'tan bir rsync başlattığımda çalıştığını unutmayın:

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

Ama diğer taraftan gitmek 'mac'tan - ki yapmak istediğim şey - çalışmıyor.

Garip bir şekilde, linux makinesinden senkronizasyonu başlatmak için test yapmak bu garip mesajı veriyor:

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]

[server=2.6.9]Mac'te 3.1.1'e güncellememe rağmen , çok garip iddia da dahil . Bazı nedenlerden dolayı, linux makinem Mac'te sadece orijinal rsync sürümünü 'görüyor'.

Bunun nasıl çözüleceğine dair herhangi bir öneriniz var mı?

23 Ekim GÜNCELLEME : Per @Lee Johnson'un mükemmel öneri (aşağıya bakın), linux sunucusundan senkronizasyonu başlatmak artık çalışıyor. Tamlık için, şimdi tüm kombinasyonları denedim ve ilginç bir desen ortaya çıkıyor:

MAC ÜZERİNDE:

ÇALIŞMALARI: Mac'ten Linux'a Dosyalar

FAILS: Linux'tan Mac'e dosyalar

LINUX'TA

ÇALIŞMALARI: Linux'tan Mac'e dosyalar

FAILS: Mac'ten Linux'a Dosyalar

Başka bir deyişle, --iconvseçenek, yerel makineden uzaktaki dosyalara, diğer yolla değil, yalnızca bir şekilde çalışıyor gibi görünüyor. Benim için bir hata gibi görünüyor, ama belki de böyle çalışmayı ÖNERİLİR?

Bu konuda ışık paylaşabilen var mı?


1
rsyncMac'te özel (örn. homebrew'dan) kullanırken ve --rsync-path="/usr/local/bin/rsync"
linux'dan çağırırken

.DS_StoreSenkronizasyonlardan hariç tutuldum ve bu OSX nedeniyle bu dosyalarla içindeki dizinleri silemedim. Ben karakter setleri --iconv, mac ile rsync yolu --rsync-path(homebrew kullanıyorum) ile kurmak ve sonra --delete-excludedinatçı dizinlerin silinebilmesi için eklemek zorunda kaldı .
Daniel

Yanıtlar:


12

Birçok denemeden sonra ve @Lee Johnson'un yararlı önerileri nedeniyle, sonunda utanç verici bir şekilde bana açık olan çözümü buldum. Sorunu araştırırken okuduğum bir yorum nedeniyle, karakter setini dönüşüm sırasına göre belirtmeniz gerektiğini düşündüm; ancak bu doğru sözdizimi gibi görünmüyor. Aksine,

HER ZAMAN kullanmak --iconv=utf-8-mac,utf-8kullanmak DAİMA mac dan rsync'i başlatılıyor ne zaman ve --iconv=utf-8,utf-8-maclinux makineden rsync'i başlatılıyor zaman olursa olsun mac veya linux makineden senkronizasyon dosyaları istiyorum.

Sonra sihir gibi çalışır!


UTF8-MAC bir sahte karakter kümesidir ve Ubuntu 14.04 LTS'nin en son 3.1.1 sürümünde olmasa bile, Linux sistemindeki iconvlib ile kendi başına mevcut değildir. Linux'ta senkronizasyonu başlatmaya çalışırsanız bu işe yaramaz.
Achim Lammerts

5

Yakın zamanda OS X Yosemite sürümüne geçtiniz mi? / Usr / bin / rsync'i 3.1 sürümü ile güncellediğimi hatırlamadan önce aynı problemi yaşadım. Yosemite'ye yükselttiğimde, bu eski 2.6.9 sürümüyle değiştirildi.

Kendi durumumda, 3.1 rsync'imi / usr / bin'e yeniden bağlayarak Mac'teki sorunu düzelttim:

sudo -s
cd /usr/bin
mv rsync rsync-2.6.9
ln -s /usr/local/bin/rsync .
exit

Bir milyon teşekkürler, bu neden 2.6.9 elde ettiğimin gizemini çözüyor. İleti. (Mac bilgisayarımda, Macport'un yüklü sürümü / opt / local / bin / rsync'de, ancak o sporun bağlantısını değiştirmek sihir çalıştı.) Ne yazık ki, MAC makinemden senkronizasyonu başlatmak istiyorum, bu sadece yardımcı olur Linux makinemin ne yapacağımı anlayabildiğini anladığım kadarıyla. Peki Mac bilgisayarımdan başlatıldığında neden çalışmıyor? Yani, "rsync -av --delete --iconv = utf-8, utf-8-mac mynas: remotedir / localdir /"
Nick İsveçli

Şunu da söyleyeyim ki, maalesef yardımcı cevabınızı + 1'leyemeyecek kadar düşük bir itibarım var ve hala istediğim gibi çalışmadığı için, çözülmüş olarak işaretleyemiyorum. Zihnimde altın yıldız, her durumda (ve geri dönüp temsilcim 15'in üzerine çıktığında seni + 1'leyeceğime söz veriyorum)!
Nick The Swede

Rsync 3.x çalışıyor olsa bile hala OS X tarafından çalışmadığını mı söylüyorsunuz? Bunun --iconv2.6.9'da desteklendiğini düşünmüyorum ; rsync, seçeneği işlemek için uzak ana bilgisayara göndermiş olsa bile, OS X tarafındaki seçeneği tanıması gerekir. which rsync; rsync --versionBir OS X terminalinden size ne anlatıyor?
Lee Johnson

Bu doğru. Hata mesajında ​​(sorudaki üçüncü gri alıntı) görebileceğiniz gibi, Mac'te 3.1 kullandığımı kabul ediyor: [Alıcı = 3.1.1] ve açıkça çalışmasına rağmen eylemin desteklenmediğini iddia ediyor Linux taraftan, hem de ben linux sunucuya mac Mac dosyalarından, senkronize zaman. Ancak mac'tan linux'dan mac'e dosyalar çalışmaz. Çok garip (en azından noob gözlerime).
Nick The Swede

2
Linux'tan denediğinizde, çalıştırılabilir yolu --rsync-path=/opt/local/bin/rsyncMac tarafında bilinen 3.1.1 sürümünüzü almak gibi bir şeyle zorlarsanız ne olur ?
Lee Johnson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.