Quiero sincronizar solo ciertos tipos de archivos (por ejemplo .py) y quiero excluir archivos en algunos directorios (por ejemplo venv).
Esto es lo que he intentado:
rsync -avz --include='*/' --exclude='venv/' --include='*.py' --exclude='*' /tmp/src/ /tmp/dest/
Pero no funciona.
¿Qué me estoy perdiendo?
También seguí la respuesta a esta pregunta pero no ayudó.

--include='*/'?Respuestas:
venv/debe excluirse antes de*/incluirlo:La sutileza es que
rsyncprocesa las reglas en orden y gana la primera regla coincidente. Entonces, si--include='*/'es antes--exclude='venv/', entonces el directoriovenv/está incluido por--include='*/'y la regla de exclusión nunca es consultada.¿Podríamos simplificar esto?
El valor predeterminado es incluir archivos / directorios. Entonces, considere:
Esto incluiría todo excepto archivos o directorios debajo
venv/. Sin embargo, solo quieres.pyarchivos. Eso significa que tenemos que excluir explícitamente otros archivos con--exclude='*'.--exclude='*'excluye tanto archivos como directorios. Entonces, si especificamos--exclude='*', todos los directorios se excluirían y solo se encontrarían los.pyarchivos en el directorio raíz..pylos archivos en subdirectorios nunca se encontrarían porquersyncno busca en directorios que están excluidos. Por lo tanto, si lo hemos hecho--exclude='*', debemos precederlo--include='*/'para garantizar que se exploren los contenidos de todos los directorios.fuente
--include='*/'y--exclude='*'? ¿Por qué solo--exclude=venv/ --include='*.py'no funciona?