ตัวเลือก rsync --iconv บน Mac ไม่ทำงาน (ซิงค์จากเซิร์ฟเวอร์ Linux ระยะไกลไปยังเครื่อง Mac)


9

ฉันต้องการใช้ rsync เพื่อสำรองข้อมูลจากเซิร์ฟเวอร์ Linux ระยะไกลไปยังเครื่อง Mac ของฉัน และฉันต้องการเริ่มต้นการดำเนินการนี้บนเครื่อง Mac ของฉัน ทั้งหมดทำงานได้ดียกเว้นว่ามีปัญหาของอักขระพิเศษ: ทุกครั้งที่ฉันเรียกใช้การดำเนินการ rsync ใหม่ (หลังจากการซิงค์ครั้งแรก) ไฟล์ที่มีอักขระพิเศษจะถูกลบออกก่อนแล้วจึงซิงค์ใหม่อีกครั้ง เท่าที่ฉันเข้าใจมีปัญหากับชุดอักขระที่แตกต่างกันและวิธีแก้ปัญหาที่ต้องการดูเหมือนว่าจะใช้--iconvตัวเลือก:

คุณสามารถใช้ตัวเลือก --iconv ของ rsync เพื่อแปลงระหว่าง UTF-8 NFC และ NFD อย่างน้อยถ้าคุณใช้ Mac มีชุดอักขระ utf-8-mac พิเศษที่ย่อมาจาก UTF-8 NFD ดังนั้นในการคัดลอกไฟล์จาก Mac ของคุณไปยัง NAS คุณจะต้องเรียกใช้สิ่งต่อไปนี้:

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

สิ่งนี้จะแปลงชื่อไฟล์ในเครื่องทั้งหมดจาก UTF-8 NFD เป็น UTF-8 NFC บนเซิร์ฟเวอร์ระยะไกล เนื้อหาของไฟล์จะไม่ได้รับผลกระทบ

ปัญหาคือว่านี่ใช้งานได้ 'ทางเดียว' สำหรับฉันคือเมื่อซิงค์จาก Mac กับ linux แต่ฉันต้องการ 'ไปทางอื่น' เช่นซิงค์จากเครื่อง linux กับ Mac และฉันต้องการเริ่มต้นการดำเนินการจากเครื่อง Mac ของฉัน แต่เมื่อฉันลอง:

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

ฉันได้รับข้อผิดพลาด:

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]

ฉันสูญเสียที่จะเข้าใจว่าทำไมมันไม่ทำงาน เวอร์ชั่น rsync ของฉันบน Mac ได้รับการอัพเดตจาก 2.6.9 ถึง 3.1.1 ใช้Macports โปรดทราบว่าการดำเนินการทำงานแล้วเมื่อฉัน (บน Mac, nota bene) เริ่มต้น rsync จาก Mac TO Linux:

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

แต่ไปทางอื่น 'จาก mac - ซึ่งเป็นสิ่งที่ฉันต้องการ - ไม่ทำงาน

น่าประหลาดที่การทดสอบเพื่อเริ่มซิงค์จากเครื่อง linux ทำให้ข้อความแปลก ๆ นี้:

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]แม้ว่าฉันได้อัปเดตเป็น 3.1.1 บน Mac แล้ว ด้วยเหตุผลบางอย่างดูเหมือนว่าเครื่อง linux ของฉัน 'เห็น' เฉพาะเวอร์ชั่น rsync ดั้งเดิมบน Mac

ข้อเสนอแนะเกี่ยวกับวิธีการแก้ปัญหานี้?

อัปเดตวันที่ 23 ตุลาคม : ตามข้อเสนอแนะที่ยอดเยี่ยมของ @Lee Johnson (ดูด้านล่าง) เริ่มการซิงค์จากเซิร์ฟเวอร์ linux ตอนนี้ เพื่อความสมบูรณ์ฉันได้ลองชุดค่าผสมทั้งหมดและมีรูปแบบที่น่าสนใจโผล่ออกมา:

บน MAC:

ทำงาน: ไฟล์จาก Mac เป็น Linux

FAILS: ไฟล์จาก Linux ถึง Mac

บนลินุกซ์

ทำงาน: ไฟล์จาก Linux ถึง Mac

FAILS: ไฟล์จาก Mac เป็น Linux

กล่าวอีกนัยหนึ่ง--iconvดูเหมือนว่าตัวเลือกจะใช้งานได้เพียงทางเดียวโดยใช้ไฟล์จากเครื่องท้องถิ่นไปยังรีโมทไม่ใช่วิธีอื่น ดูเหมือนว่าเป็นข้อบกพร่องสำหรับฉัน แต่บางทีนั่นอาจเป็นวิธีที่มันใช้งานได้?

ใครสามารถแชร์แสงนี้


1
เมื่อใช้แบบกำหนดเองrsync(เช่นจาก homebrew) บน mac และเรียกใช้จาก linux จำเป็นต้องระบุพา ธ ที่ถูกต้องโดยใช้--rsync-path="/usr/local/bin/rsync"
meduz

ฉันไม่รวม.DS_Storeจากการซิงค์และเนื่องจาก OSX นี้ไม่สามารถลบไดเรกทอรีที่มีไฟล์เหล่านี้อยู่ภายใน ฉันตั้งค่าชุดอักขระด้วย--iconvเส้นทาง rsync บน mac ด้วย--rsync-path(ฉันใช้ homebrew) จากนั้นต้องเพิ่ม--delete-excludedเพื่อให้ไดเรกทอรีที่ดื้อรั้นสามารถลบได้
แดเนียล

คำตอบ:


12

หลังจากการทดลองจำนวนมากและเนื่องจากคำแนะนำที่เป็นประโยชน์ของ @Lee Johnson ในที่สุดฉันก็ค้นพบวิธีการแก้ปัญหาซึ่งตอนนี้ทำให้ฉันรู้สึกชัดเจน มากเนื่องจากความคิดเห็นที่ฉันอ่านเมื่อทำการวิจัยปัญหาฉันคิดว่าคุณควรระบุตัวละครที่ตั้งอยู่ในลำดับของการเปลี่ยนแปลง; แต่ดูเหมือนว่าไม่ใช่ไวยากรณ์ที่ถูกต้อง ค่อนข้างหนึ่งควร

ใช้เสมอ--iconv=utf-8-mac,utf-8เมื่อเริ่มต้น rsync จาก mac และใช้เสมอ--iconv=utf-8,utf-8-macเมื่อเริ่มต้น rsync จากเครื่อง linux ไม่ว่าฉันต้องการซิงค์ไฟล์จากเครื่อง mac หรือ linux

จากนั้นก็ใช้งานได้เหมือนเวทมนตร์!


UTF8-MAC เป็น pseudo-charset และไม่สามารถใช้งานร่วมกับ iconvlib บนระบบ Linux แม้จะไม่ใช่เวอร์ชัน 3.1.1 ล่าสุดใน Ubuntu 14.04 LTS ไม่ทำงานหากคุณพยายามเริ่มซิงค์บน Linux
Achim Lammerts

5

คุณเพิ่งอัพเกรดเป็น OS X Yosemite หรือไม่ ฉันมีปัญหาเดียวกันก่อนที่ฉันจะจำได้ว่าฉันได้อัปเดต / usr / bin / rsync ด้วยเวอร์ชัน 3.1 แล้ว เมื่อฉันอัพเกรดเป็นโยเซมิตีสิ่งนี้ก็ถูกแทนที่ด้วยเวอร์ชัน 2.6.9 เก่า

ในกรณีของฉันเองฉันแก้ไขปัญหาบน Mac โดยเชื่อมโยง 3.1 rsync ของฉันกลับไปที่ / usr / bin:

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

ขอบคุณหนึ่งล้านที่แก้ปริศนาว่าทำไมฉันถึงได้ 2.6.9 ข่าวสาร (สำหรับ Mac ของฉันเวอร์ชันที่ติดตั้ง Macport อยู่ใน / opt / local / bin / rsync แต่การเปลี่ยนลิงค์ไปยังกีฬานั้นใช้เวทย์มนตร์) น่าเสียดายที่ฉันต้องการเริ่มการซิงค์จากเครื่อง MAC ของฉันดังนั้นสิ่งนี้จะช่วยได้เท่านั้น เท่าที่ฉันเข้าใจว่าเครื่องลีนุกซ์ของฉันสามารถรู้ได้ว่าควรทำอย่างไร เหตุใดจึงไม่ทำงานเมื่อเริ่มต้นจาก Mac ของฉัน นั่นคือ "rsync -av --delete --iconv = utf-8, utf-8-mac mynas: remotedir / localdir /"
นิคชาวสวีเดน

ให้ฉันบอกด้วยว่าโชคไม่ดีที่ฉันมีชื่อเสียงต่ำเกินไปที่จะ +1 คำตอบที่เป็นประโยชน์ของคุณได้และเนื่องจากมันยังไม่ได้ผลตามที่ฉันต้องการ โกลด์สตาร์ในใจของฉันไม่ว่าในกรณีใด (และฉันสัญญาว่าจะกลับและ +1 คุณทันทีที่ตัวแทนของฉันถึงที่สูงกว่า 15)
Nick The Swede

คุณกำลังบอกว่ามันยังไม่ทำงานจากฝั่ง OS X แม้จะใช้งาน rsync 3.x อยู่หรือเปล่า ฉันไม่คิดว่า--iconvรองรับ 2.6.9; แม้ว่า rsync จะส่งตัวเลือกไปยังโฮสต์ระยะไกลเพื่อการจัดการ แต่ก็จำเป็นต้องรู้จักตัวเลือกในด้าน OS X มีอะไรwhich rsync; rsync --versionบอกคุณบ้างจากเทอร์มินัล OS X
ลีจอห์นสัน

ถูกต้อง. ดังที่คุณเห็นในข้อความแสดงข้อผิดพลาด (เครื่องหมายคำพูดสีเทาที่สามในคำถาม) มันรู้ว่าฉันใช้ 3.1 บน mac: [Receiver = 3.1.1] และอ้างว่าการกระทำนั้นไม่ได้รับการสนับสนุน จากด้าน Linux รวมถึงเมื่อฉันทำการซิงค์จาก Mac ไฟล์บน mac ไปยังเซิร์ฟเวอร์ linux แต่จาก mac ไฟล์จาก linux ไปยัง mac ไม่ทำงาน แปลกมาก (อย่างน้อยฉันก็จะสบตากัน)
Nick The Swede

2
เมื่อคุณลองทำสิ่งนี้จาก Linux จะเกิดอะไรขึ้นถ้าคุณบังคับพา ธ ที่สามารถใช้งานได้กับสิ่งที่ต้องการ--rsync-path=/opt/local/bin/rsyncให้รู้จักเวอร์ชั่น 3.1.1 ในฝั่ง Mac?
ลีจอห์นสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.