Linux เทียบเท่ากับ robocopy หรือไม่


34

เป็นชนิดของตลกมีหลายวิธีในการที่ลินุกซ์เครื่องมือบรรทัดคำสั่งเป็นอย่างมากมายเหนือกว่าให้กับคน Windows แต่สิ่งหนึ่งที่ผมยังไม่ได้พบเทียบเท่ากับเป็นrobocopy Robocopy มีความหลากหลายมากกว่าcpและฉันไม่สามารถหาวิธีทำสิ่งที่ฉันต้องการด้วยเครื่องมือ Linux

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

ฉันพยายามคิดวิธีการทำสิ่งนี้ใน Linux เป็นเวลาครึ่งชั่วโมงตัดสินใจว่าฉันอาจต้องเรียนรู้สคริปต์ทุบตีหรือทำสิ่งที่ฉันต้องการแล้วฉันก็รู้ว่าฉันสามารถใช้ robocopy ได้ ฉันยังมีข้อกำหนดอื่น ๆ โดยทั่วไปแล้วฉันกำลังแปลงเว็บไซต์ Python (Django) จากที่เก็บ SVN เป็นที่เก็บ Git และฉันต้องการให้แน่ใจว่าฉันไม่ได้ทำการเปลี่ยนแปลงใน SVN อย่างไรก็ตามฉันต้องการแยก.svnไดเรกทอรีและ.pycไฟล์ Python ที่คอมไพล์ด้วยเงื่อนไข คำสั่ง robocopy ต่อไปนี้ทำสิ่งที่ฉันต้องการ:

robocopy source destination /XO /E /XD .svn /XF *.pyc

มี Robocopy ใน Linux หรือไม่? ฉันดูrsyncสั้น ๆ แต่ดูเหมือนว่าฉันจะต้องตั้งค่าเซิร์ฟเวอร์ rsync ก่อนที่จะพยายามซิงค์โฟลเดอร์


1
คุณไม่จำเป็นต้องตั้งค่าเซิร์ฟเวอร์ rsync, rsync over ssh จะรัน rsync บนเครื่องระยะไกลโดยอัตโนมัติในโหมดเซิร์ฟเวอร์ (ในลักษณะที่ใช้สำหรับการเชื่อมต่อนั้นเท่านั้น, ทำงานภายใต้บัญชีของคุณและปิดโดยอัตโนมัติเมื่อเสร็จสิ้น) .
CesarB

“ … แต่ดูเหมือนว่าฉันจะต้องตั้งค่าเซิร์ฟเวอร์ rsync ก่อนที่จะพยายามซิงค์โฟลเดอร์” ฉันใช้ Rsync มาหลายปีและไม่เคยติดตั้งเซิร์ฟเวอร์ Rsync อย่างเป็นทางการ ในความเป็นจริงเครื่องมือการซิงค์ / สำรองข้อมูลจำนวนมากบน macOS ใช้ Rsync เป็นแกนหลักโดยไม่จำเป็นต้องติดตั้งเซิร์ฟเวอร์เช่น Carbon Copy Cloner และ - ฉันเชื่อว่า - SuperDuper!
JakeGould

คำตอบ:


38

ดูเหมือนว่า rsync จะเป็นอย่างที่คุณเป็น คุณไม่จำเป็นต้องตั้งค่า 'เซิร์ฟเวอร์ rsync' เพื่อคัดลอกไฟล์จากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง Rsync รองรับการคัดลอกไฟล์ผ่าน SFTP (การถ่ายโอนไฟล์ SSH) ซึ่งกล่อง linux ส่วนใหญ่เปิดใช้งานแล้ว (หากไม่ได้ปิดการใช้งานด้วยตนเอง)

ดูไฟล์ Mirrorของ Lifehacker ในระบบที่มี rsyncสำหรับรายละเอียดเพิ่มเติม:

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

Rsync เป็นบริการฟรี (ตามคำพูด) และข้ามแพลตฟอร์มซึ่งหมายความว่าซิงค์ไฟล์ระหว่างระบบปฏิบัติการ (Windows / Cygwin, Mac OS, Linux); ทำงานผ่าน ssh ดังนั้นจึงเข้ารหัสและปลอดภัย ซึ่งแตกต่างจาก FTP ที่เพิ่มขึ้นดังนั้นเฉพาะบางส่วนของไฟล์ที่ถูกเปลี่ยนจะถูกถ่ายโอนไม่ใช่ไฟล์ทั้งหมดซึ่งทำให้เหมือน Speedy Gonzalez; และความจริงที่ว่ามันเป็นบรรทัดคำสั่งทำให้สามารถเขียนสคริปต์ได้และอัตโนมัติ


อ่านหน้า rsync - เพื่อใช้ ssh (โดยไม่มีเซิร์ฟเวอร์ rsync ที่ชัดเจน) คุณจะใช้ "-e ssh"
Doug Harris

1
rsync น่ากลัว! และคุณไม่จำเป็นต้องใช้ -e เนื่องจากเส้นทางใด ๆ เช่น user@host.com: / blah / จะใช้มันโดยอัตโนมัติ
How-To Geek

อืมมันเยี่ยมมาก ดังนั้นจึงสามารถใช้scpไวยากรณ์เหมือนพื้นสำหรับการถ่ายโอนผ่าน ssh? ที่จริงฉันพยายามถ่ายโอนไฟล์ในเครื่องเดียว แต่ก็ดีที่รู้
อิบราฮิม

1
น่าเสียดายที่คำตอบนี้ไม่ถูกต้องทั้งหมด: แม้ว่ามันจะใช้ SSH แต่ก็ไม่ได้ใช้ SFTP แต่จะสื่อสารกับอินสแตนซ์ rsync ระยะไกลโดยตรงโดยใช้โปรโตคอล rsync
Daniel B

15

rsync จะคัดลอกไฟล์จากไดเรกทอรีหนึ่งไปยังอีกไดเรกทอรีหนึ่งในเครื่องเดียวกันเช่น robocopy นี่คือคำสั่ง rsync ที่เทียบเท่ากับคำสั่ง robocopy ของคุณ:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

สิ่งนี้จะคัดลอกแหล่งที่มาซ้ำไปยังปลายทางและยกเว้นไฟล์เก่ารวมถึงไดเรกทอรี / ไฟล์ '.svn' และ '* .pyc'


ยกเว้นว่าจะทำในลักษณะเธรดเดี่ยวซึ่งอาจส่งผลให้เกิดประสิทธิภาพการทำงานที่เกิน 5 เท่าขึ้นอยู่กับปริมาณของการอ้อมในโซลูชันการจัดเก็บของคุณ
มิคาอิล

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