venv/
hariç tutulması gerekir önce */
dahildir:
rsync -avz --exclude='venv/' --include='*/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
Bu incelik, rsync
kuralları 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 .py
dosya 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 .py
kök dizindeki dosyalar bulunur. Dışlanan .py
dizinlere 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='*/'
?