Copias de security giratorias con RSync y CP – Excluye no funciona perfectamente

Mi secuencia de commands se ve esencialmente así:

cp -al $yesterdays_snapshot $todays_snapshot rsync -vadlH --exclude-from excludes.rsyc $source $todays_snapshot 

Esto funciona muy bien excepto por un problema:

Si ayer no tenía excluye, pero entonces hoy me doy count de que / directory / caching debe ser excluido, rsync deja de mirar la caching, pero el cp continúa copiándolo hacia adelante cada día. Después de un time esto significa que las instantáneas tendrán el contenido de / directory / cache de hace un año, que no es el comportamiento deseado. No queremos / directory / cache en la instantánea en absoluto.

Sería mejor si rsync eliminado / directory / caching de la más reciente instantánea.

Por otra parte, sería bueno si cp sabía que no copyr los files que figuran en excludes.rsync

Puedo escribir una function que borre manualmente cualquier file excluye de todays_snapshot, pero tomará un poco de hacking, y esto se siente como el tipo de problema que tiene una respuesta ya hecha.

¿Alguna sugerencia?

Lo que está tratando de hacer con cp y rsync es crear sets de copys de security con files idénticos vinculados entre sí.

Esto puede ser muy útil, es por eso que los desarrolladores de rsync ya de esto e incluye funcionalidad nativa directamente dentro de rsync para lograr esto.

Esta funcionalidad es proporcionada por la opción --link-dest .

Básicamente su command rsync se verá como este rsync -va sourcepath newsnapshotpath --link-dest previoussnapshot . Rsync enlazará todos los files idénticos a la instantánea anterior y copyrá los files nuevos según sea necesario. Los files que no estén presentes en la fuente no serán enlazados / copydos.

En mi respuesta a otra pregunta mostré una serie de commands que podría emitir para ver exactamente cómo funciona todo esto.

Para que conste, si desea evitar redevise la rueda, es posible que también desee echar un vistazo a dirvish. Que es una copy de security diseñada específicamente para aprovechar la function --link-dest .