Rsync พร้อมไฟล์อักขระพิเศษไม่ทำงานระหว่าง Mac และ Linux


18

ฉันต้องการใช้ rsync เพื่อสำรองข้อมูลเซิร์ฟเวอร์ Ubuntu ของฉันด้วยดิสก์ที่อยู่บน 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 บนเซิร์ฟเวอร์ระยะไกล เนื้อหาของไฟล์จะไม่ได้รับผลกระทบ

ขอบคุณ @Jan ฉันอัปเดตเวอร์ชัน rsync ของฉันบน macจาก 2.6.9 ถึง 3.1.1 ถึงกระนั้นฉันยังคงไม่อยู่ที่นั่นเพราะตอนนี้ฉันได้รับข้อผิดพลาดเพิ่มเติม:

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 บน Ubuntu ของฉัน (12.04) คือโพสต์ 3.xx ดังนั้นจึงควรสนับสนุน--iconvตัวเลือกนี้

แก้ไข: ให้ฉันเพิ่มว่าเมื่อฉัน (บน Mac, nota bene) เริ่มต้น rsync จาก Mac กับ Linux ทุกอย่างทำงานได้อย่างยอดเยี่ยม:

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

แต่ไปทางอื่น 'จาก mac ไม่ทำงาน น่าประหลาดที่การทดสอบเพื่อเริ่ม rsync จากเครื่อง 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

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

คำตอบ:


18

คำตอบนั้นง่ายมาก: เนื่องจากความคิดเห็นที่ฉันอ่านเมื่อทำการค้นคว้าปัญหาฉันคิดว่าคุณควรระบุตัวละครที่ตั้งไว้ตามลำดับการเปลี่ยนแปลง แต่ดูเหมือนว่าไม่ใช่ไวยากรณ์ที่ถูกต้อง แต่หนึ่งควรเสมอใช้--iconv=utf-8-mac,utf-8เมื่อ initialising rsync จาก Mac และมักจะใช้--iconv=utf-8,utf-8-macเมื่อ initialising rsync จากเครื่องลินุกซ์ที่ไม่ว่าถ้าผมต้องการที่จะซิงค์ไฟล์จากเครื่อง Mac หรือลินุกซ์

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

แก้ไข: แน่นอนบางครั้งการตรวจสอบหน้าคู่มืออย่างใกล้ชิดเป็นสิ่งที่ดีที่จะทำ นี่คือสีดำบนพื้นขาว:

--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.

เอ่อ ... มันเกิดขึ้นกับฉันตั้งแต่ Ubuntu ถึง Amazon S3 ... : |
Tom Roggero

ไม่เป็นไร! AWS CLI ซ่อมให้ฉัน
Tom Roggero

ขาวบนพื้นดำ;)
สวัสดีชาวโลก

3

ฉันสามารถยืนยันงานนี้ฉันมีปัญหาเดียวกัน ในกรณีของฉันไฟล์ใด ๆ ที่มีอักขระเน้นเสียงไม่สามารถอ่านได้ในปลายทาง ฉันเห็นมันโดยใช้การเปรียบเทียบโฟลเดอร์บน Mac ของฉันโดยใช้แอปพลิเคชันเปรียบเทียบโฟลเดอร์: https://itunes.apple.com/gb/app/compare-folders/id816042486?mt=12

เพิ่มข้างต้น --iconv = utf-8-mac, utf-8 และ BOOM! rsync แทนที่ไฟล์ที่ถูกเน้นเสียงทุกไฟล์ด้วยไฟล์ใหม่

หากต้องการเพิ่มข้อมูลตามที่ลิงค์ด้านบนใช้งานไม่ได้อีกต่อไปการอัปเกรด rsync เป็น 3.1.2 ติดตั้ง Macports และเรียกใช้: sudo port install rsync

เหตุผลที่คุณเห็นเซิร์ฟเวอร์ระยะไกลที่ส่งคืนเวอร์ชัน 2.6.9 นั้นเป็นเพราะรุ่นเก่ายังคงอยู่ที่นั่นและเซิร์ฟเวอร์ระยะไกลก็เห็นเซิร์ฟเวอร์นั้นแทนที่จะเป็นเซิร์ฟเวอร์ใหม่

เวอร์ชัน 2.6.9 ตั้งอยู่ใน / usr / bin

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.