rsync --delete ไม่ทำงาน

Sep 15 2020

ระบบปฏิบัติการคือ 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 เป็นไดเร็กทอรี

คำตอบ

3 laktak Sep 24 2020 at 14:24

คุณต้องบอกให้ 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โฟลเดอร์
SandeepKothari Sep 28 2020 at 15:16

ไม่rsyncจะไม่ลบไฟล์ / dirs เพียงเพราะรายการไฟล์ไม่มีไฟล์เหล่านั้นหรือว่างเปล่า

หากคุณกำลังใช้งาน--files-fromจะพยายามซิงค์เฉพาะไฟล์ที่แสดงรายการจากต้นทางถึงปลายทาง

--files-fromมันจะไม่ลบไฟล์เพียงเพราะพวกเขาจะหายไปจากรายการไฟล์ที่ส่งผ่านไปยัง

สำหรับ - ลบในการทำงานคุณต้องใช้เส้นทางต้นทางจริง .. เช่นนั้น

rsync -ar --delete path/to/src path/to/destination