2009-06-03 15 views
17

Es posible especificar un intervalo de tiempo para que rsync solo funcione en archivos recientemente cambiados.¿Cómo puedo usar rsync para hacer copias de seguridad de archivos modificados en un período reciente?

Estoy escribiendo un script para hacer una copia de seguridad de los archivos recientemente agregados a través de SSH y rsync parece una solución eficiente. Mi problema es que mis directorios de origen contienen una enorme acumulación de archivos antiguos que no me interesan las copias de seguridad.

La única solución que he encontrado hasta ahora es hacer un descubrimiento con ctime para generar un archivo --files-from. Esto funciona, pero tengo que lidiar con algunas instalaciones antiguas con versiones de rsync que no son compatibles con --files-from. Estoy considerando generar --include-from patterns de la misma manera, pero me encantaría encontrar algo más elegante.

+0

Después de realizar su rsync inicial la próxima vez que lo llame, solo transferirá los archivos nuevos o modificados. Ese es el propósito de rsync. – lothar

+0

Otra opción sería reorganizar el diseño de su directorio para que los archivos que no desea realizar la copia de seguridad estén en una ruta diferente, de modo que pueda poner esa ruta en la lista de ignorar para rsync. – lothar

+0

Iba a sugerir el uso de la opción '-t' de rsync, pero eso no hace exactamente lo que se pidió – Hasturkun

Respuesta

26

Parece que puede especificar comandos shell en los argumentos a rsync (ver Remote rsync executes arbitrary shell commands)

por lo que he podido limitar correctamente los archivos que rsync mira usando:

rsync -av remote_host:'$(find logs -type f -ctime -1)' local_dir 

Este busca cualquier archivo modificado en el último día (-tiempo -1) y luego sincroniza esos en local_dir.

No estoy seguro de si esta característica es por diseño, pero aún estoy investigando la documentación.

+0

Solo quería dejar caer una línea que me resultó muy útil para un script de importación de datos que estoy usando. ¡Gracias! – Matthew

+1

Ten cuidado con esto; si tiene muchos archivos que coinciden, los resultados del hallazgo incrustado pueden coincidir con el límite de longitud de línea de comandos del shell. Me sucedió. – GaryO

+0

Esto no preservará la estructura del directorio – carlosvini

1

¿Qué tal crear un directorio temporal, enlazar o enlazar los archivos, y luego sincronizar eso?

2

¿Por qué no simplemente aprovechar al máximo la copia de seguridad de todo el directorio una vez y aprovechar la copia de seguridad incremental proporcionada por rsync y rdiff y sus primos, no perderá el espacio de disco donde están respaldados porque van a ser perpetuamente sin cambios.

La copia de seguridad de todo es más sencilla y tiene un riesgo de errores sustancialmente menor. Intentar hacer una copia de seguridad selectiva de algunos archivos y no de otros es una receta para no realizar copias de seguridad de lo que necesita sin darse cuenta, y luego grabarse cuando no puede restaurar un archivo crítico.

De lo contrario, debe reorganizar su directorio de origen para que haya menos "toma de decisiones" en su script de respaldo.

+0

Normalmente, estoy de acuerdo sobre el riesgo de errores, pero nunca tendré uso para los archivos más antiguos (registros y otros registros que nunca cambiarán). Simplemente tomaría el control, pero la idea de tener que descargar y reprocesar regularmente varios gigabytes de hinchazón no deseada es lo que provocó esta pregunta en primer lugar. La reorganización es probablemente la solución: no puedo cambiar la estructura existente, pero puedo configurar un directorio temporal como sugirió Hasturkun. – Ken

+0

Para mí, quiero transferir de remoto a local, procesar los archivos, luego eliminar los antiguos (mtime +30) de local para ahorrar espacio. Naive rsync vuelve a descargar los viejos la próxima vez porque ahora faltan en el local. – GaryO

1

¿Puedo sugerirle que suelte rsync y vea rdiff-backup?

+0

Gracias, echaré un vistazo. Lo miré anteriormente pero el problema de compatibilidad con CIFS me desalentó. (http://rdiff-backup.nongnu.org/FAQ.html#cifs) – Ken

Cuestiones relacionadas