Windows rsync ที่รองรับชื่อไฟล์แบบยาวหรือทางเลือกที่ดี?


13

ฉันกำลัง rsync บนโฮสต์ Linux เพื่อคัดลอกสิ่งต่าง ๆ จาก Windows ไปยังกล่อง Linux ของฉัน แต่ฉันไม่สามารถคัดลอกไฟล์ที่มีชื่อยาว ๆ ได้

ฉันได้ลองDeltaCopy , cwrsyncและcygwinแล้ว จากสิ่งที่ฉันพบมีเครื่องมือทั้งหมดเหล่านี้ปฏิเสธที่จะคัดลอกไฟล์เมื่อความยาวของไฟล์ยาวดูเหมือนว่าจะอยู่ที่ประมาณ 255 อักขระ

ปัญหานี้ได้รับการแก้ไขในฟอรัม cwrsync ที่นี่และมันอาจจะได้รับการแก้ไขในอนาคตเมื่อใดก็ตามที่ cygwin 1.7 ออกมาและรองรับ UTF8 แม้จะมีการสร้างการทดสอบที่นี่

ฉันไม่สบายใจเป็นพิเศษเมื่อใช้ชุดทดสอบสร้างบนระบบการผลิต ฉันหวังว่าจะมีคนรู้จักตัวเลือก rsync อื่น

ในฐานะที่เป็นทางเลือกของ rsync คุณรู้จักเครื่องมืออื่นที่ฉันสามารถคัดลอกโครงสร้างไดเรกทอรีบน Linux จากโฮสต์ windows ที่ไม่มีปัญหากับไฟล์ที่มีความยาวหรือตั้งชื่อผิดปกติหรือไม่? บิตที่สำคัญคือฉันต้องการเครื่องมือที่สามารถทำงานข้ามอุโมงค์ SSH ได้อย่างง่ายดาย บางระบบอยู่นอกเหนือไฟร์วอลล์และฉันเชื่อว่า SSH เป็นอุโมงค์ที่ฉันจะได้รับอนุญาตให้ใช้


FYI cwrsync ได้เผยแพร่การอัปเดตที่ใช้ cygwin 1.7 ที่สนับสนุนชื่อไฟล์แบบยาว! itefix.no/i2/node/12070
Zoredache

คำตอบ:


6

ฉันอาจพลาดจุดนี้ แต่คุณได้พิจารณาใช้Robocopyบน Windows คล้ายกับ RSync แต่คุณไม่สามารถกำหนดเวลาได้จากแอปพลิเคชันโดยตรง

สิ่งนี้สามารถเอาชนะได้โดยการเขียนแบตช์ไฟล์สำหรับการคัดลอกแล้วสร้างงานที่กำหนดเวลาไว้ Robocopy นั้นฟรีและแข็งแกร่งมาก ฉันมักจะใช้มันเพื่อคัดลอกไฟล์ระหว่าง Linux และ Windows โดยใช้ Samba และเครือข่ายและความสามารถในการทำประวัติย่อของ Robocopy นั้นมีประสิทธิภาพจริงๆ


robocopy เป็นตัวเลือกที่ฉันได้รับการพิจารณา แต่มันทำงานในทิศทางที่ผิด (ผลักจาก win ไป lin) ฉันต้องการดึงจาก windows บน Linux ฉันสงสัยว่าฉันอาจต้องไปในทิศทางนี้ถ้าฉันไม่สามารถหาอะไรที่ดีกว่า
Zoredache

5

Aha! คุณสามารถใช้ subst กับ rsync

หากคุณมีแผนผังไดเรกทอรีที่ลึก d: \ very \ long \ file \ n \ ame \ etc \ etc จากการทดสอบพบว่าคุณสามารถ subst X: ถึง d: \ very \ long \ file \ name \ etc จากนั้น rsync ไปที่และ จาก / cygdrive / x / อะไรก็ตาม สิ่งนี้ทำงานได้ทั้งที่ไคลเอ็นต์และที่เซิร์ฟเวอร์

ตอนนี้ในขณะที่คุณสามารถใช้ส่วนย่อยเชิงกลยุทธ์เพื่อลดความยาวของชื่อไฟล์ที่ฉันไม่ทราบว่าสิ่งนี้ช่วยให้คุณสามารถข้ามขีด จำกัด ของตัวละคร 260 มันอาจไม่สะดวกนัก คุ้มค่ากับการลองว่า

จอห์นเรนนี่

---- ที่ 8 <----

ดูhttp://www.ratsauce.co.uk/notablog/LongFilenames.aspเพื่อดูคำชมของฉันในชื่อไฟล์ยาว ๆ

ฉันไม่ทราบวิธีการใช้ \\? \ คำนำหน้าไปยัง Cygwin และแน่นอนว่ารุ่นปัจจุบันของ Cygwin ไม่ได้ใช้คำนำหน้าเป็นการภายใน สมมุติว่าพวกเขากำลังพูดถึงเรื่องนี้ในเวอร์ชั่นใหม่และนั่นคือสาเหตุที่รองรับชื่อยาวเกิน 260 ตัวอักษร ฉันใช้ Cygwin rsync ทั่วทุกสถานที่เช่นเดียวกับคุณฉันรอคอยการปล่อยตัว

มีปัญหาอื่น ๆ เกี่ยวกับ Cygwin rsync มันทำให้เกิดความยุ่งเหยิงของ ACL เว้นแต่ว่าคุณจะระบุ cygwin = nontsec และมันมีแนวโน้มที่จะแขวนบนไดเรกทอรีที่มีขนาดใหญ่มาก ในรายการสิ่งที่ต้องทำก่อนตายคือเขียน rsync เวอร์ชันเนทิฟ Windows ที่ไม่มีปัญหาเหล่านี้ ฉันเชื่อว่าสิ่งนี้ได้ทำไปแล้ว แต่เป็นเวอร์ชั่นเชิงพาณิชย์เท่านั้นไม่ใช่โดเมนสาธารณะ

จูเนียร์


Rsync ปรากฏขึ้นเพื่อวางในไดเรกทอรีขนาดใหญ่เนื่องจากต้องอ่านไฟล์ทั้งหมดก่อน ปัญหาคือ windows อ่านไฟล์ทั้งหมดก่อนจากนั้น rsync จะเริ่มทำงานอาจใช้เวลาสองสามนาทีในการสแกนไดเรกทอรีโดยขึ้นอยู่กับจำนวนไฟล์ที่มี
Ryaner

นี่ไม่ใช่กรณีที่มี rsync 3.0 อีกต่อไป ตอนนี้จะส่งรายการไฟล์ที่เพิ่มขึ้นเพื่อให้สามารถเริ่มส่งไฟล์ได้เร็วขึ้น
เจมส์ Sneeringer

2

ฉันขอแนะนำให้คุณลองใช้Unison http://www.cis.upenn.edu/~bcpierce/unison/

มันเป็นทางเลือกที่น่าสนใจมากสำหรับ rsync เพราะมันยังสามารถทำการซิงโครไนซ์ทิศทางไบนารี่ (ซึ่ง rsync ไม่สามารถทำได้) ฉันใช้มันไปแล้วบนเครื่องเสมือน 2 เครื่องและมีความสุขมากกับผลลัพธ์

แต่ตราบใดที่ชื่อไฟล์นั้นเกี่ยวข้องฉันไม่รู้ว่ามันทำงานได้ตามที่คุณต้องการหรือไม่

จากเว็บไซต์อย่างเป็นทางการ:

Unison เป็นเครื่องมือซิงโครไนซ์ไฟล์สำหรับ Unix และ Windows อนุญาตให้เก็บแบบจำลองสองชุดของไฟล์และไดเรกทอรีที่จะจัดเก็บในโฮสต์ที่แตกต่างกัน (หรือดิสก์ที่แตกต่างกันในโฮสต์เดียวกัน) แก้ไขแยกต่างหากจากนั้นนำมาทันสมัยโดยเผยแพร่การเปลี่ยนแปลงในแต่ละแบบจำลองไปยังอีก


คุณใช้กับเส้นทางที่ยาวกว่า 250 อักขระหรือไม่ ดูเหมือนว่าวิธีเดียวที่จะติดตั้งบน windows คือผ่าน cygwin ซึ่งฉันเชื่อว่าหมายความว่ามันจะมีปัญหาแบบเดียวกันกับที่ฉันใช้กับ cygwin rsync
Zoredache

ฉันยังไม่ได้ทดสอบเส้นทางที่ยาว แต่ Unison ไบนารีสำหรับ Windows ถูกสร้างขึ้นโดยใช้ cygwin.dll (มันรวมกับไบนารีไม่จำเป็นต้องติดตั้ง cygwin) ดังนั้นมันอาจทำงานได้อย่างถูกต้อง ลองทำดู :)
Olivier Jaquemet

2

เพิ่งทราบว่าฉันพบปัญหาเดียวกัน (ข้อ จำกัด ของ pre-1.7 cygwin) และพบว่าโครงสร้างของ cwrsync ทำงานได้กับ cygwin 1.7 ที่นี่:

http://www.doering-thomas.de/page.php?seite=1&sub=6&lang=en#rsync

(พบลิงค์ดั้งเดิมจากฟอรัม cwrsync)

ไม่ว่าจะเป็นงานสร้างอย่างเป็นทางการ แต่มันแก้ไขปัญหา charset ของฉัน :)


1

http://lists.samba.org/archive/rsync/2009-March/022955.html

http://www.okisoft.co.jp/esc/utf8-cygwin/มีเลเยอร์ UTF8 ซึ่งมีผลข้างเคียงของการเพิ่มขนาดพา ธ ที่เป็นไปได้ ตามที่ผู้เขียนถ้าคุณต้องการใช้ตัวละครมากขึ้นคุณสามารถเพิ่มค่าคงที่ในแพทช์ ดูเหมือนว่าจะแฮ็คมากยิ่งขึ้น

อาจไม่ใช่ทางออกที่ดีที่สุดของคุณสำหรับการซิงค์ระยะไกล แต่เป็น windows rsync ที่อ้างว่าสนับสนุนชื่อไฟล์ที่ยาวกว่า


โพสต์นี้ทำให้ฉันกังวลเล็กน้อย ( cygwin.com/ml/cygwin/2006-05/msg00068.html ) - "โดยทั่วไปมีแพทช์ 930 บรรทัดซึ่งส่วนใหญ่เป็นของใหม่ FWICS อาจไม่ครอบคลุมทุกสถานที่ที่ Unicode การแปลงอาจจำเป็น (โดยเฉพาะการส่ง Unicode ผ่านไปป์ textmode น่าจะล้มเหลวอย่างมาก) "
239

0

ดังนั้นหากเครื่องมือไม่ดีบน Windows มีวิธีใช้เครื่องมือ Linux หรือไม่

ด้วย SSH - sshfs ?

หากไม่มี ssh - ใช้ VPN และต่อเชื่อมเป็น SMB?

ทั้งสองวิธีจะช่วยให้คุณใช้ไคลเอนต์ Linux rsync ที่มีความสามารถมากกว่ากับระบบไฟล์ ฉันไม่ได้ทำสิ่งนี้กับข้อมูล 10GB ดังนั้น YMMV :)


ฉันพยายามดึงไฟล์จาก windows ไปยังกล่อง Linux ของฉัน นอกจากนี้ฉันไม่ต้องการสร้างที่เก็บถาวรจริงๆเพราะฉันกำลังพูดถึงข้อมูล 10GB + ที่ฉันต้องการซิงค์ทุกสัปดาห์ ถ้าฉันสร้างที่เก็บถาวรฉันจะไม่ได้รับประโยชน์จากการปรับปรุงแบบเพิ่มหน่วยความจำ
Zoredache

ตกลงคำตอบที่แก้ไขแล้ว
Cawflands

0

สิ่งนี้จะไม่ทำโครงสร้างไฟล์ขนาดใหญ่ แต่สำหรับชุดข้อมูลขนาดเล็กที่มีชื่อยาวคุณสามารถใช้การอย่าง 7-Zip เพื่อสร้างไฟล์เก็บถาวรที่ rsync สามารถถ่ายโอนได้ คุณบอกว่าคุณต้องดึงข้อมูลจากเซิร์ฟเวอร์ Windows ไปยังเซิร์ฟเวอร์ Linux หากคุณมีสิทธิ์เข้าถึงเชลล์ให้เก็บถาวรข้อมูลที่คุณต้องการในคอนเทนเนอร์ (7-zip) ถ่ายโอนคอนเทนเนอร์และขยายเมื่อได้รับไปยังเซิร์ฟเวอร์ นี่เป็นการผลักปัญหาชื่อไฟล์แบบยาวไปยังผู้จัดเก็บซึ่งฉันเชื่อว่ามีการสนับสนุนที่ดีกว่าและเครื่องมือที่ไม่ใช่ Cygwin


0

เพื่อไม่ให้สูญเสียการพกพาฉันขอแนะนำให้คุณอยู่กับ rsync และพยายามแก้ไขข้อ จำกัด 255 ข้อ ข้อ จำกัด นี้ไม่ได้อยู่ใน Windows อีกต่อไปและอยู่ในรหัส RSYNC จริง ๆ แล้วข้อ จำกัด ของ Windows อยู่ที่ประมาณ 2048 ตอนนี้ (ถ้าฉันจำได้ดี)

ฉันค่อนข้างมั่นใจว่าไม่มีพอร์ต rsync อื่น ๆ นอกเหนือจากพอร์ตที่ระบุโดยคุณและฉันขอแนะนำให้คุณใช้เวอร์ชันทดสอบและรายงานข้อผิดพลาดใด ๆ ที่คุณอาจพบ

ถ้าคุณไม่สนใจการใช้ FTP คุณสามารถลอง LFTP - มันมีคุณสมบัติการมิเรอร์ที่ดีมาก แต่มันไม่ได้เปรียบเทียบกับ rsync เมื่อเทียบกับการสำรองข้อมูล / ซิงค์


0

ฉันแฮกสคริปต์ที่สามารถเปลี่ยนชื่อไฟล์หรือไดเรกทอรีด้วยชื่อที่สั้นกว่าชั่วคราวเพื่อให้ rsync (และโปรแกรมอื่น ๆ ) สามารถดำเนินการต่อได้ คุณสามารถใช้สิ่งนี้เป็นส่วนหนึ่งของห่วงโซ่เครื่องมือที่คุณใช้เพื่อคัดลอกไฟล์จาก Linux ไปยัง Windows (rsync หรืออื่น ๆ ) ฉันไม่ทราบว่าคุณหมายถึง "ผิดปกติ" ดังนั้นบางทีนี่อาจเป็นเพียงส่วนหนึ่งของความต้องการของคุณ โปรดแจ้งให้เราทราบหากเป็นประโยชน์สำหรับคุณ

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