Solución:
rsync
no funciona así. Se considera incluido cualquier archivo con un patrón de nombre de archivo que no coincida con ninguno de los patrones de inclusión o exclusión. En otras palabras, piense en el patrón de inclusión como una forma de anular el patrón de exclusión.
De los documentos (el énfasis es mío):
Rsync crea una lista ordenada de opciones de inclusión / exclusión como se especifica en la línea de comando. Rsync comprueba cada nombre de archivo y directorio con cada patrón de exclusión / inclusión a su vez. Se actúa sobre el primer patrón coincidente. Si es un patrón de exclusión, ese archivo se omite. Si es un patrón de inclusión, ese nombre de archivo no se omite. Si no se encuentra ningún patrón de inclusión / exclusión coincidente, el nombre del archivo no se saltará.
Por lo tanto, si desea incluir solo archivos específicos, primero debe incluir esos archivos específicos, entonces excluir todos los demás archivos:
--include="*/" --include="*.cfg" --exclude="*"
Un par de cosas a tener en cuenta aquí:
-
los
include
los patrones tienen que ir antes que las exclusiones, porque el primer patrón que coincide es el que se considera. Si el nombre del archivo coincide primero con el patrón de exclusión, se excluye. -
Debe incluir todos los subdirectorios individualmente, como
--include="/opt" --include="/opt/dir1"
etc. para todos los subdirectorios, o use –include = “* /” para incluir todos los directorios (no archivos). Opté por la segunda opción por brevedad.
Es peculiar y poco intuitivo. Por lo tanto, lea los documentos con atención (la sección “EXCLUIR PATRONES” en el vínculo) y use el --dry-run
o -n
opción para asegurarse de que hará lo que usted cree que debería hacer.
Si usted (como yo) tiene dificultades para entender la FILTER RULES
-sección en las páginas de manual, pero tiene un conocimiento básico de find
, podrías usar eso en su lugar.
Di que quieres sincronizar todo con una fecha específica (p. Ej. 2016-02-01
) en el nombre de archivo o en un nombre de directorio de /storage/data
para rsync_test
. Haz algo como esto:
cd /storage/data
find . -name '*2016-02-01*'
| rsync --dry-run -arv --files-from=- /storage/data /tmp/rsync_test