rsync --delete ไม่ทำงาน
ระบบปฏิบัติการคือ Debian 10, rsync เวอร์ชัน 3.1.3 ฉันใช้ rsync ดังนี้:
time rsync -ar --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
วิธีนี้จะคัดลอกไฟล์ แต่ไม่ได้ลบสิ่งที่ถูกลบออกไป (ไม่ว่าจะลบออกจาก src ทั้งหมดหรือในกรณีของฉันลบออกจาก filelist.txt) นั่นเป็นปัญหาใหญ่ วิธีแก้ปัญหาเดียวที่ฉันพบคือเพียงแค่หาปลายทางทั้งหมดและคัดลอกทุกอย่างซ้ำอีกครั้ง แต่ต้องใช้เวลานานมากและโดยทั่วไปแล้วจะปฏิเสธจุดที่ใช้ rsync ในตอนแรก
นี่คือบั๊กหรือไม่? ฉันจะทำให้ rsync ทำงานอย่างถูกต้องได้อย่างไรโดยเคารพแฟล็ก --delete อย่างที่ควรจะเป็น
แก้ไข:
ตัวอย่างเช่น:
- หาก filelist.txt cotains "foo" แล้ว / path / to / dest จะมี "foo"
- ถ้า filelist.txt cotains "foo" และ "bar" จากนั้น / path / to / dest จะมี "foo" และ "bar"
- หาก filelist.txt cotains "foo" "bar" และ "bat" แล้ว / path / to / dest จะมี "foo", "bar" และ "bat"
- ฯลฯ
สมมติว่า "foo" "bar" "bat" etc เป็นไดเร็กทอรี
คำตอบ
คุณต้องบอกให้ rsync ลบอาร์กิวเมนต์ที่หายไป:
rsync -arv --delete-missing-args --delete --info=progress2 --files-from=filelist.txt . /path/to/dest
- ดังนั้นถ้าคุณลบไดเรกทอรี
fooมันก็จะถูกลบออกในด้วย/path/to/dest--delete-missing-args foofilelist.txtยังคงต้องมีการระบุไว้ใน--deleteอาร์กิวเมนต์จะต้องอนุญาตให้ rsync จะลบไฟล์ในfooโฟลเดอร์
ไม่rsyncจะไม่ลบไฟล์ / dirs เพียงเพราะรายการไฟล์ไม่มีไฟล์เหล่านั้นหรือว่างเปล่า
หากคุณกำลังใช้งาน--files-fromจะพยายามซิงค์เฉพาะไฟล์ที่แสดงรายการจากต้นทางถึงปลายทาง
--files-fromมันจะไม่ลบไฟล์เพียงเพราะพวกเขาจะหายไปจากรายการไฟล์ที่ส่งผ่านไปยัง
สำหรับ - ลบในการทำงานคุณต้องใช้เส้นทางต้นทางจริง .. เช่นนั้น
rsync -ar --delete path/to/src path/to/destination