ฉันทำการทดสอบฟังก์ชันการทำงานที่ จำกัด เท่านั้นดังนั้นโปรดใช้ความระมัดระวังกับคำสั่งนี้ (- พยายามเรียกใช้):
rsync -avPr --ignore-existing --remove-source-files src/ dest
โปรดทราบว่าการติดตาม / เนื่องจากจะมีการคืนค่าเป็น src แทนการคัดลอก src เองซึ่งควรรักษาเส้นทางที่มีอยู่ของคุณ
โดยการใช้แฟล็ก --ignore- ที่มีอยู่ร่วมกับ --remove-source-files คุณจะลบเฉพาะไฟล์จาก src ที่ซิงค์ 'จาก src ไปยังปลายทางนั่นคือไฟล์ที่ไม่เคยมีอยู่ในปลายทางเท่านั้น
สำหรับการลบไฟล์ที่ไม่ซิงค์กันนั่นคือไฟล์ที่มีอยู่แล้วในปลายทาง / ตามที่อยู่ใน src / คุณสามารถใช้:
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
หรือ
find src -type f -exec bash -c 'cmp -s "$0" "${0/#src/dest}" && rm "$0"' {} \;
ถ้าชื่อไฟล์อาจมีช่องว่าง / บรรทัดใหม่ / ... เกี่ยวกับความคิดเห็นของ Gilles เกี่ยวกับตัวละครพิเศษนั่นเป็นสิ่งที่ต้องคำนึงถึงและมีวิธีแก้ไขมากมายสิ่งที่ง่ายที่สุดคือการส่งผ่าน -i ถึง rm ซึ่งจะแจ้งเตือนก่อนการลบทั้งหมด โดยมีเงื่อนไขว่า src / หรือพา ธ พาเรนต์ถูกจัดเตรียมเพื่อค้นหาอย่างไรก็ตามพา ธ ที่ผ่านการรับรองโดยสมบูรณ์ควรส่งผลให้ชื่อไฟล์ทั้งหมดถูกจัดการอย่างเหมาะสมโดยทั้งคำสั่ง diff และ rm โดยไม่มีการอ้างถึง