rsync ไม่สามารถลบไดเรกทอรีที่ไม่ว่างเปล่าได้


10

rsync cannot delete non-empty directoryเมื่อซิงค์สำรองข้อมูลระยะไกลของฉันฉันจะได้รับข้อผิดพลาด

ฉันรู้สาเหตุ: ฉันได้แยกบางไฟล์และเมื่อ rsync พยายามที่จะลบไดเรกทอรีระยะไกลเพราะมันไม่ได้อยู่ในพื้นที่มันไม่สามารถเพราะมันไม่ว่างเปล่า หากไม่มีการยกเว้นไดเรกทอรีจะถูกทำให้ว่างเปล่า

ฉันยังรู้ว่าฉันสามารถกำจัดปัญหาโดยใช้ - ลบ - ยกเว้น แต่นั่นไม่ใช่สิ่งที่ฉันต้องการ

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

นั่นหมายความว่าหากไดเรกทอรีไม่มีอยู่ในเครื่องอีกต่อไปควรลบออกแม้ว่าจะมีไฟล์ที่ถูกแยกออก

เป็นไปได้ไหมที่จะตั้งค่า rsync เพื่อทำสิ่งนี้ให้สำเร็จ

คำตอบ:


5

ใช้โมดิpฟายเออร์:

p บ่งชี้ว่ากฎนั้นเน่าเสียง่ายซึ่งหมายความว่ามันจะถูกละเว้นในไดเรกทอรีที่จะถูกลบ ตัวอย่างเช่นกฎเริ่มต้นของตัวเลือก -C ที่ยกเว้นสิ่งต่าง ๆ เช่น "CVS" และ "* .o" ถูกทำเครื่องหมายเป็นเน่าเสียง่ายและจะไม่ป้องกันไดเรกทอรีที่ถูกลบในแหล่งที่มาจากการถูกลบบนปลายทาง

ตัวอย่างเช่นฉันใช้-Fตัวเลือกซึ่ง "บอก rsync ให้ค้นหาไฟล์ .rsync-filter ต่อไดเรกทอรีซึ่งถูกโปรยผ่านลำดับชั้นและใช้กฎของพวกเขาในการกรองไฟล์ในการถ่ายโอน"

ฉัน.rsync-filterมีเส้นแบบนี้เพื่อกรอง "มูลสัตว์" ที่ Macs ทิ้งไว้:

-p .DS_Store
-p ._*

หากใช้excludeแทนที่จะเป็นเพียงแค่-เพิ่มเครื่องหมายจุลภาค ตัวอย่างเช่น :

exclude,p .DS_Store
exclude,p Thumbs.db

0

คุณสามารถใช้โมดิฟายเออร์ของรูปแบบการรวม / ไม่รวม, Add -s ในรูปแบบที่คุณใช้ มันบอก rsync ว่าไม่รวมกฎสำหรับฝั่งส่งเท่านั้น

-n: ตรวจสอบเฉพาะสิ่งที่จะลบใน desc ไม่ต้องลบรูปแบบ: * .sh desc: / home / kg / tmp

จุดมุ่งหมาย: ต้องการลบไฟล์ท้ายของ. sh บน desc แต่ถ้าคุณทำเช่นนี้คุณจะไม่สามารถลบบน desc: rsync -rvz --exclude * .sh --delete -n conkg kg@192.168.31.202: / บ้าน / กิโลกรัม / tmp

ควรเปลี่ยนเป็น: กรุณาเพิ่ม -n เมื่อคุณทดสอบทดสอบ: rsync -rvz --exclude-from del.txt -n - ลบ conkg kg@192.168.31.202: / home / kg / tmp ลบจริง: rsync -rvz - แยกออกจาก del.txt - ลบ conkg kg@192.168.31.202: / home / kg / tmp cat del.txt -s * .sh

หรือ: rsync -rvz --exclude -s * .sh - ลบ conkg kg@192.168.31.202: / home / kg / tmp


-2

เพียงใช้ตัวเลือก '--max-size = xx' และ '--delete' ของ rsync มันจะทำทุกอย่างโดยอัตโนมัติและตอบสนองความต้องการของคุณ


อย่างน้อยที่สุดมันก็จะเป็นวิธีการแก้ปัญหา ฉันต้องการข้ามไฟล์ mov, avi และ cr2 อย่างสมบูรณ์เพราะโดยทั่วไปมีขนาดใหญ่มาก แต่สิ่งที่ฉันอัปโหลดไปแล้วบนบรรทัดที่เร็วขึ้นควรจะถูกเก็บไว้ก่อน ตอนนี้ปัญหาคือไฟล์ JPG ที่ใหญ่ที่สุดนั้นใหญ่กว่าไฟล์ CR2 ที่เล็กที่สุดดังนั้นวิธีนี้จึงไม่เหมาะ ฉันต้องการใช้คุณสมบัติการแยกเพื่อกรองชื่อไฟล์
marlar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.