กำลังรับ rsync เพื่อย้ายไฟล์จากต้นทางไปยังปลายทาง?


15

rsync เป็นตัวเลือกที่ดีสำหรับโครงการของฉันหรือไม่

ฉันต้อง:
- คัดลอกไฟล์จากซอร์สไปยังโฟลเดอร์ปลายทางผ่าน SSH
- ให้แน่ใจว่าไฟล์ทั้งหมดถูกคัดลอก
- ลบไฟล์ต้นฉบับหลังจากคัดลอก
- หากฉันมีชื่อที่ขัดแย้งฉันต้องเปลี่ยนชื่อไฟล์

ดูเหมือนว่าฉันสามารถใช้ตัวเลือก: - ลบไฟล์ต้นฉบับ (เพื่อลบไฟล์ต้นฉบับ)
แต่วิธีที่ rsync จัดการข้อขัดแย้งฉันจะมีกฎได้อย่างไร

ใช้กรณีในโครงการของฉัน:

ฉันรันการคำนวณทางวิทยาศาสตร์บนเซิร์ฟเวอร์ A และผลลัพธ์จะถูกแทรกในโฟลเดอร์ "กระบวนการ" สำหรับการคำนวณแต่ละครั้งฉันมีที่เก็บเช่นนี้: / process / calc1
ตอนนี้ฉันต้องการถ่ายโอนพื้นที่เก็บข้อมูล "/ calc1" ไปยังเซิร์ฟเวอร์ B (ฉันได้รับ / ดำเนินการ / calc1) และลบ "calc1" จากเซิร์ฟเวอร์ A.
... ในระหว่างการคำนวณอื่นฉันได้รับ "/ กระบวนการ / calc2" บนเซิร์ฟเวอร์ A แนวคิดก็คือการย้าย "calc2" ใน "/ process /" ไดเรกทอรีบนเซิร์ฟเวอร์ B จากนั้นฉันมีตอนนี้ในเซิร์ฟเวอร์ B:
- / กระบวนการ / calc1
- / กระบวนการ / calc2
(และ / กระบวนการ / บนเซิร์ฟเวอร์ A ว่าง)

rsync จะจัดการกับความขัดแย้งได้อย่างไร (บนเซิร์ฟเวอร์ B) ถ้าฉันมีโฟลเดอร์อื่นเช่น "/ process / calc1" ในเซิร์ฟเวอร์ A หลังจากการคำนวณใหม่ (ถ้ามี "/ process / calc1" อยู่บนเซิร์ฟเวอร์ B แล้ว)

เป็นไปได้หรือไม่ที่จะเพิ่มกฎด้วย rsync และเปลี่ยนชื่อ "/ process / calc1" โดย "process / calc1R2" ในเซิร์ฟเวอร์ B และอื่น ๆ (เช่น: calc1R3)

ขอบคุณ

คำตอบ:


11

หากคุณต้องการใช้ rsync จริง ๆ ดูเหมือนว่าคุณจะต้องมีการรวมกันของ - แบ็คอัพ, - แบ็คอัพ -dir และ --suffix ฉันคิดว่าคุณจะได้ใกล้เคียงที่สุดกับสิ่งนี้

rsync -abv --suffix R1 --remove-source-files src/ dst/

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

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

ฉันไม่แน่ใจว่าสิ่งนี้เกินความเป็นจริงหรือไม่สำหรับสิ่งที่คุณตามมา แต่ควรตรงกับความต้องการของคุณ


ฉันสามารถมีไฟล์ขนาดใหญ่ได้หลังจากการคำนวณดังนั้นน่าจะดีกว่าถ้าใช้ rsync (ในกรณีที่ปัญหาเครือข่าย)
user44782

1

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

ดูเหมือนว่าคุณต้องการย้ายไฟล์บางไฟล์ คุณไม่จำเป็นต้องใช้ rsync ดูเหมือนว่าคุณกำลังใช้งาน linux หรือ BSD คุณสามารถใช้ mv -n มากกว่า ssh ตัวเลือก -n ไม่ได้เขียนทับไฟล์ที่มีอยู่ นี่ไม่ใช่อัตโนมัติ 100% อย่างไรก็ตามฉันไม่เห็นว่าไฟล์มีอยู่แล้วในกรณีของคุณ ไฟล์จะถูกคัดลอกจากแหล่งที่มาไปยังปลายทางแล้วลบออกจากแหล่งที่มา คุณต้องการเรียกใช้การคำนวณเดียวกันอีกครั้งหรือไม่? นั่นเป็นเหตุผลที่คุณจะลงเอยด้วยไฟล์ที่มีชื่อเดียวกัน? ฉันขอแนะนำให้เพิ่มหมายเลขเรียกใช้หรือแบทช์ต่อท้ายชื่อโฟลเดอร์ คุณต้องการให้ชัดเจน คุณมีอำนาจควบคุมวิธีการตั้งชื่อโฟลเดอร์หรือไม่? มีรายละเอียดเพิ่มเติมอีกไหม? ฉันขอแนะนำให้วางคำสั่งในสคริปต์ทุบตีหรือที่คล้ายกัน


ในบางกรณีฉันต้องเรียกใช้การคำนวณเดียวกันอีกครั้ง (และนั่นคือสาเหตุที่ฉันลงท้ายด้วยไฟล์ที่มีชื่อเดียวกัน) คุณถูกต้องผนวกการเรียกใช้เป็นความคิดที่ดี: ในการค้นหาคำสั่ง mmv -a (ฉันหวังว่ามันจะทำงานในโหมด ssh ใครบางคนใช้คำสั่งนี้แล้วหรือยัง?) ฉันสามารถควบคุมการตั้งชื่อโฟลเดอร์ได้
user44782

เป็นไปได้มากว่าจะไม่ติดตั้งในเครื่อง หากเป็นเครื่องของคุณคุณสามารถติดตั้งได้ Debian based: sudo apt-get install mmv นอกจากนี้คุณยังสามารถดูเป็น sshfs หรือ NFS และมีไฟล์เอาต์พุตโดยตรงไปยังปลายทางสุดท้าย นอกเสียจากว่าจะต้องมีตำแหน่งกลาง (การตรวจสอบการดัดแปลง ฯลฯ ) หากลิงก์ระหว่างเครื่องทั้งสองไม่น่าเชื่อถือนั่นเป็นความคิดที่ไม่ดีแน่นอน คำแนะนำของพอลนั้นดี แม้ว่าการผนวกหมายเลขเรียกใช้ในตอนแรกอาจจะมีการจัดระเบียบมากขึ้น
d -_- b

1
คุณใช้ "mv -n" ผ่าน ssh ได้อย่างไร? คุณสามารถใช้ mv ผ่าน sshfs
guettli

Ops ... ใช่มันทำให้ชัดเจนขึ้น
d -_- b

-1

สำหรับ SSH โดยสรุปให้ใช้สิ่งนี้:

เข้าถึงผ่านเปลือกระยะไกล:

ดึง: rsync [ตัวเลือก ... ] [USER @] โฮสต์: SRC ... [DEST]

พุช: rsync [OPTION ... ] SRC ... [USER @] HOST: DEST

ทุกอย่างอธิบายใน rsync (1)

สำหรับการเขียนสคริปต์สำหรับ cronjob เพื่อ rsync ผ่าน ssh โดยอัตโนมัติโดยไม่ต้องใช้รหัสผ่านให้ดูที่ ssh-agent (1) ด้วย

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