ฉันต้องการใช้ 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
ดูเหมือนว่าตัวเลือกจะใช้งานได้เพียงทางเดียวโดยใช้ไฟล์จากเครื่องท้องถิ่นไปยังรีโมทไม่ใช่วิธีอื่น ดูเหมือนว่าเป็นข้อบกพร่องสำหรับฉัน แต่บางทีนั่นอาจเป็นวิธีที่มันใช้งานได้?
ใครสามารถแชร์แสงนี้
.DS_Store
จากการซิงค์และเนื่องจาก OSX นี้ไม่สามารถลบไดเรกทอรีที่มีไฟล์เหล่านี้อยู่ภายใน ฉันตั้งค่าชุดอักขระด้วย--iconv
เส้นทาง rsync บน mac ด้วย--rsync-path
(ฉันใช้ homebrew) จากนั้นต้องเพิ่ม--delete-excluded
เพื่อให้ไดเรกทอรีที่ดื้อรั้นสามารถลบได้
rsync
(เช่นจาก homebrew) บน mac และเรียกใช้จาก linux จำเป็นต้องระบุพา ธ ที่ถูกต้องโดยใช้--rsync-path="/usr/local/bin/rsync"