GNU/Linux >> Tutoriales Linux >  >> Linux

Rsync, ¿incluir solo ciertos tipos de archivos excluyendo algunos directorios?

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 probado:

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ó.

Respuesta aceptada:

venv/ debe ser excluido antes */ se incluye:

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

La sutileza es que rsync procesa las reglas en orden y gana la primera regla coincidente. Entonces, si --include='*/' está antes de --exclude='venv/' , luego el directorio venv/ está incluido por --include='*/' y la regla de exclusión nunca se consulta.

¿Podríamos simplificar esto?

¿Por qué necesitamos --include='*/' y --exclude='*' ? ¿Por qué no es --exclude=venv/ --include='*.py' suficiente?

El valor predeterminado es incluir archivos/directorios. Entonces, considere:

rsync -avz --exclude='venv/' --include='*.py' source target

Esto incluiría todo excepto archivos o directorios bajo venv/ . Sin embargo, solo quieres .py archivos Eso significa que tenemos que excluir explícitamente otros archivos con --exclude='*' .

--exclude='*' excluye ambos archivos y directorios. Entonces, si especificamos --exclude='*' , entonces se excluirían todos los directorios y solo el .py archivos si se encontraría el directorio raíz. .py los archivos en los subdirectorios nunca se encontrarían porque rsync no busca en los directorios que están excluidos. Por lo tanto, si tenemos --exclude='*' , debemos precederlo con --include='*/' para asegurarse de que se exploran los contenidos de todos los directorios.


Linux
  1. Cómo tar (comprimir) archivos, excluyendo ciertos archivos o directorios

  2. ¿Compara directorios pero no contenido de archivos?

  3. rsync copia solo ciertos tipos de archivos usando la opción de inclusión

  4. tar/gzip excluyendo ciertos archivos

  5. cp solo archivos, saltando directorios

Cómo usar rsync para excluir archivos y directorios en la transferencia de datos

Cómo excluir archivos y directorios con Rsync

Cómo hacer una copia de seguridad de archivos y directorios usando Rsync en Linux

Mantener los archivos y directorios de Linux sincronizados con rsync

¿Diff -r solo para ciertos tipos de archivos?

Encuentre archivos e imprima solo sus directorios principales