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='*/'
?