บอกว่าฉันมี
SRC
001.jpg
002.jpg
001.txt
a.zip
DEST
hello.jpg
rsync -d --delete SRC:{*.jpg,*.txt} DEST
มันไม่ได้ลบ hello.jpg จาก DEST ความคิดใด ๆ วิธีเก็บถาวรหรือไม่
บอกว่าฉันมี
SRC
001.jpg
002.jpg
001.txt
a.zip
DEST
hello.jpg
rsync -d --delete SRC:{*.jpg,*.txt} DEST
มันไม่ได้ลบ hello.jpg จาก DEST ความคิดใด ๆ วิธีเก็บถาวรหรือไม่
คำตอบ:
เหตุผลที่คำสั่งของคุณไม่ทำงานอธิบายโดยหน้าคู่มือสำหรับ rsync (เพิ่มการเน้น):
--ลบ
สิ่งนี้จะบอก rsync ให้ลบไฟล์ที่ไม่เกี่ยวข้องออกจากด้านที่รับ (ไฟล์ที่ไม่ได้อยู่ในฝั่งที่ส่ง) แต่สำหรับไดเรกทอรีที่กำลังซิงโครไนซ์เท่านั้น คุณต้องขอให้ rsync ส่งไดเรกทอรีทั้งหมด (เช่น "dir" หรือ "dir /") โดยไม่ต้องใช้ wildcard สำหรับเนื้อหาของไดเรกทอรี (เช่น "dir / *") เนื่องจาก wildcard ถูกขยายโดยเชลล์และ rsync จึงได้รับ ร้องขอให้โอนไฟล์แต่ละไฟล์ไม่ใช่ไดเรกทอรีหลักของไฟล์ ไฟล์ที่ถูกแยกออกจากการถ่ายโอนนั้นจะถูกแยกออกจากการถูกลบด้วยเว้นแต่ว่าคุณจะใช้ตัวเลือก --delete-แยกหรือทำเครื่องหมายกฎว่าเป็นการจับคู่เฉพาะในฝั่งการส่งเท่านั้น (ดูตัวดัดแปลงรวม / แยกในส่วนกรองกฎ)
ดังนั้นเมื่อคุณวิ่ง
$ rsync -d --delete SRC:{*.jpg,*.txt} DEST
ไฟล์ที่ไม่ต้องการใน DEST จะไม่ถูกลบเนื่องจากคุณยังไม่ได้ขอให้ซิงค์ไดเรกทอรี แต่เพียงแค่ไฟล์จำนวนหนึ่งเท่านั้น หากต้องการรับผลลัพธ์ที่คุณต้องการลองทำดังนี้:
rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/
ขอให้สังเกตว่าคำสั่งของการรวมและไม่รวมคำสั่งเรื่อง โดยพื้นฐานแล้วแต่ละไฟล์จะถูกตรวจสอบกับรูปแบบการรวมหรือไม่รวมตามลำดับที่ปรากฏ ดังนั้นไฟล์ที่มีนามสกุล. jpg หรือ. txt จะถูกซิงค์เนื่องจากตรงกับรูปแบบ "รวม" ก่อนที่จะตรงกับรูปแบบที่ยกเว้น "*" ทุกอย่างอื่นถูกแยกออกโดย--exclude '*'
รูปแบบ --delete-excluded
ตัวเลือกที่ช่วยให้มั่นใจว่าไฟล์ที่ได้รับการยกเว้นแม้กระทั่งในด้าน DEST จะถูกลบออก
--delete-excluded
ฉันสงสัยว่าคุณไม่ต้องการ ไม่ได้มีเพียง*.jpg
และ*.txt
อาจถูกลบในด้านปลายทาง ด้วยมันไฟล์ที่ไม่เกี่ยวข้องจะถูกลบเช่นกัน คุณอาจจะสนใจในเรื่องนี้สอนเกี่ยวกับฟิลเตอร์ rsync