venv/hariç tutulması gerekir önce */ dahildir:
rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
Bu incelik, rsynckuralları sırayla işleyen ve ilk eşleşen kuralın kazandığıdır. Bu nedenle, --include='*/'daha önce varsa , --exclude='venv/'dizin venv/tarafından dahil edilir --include='*/'ve exclude kuralına hiçbir zaman başvurulmaz.
Bunu basitleştirebilir miyiz?
Neden ihtiyacımız var --include='*/'ve --exclude='*'? Neden --exclude=venv/ --include='*.py'yeterli değil ?
Varsayılan dosya / dizinleri dahil etmektir. Bu yüzden şunu düşünün:
rsync -avz --exclude='venv/' --include='*.py' source target
Bu, altındaki dosyalar veya dizinler hariç her şeyi içerir venv/. Ancak, yalnızca .pydosya istersiniz . Bu, diğer dosyaları açıkça hariç tutmamız gerektiği anlamına gelir --exclude='*'.
--exclude='*'dışlayan hem dosyaları ve dizinleri. Bu nedenle, belirtirsek --exclude='*', tüm dizinler hariç tutulur ve yalnızca .pykök dizindeki dosyalar bulunur. Dışlanan .pydizinlere bakmadığından alt dizinlerdeki dosyalar hiçbir zaman bulunamaz rsync. Bu nedenle, eğer varsa --exclude='*', --include='*/'tüm dizinlerin içeriğinin araştırılmasını sağlamak için ondan önce gelmeliyiz.
--include='*/'?