ความแตกต่างระหว่างตัวเลือกการลบ rsync คืออะไร?


118

ฉันเห็นในrsync man pageว่ามีdeleteตัวเลือกมากมาย แต่ไม่เข้าใจความแตกต่างระหว่างพวกเขาจริงๆ ความแตกต่างระหว่างตัวเลือกเหล่านี้คืออะไร?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
ทำไม--delete-beforeจะอธิบายว่า(default)? ฉันไม่เข้าใจความ(default)หมาย
Marco Marsala

1
ไม่ได้ระบุเป็นค่าเริ่มต้นในmanหน้าสำหรับrsync version 3.1.2 protocol version 31อีกต่อไป แต่ฉันเดาในรุ่นที่มีข้อความที่ยกมาคือว่าถ้าคุณจะใช้--deleteมากกว่า--delete-WHENนั้นก็เป็นถ้าคุณระบุ--delete-WHENที่ค่าเริ่มต้นWHEN before
Tom Hale

คำตอบ:


114
  • --del/--delete_during: ลบไฟล์จาก dir ปลายทางตามที่ถูกคัดลอก (บันทึกหน่วยความจำเทียบกับ--delete-before: --delete-beforeทำให้การสแกนแยกต่างหากเพื่อค้นหาสิ่งที่ลบได้)

  • --delete: ลบไฟล์ในไดเรกทอรีปลายทางหากไม่มีอยู่ในไดเรกทอรีต้นทาง

  • --delete-before: ลบไฟล์ในไดเรกทอรีปลายทางก่อนที่จะคัดลอกไฟล์ที่มีชื่อเดียวกันจากไดเรกทอรีต้นทาง

  • --delete-during: ลบไฟล์ในไดเรกทอรีปลายทางในขณะที่คัดลอกไฟล์ที่มีชื่อเดียวกันจากไดเรกทอรีต้นทาง

  • --delete-delay: ทำเครื่องหมายลบระหว่างการถ่ายโอน แต่รอจนกว่าการถ่ายโอนจะเสร็จสมบูรณ์

  • --delete-after: ตัวรับสัญญาณลบหลังจากการถ่ายโอนไม่ใช่มาก่อน ... หากส่วนอื่น ๆ ของ rsync ย้ายไฟล์พิเศษที่อื่นคุณต้องการได้สิ่งนี้แทน--delete-delayเพราะ--delete-delayจะเป็นตัวตัดสินว่าจะลบอะไรในระหว่างการถ่ายโอนขณะที่--delete-afterตรวจสอบไดเรกทอรีของไฟล์ ควรลบหลังจากทุกอย่างเสร็จสิ้น

  • --delete-excluded: ลบไฟล์ออกจากไดเรกทอรีปลายทางที่ถูกแยกออกจากการถ่ายโอนจากไดเรกทอรีต้นทางอย่างชัดเจน

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

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

ตัวเลือกอื่น ๆ ส่วนใหญ่เกี่ยวข้องกับพื้นที่หรือประสิทธิภาพ เมื่อคุณลบไฟล์เป็นสิ่งสำคัญหากคุณต้องการให้แน่ใจว่าการถ่ายโอนสำเร็จก่อนที่คุณจะทำอะไร แต่ถ้าอุปกรณ์ของคุณมีขนาดเล็กเกินไปที่จะจัดการกับข้อมูลทั้งหมด 2 สำเนาคุณจะต้องลบตามที่คุณไป ฯลฯ แปลกประหลาดเล็กน้อยเนื่องจากมีประวัติอันยาวนานในหลาย ๆ แพลตฟอร์ม: มีการเพิ่มตัวเลือกบางอย่างเพื่อให้ผู้ที่คุ้นเคยกับพฤติกรรมบางอย่างจะไม่สับสน


3
ดังนั้น - ลบและ - ลบก่อนหน้านี้เหมือนกันหรือไม่ man rsync ไม่ได้พูดเมื่อ - ลบลบไฟล์
ppr

@ppr: ขึ้นอยู่กับระบบ เหตุผลที่มีตัวเลือกเฉพาะมากมายนั้นเป็นเพราะ delete บน Solaris! = delete บน HP-UX! = delete บน AIX! = delete บน Linux
Satanicpuppy

เมื่อ rsyncing ไดเรกทอรีทั้งหมดdelete-afterลบแต่ละไฟล์ในระหว่างการซิงค์หรือเฉพาะหลังจาก dir ทั้งหมดได้รับการมิร์เรอร์? ฉันคิดว่าdelete-afterเพียงพอสำหรับความต้องการของฉัน แต่ฉันไม่มีพื้นที่เหลือบนอุปกรณ์เมื่อสำรองข้อมูลหนึ่งในไดรฟ์ของฉัน
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: อย่างใดอย่างหนึ่ง มันเคลื่อนทุกอย่างที่กำลังจะเคลื่อนไหวและเมื่อเสร็จแล้วก็เริ่มลบสิ่งต่าง ๆ หากคุณต้องการให้ลบก่อนที่มันจะย้ายทุกอย่างใช้ - ลบในระหว่าง
Satanicpuppy

2
หลังจากประสบการณ์บางอย่างฉันพบว่าแม้delete-duringไม่ได้ป้องกันno space left on device(บน Linux) ดังนั้นdelete-beforeวิธีเดียวที่รับประกันได้คือหลีกเลี่ยงมัน (เช่นเมื่อทำมิเรอร์ไดรฟ์ที่เกือบเต็มและไดรฟ์ปลายทางก็เกือบเต็มแล้วเช่นกัน)
Sridhar Sarnobat

1

มีสองสิ่งที่เกิดขึ้น:

  1. ใครทำการลบ
  2. เมื่อมันเกิดขึ้น

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

เมื่อมันเกิดขึ้นเป็นเรื่องง่าย ... ก่อนที่จะหมายความว่าไฟล์ทั้งหมดจะถูกลบและคัดลอกแล้ว rsync มากกว่าไฟล์ ในระหว่างที่มันผ่านรายการไฟล์มันจะลบมันเมื่อมันมาถึงและหลังจากนั้นมันจะรอจนกว่าไฟล์ทั้งหมดจะถูกถ่ายโอนไปแล้วลบด้านระยะไกล สิ่งนี้สำคัญเฉพาะเมื่อการถ่ายโอนถูกขัดจังหวะ


ฉันแน่ใจว่าสวยไม่มีตัวเลือกเหล่านี้จะเกี่ยวข้องกับสิ่งที่ลบจากผู้ส่งด้าน ทั้งหมดของพวกเขา (AFAIK) ที่เกี่ยวข้องกับการลบสิ่งจากผู้รับด้าน นอกจากนี้คุณยังพูดว่า: "ก่อนหน้าหมายถึงไฟล์ทั้งหมดจะถูกลบและจากนั้นคัดลอกไปยังไฟล์ rsync" - ถูกต้องหรือไม่ ฉันคาดหวังว่า--delete-beforeจะลบเฉพาะไฟล์ที่จำเป็นต้องหายไปไม่ใช่ทุกไฟล์! แต่ฉันเดาว่ามันเป็นไปได้ที่ rsync จะลบทุกอย่างออกไปแล้วทำการถ่ายโอนข้อมูล "ใหม่" (อาจไม่มีการเปลี่ยนแปลง) ...
Quuxplusone

1
อา "ลบจากด้านข้างของผู้ส่ง" จะได้รับการสนับสนุนโดย rsync --remove-source-filesแต่ชื่อของตัวเลือกที่เป็น
Quuxplusone

1

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

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

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