Rsync รวมเฉพาะไฟล์บางประเภทเท่านั้นยกเว้นบางไดเรกทอรี


14

ฉันต้องการซิงค์ไฟล์บางประเภทเท่านั้น (เช่น.py) และฉันต้องการแยกไฟล์ในบางไดเรกทอรี (เช่นvenv)

นี่คือสิ่งที่ฉันได้ลอง:

rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/

แต่มันไม่ทำงาน

ฉันกำลังคิดถึงอะไร

ฉันทำตามคำตอบของคำถามนี้ด้วยแต่ก็ไม่ได้ช่วยอะไร


ทำไมคุณต้องเริ่มต้น--include='*/'?
Charlie Parker

1
ผู้สร้างยานสั่งอย่างไรถ้าฉันมีไดเรกทอรีซ้ำที่ฉันต้องการส่งไฟล์ประเภทเดียวเท่านั้น ดูเหมือนว่าจะทำเฉพาะกับไดเรกทอรีเป้าหมายอาจเป็นเพราะการแยกครั้งล่าสุดที่แยกทุกอย่างออกไป
Charlie Parker

คำตอบ:


17

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='*/'และ--exclude='*'? ทำไม--exclude=venv/ --include='*.py'ไม่ทำงานเท่านั้น
CentAu

1
@CentAu ฉันเพิ่งปรับปรุงคำตอบด้วยการสนทนาที่
John1024

ผู้สร้างยานสั่งอย่างไรถ้าฉันมีไดเรกทอรีซ้ำที่ฉันต้องการส่งไฟล์ประเภทเดียวเท่านั้น ดูเหมือนว่าจะใช้งานได้เฉพาะกับไดเรกทอรีเป้าหมายอาจเป็นเพราะการแยกครั้งล่าสุดนั้นไม่รวมทุกอย่าง
Charlie Parker

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