venv/จะต้องยกเว้นก่อน */รวม:
rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
ความละเอียดอ่อนคือการrsyncประมวลผลกฎตามลำดับและกฎการจับคู่แรกชนะ ดังนั้นหากเคย--include='*/'มีมาก่อนจะมีการรวม--exclude='venv/'ไดเรกทอรีvenv/ไว้ด้วย--include='*/'และกฎการยกเว้นจะไม่ได้รับการพิจารณา
เราจะทำให้สิ่งนี้ง่ายขึ้นได้ไหม
ทำไมเราต้องการ--include='*/'และ--exclude='*'? ทำไมจึงไม่--exclude=venv/ --include='*.py'เพียงพอ
ค่าเริ่มต้นคือการรวมไฟล์ / ไดเรกทอรี ดังนั้นให้พิจารณา:
rsync -avz --exclude='venv/' --include='*.py' source target
venv/นี้จะรวมถึงทุกอย่างยกเว้นไฟล์หรือไดเรกทอรีภายใต้ อย่างไรก็ตามคุณต้องการ.pyไฟล์เท่านั้น นั่นหมายความว่าเราจะต้องชัดเจนยกเว้นไฟล์อื่น ๆ --exclude='*'ที่มี
--exclude='*'แยกทั้งไฟล์และไดเรกทอรี ดังนั้นถ้าเราระบุ--exclude='*'ไดเรกทอรีทั้งหมดจะถูกแยกออกและมีเพียง.pyไฟล์ที่ไดเรกทอรีรูทจะพบ .pyไฟล์ในไดเรกทอรีย่อยจะไม่พบเพราะrsyncไม่ได้ดูในไดเรกทอรีที่ถูกแยกออก ดังนั้นถ้าเรามี --exclude='*'เราจำเป็นต้องนำหน้าด้วย--include='*/'เพื่อให้แน่ใจว่าเนื้อหาของไดเรกทอรีทั้งหมดได้รับการสำรวจ
--include='*/'?