Tengo dos carpetas:
- ORIGINAL/
- ORIGINAL_AND_MY_CHANGES /
Mi amigo tiene una copia de ORIGINAL /. Me gustaría generar MY_CHANGES.tgz: debe contener solo archivos nuevos / modificados de ORIGINAL_AND_MY_CHANGES / en comparación con ORIGINAL /. Entonces mi amigo puede descomprimirlo en su copia de ORIGINAL / y obtener ORIGINAL_AND_MY_CHANGES /. ¿Cómo puedo hacer esto?
PD: Lo intenté diffpero no puede guardar datos binarios y rsync --link-destgenera enlaces duros que son inútiles en el archivo.
PPS En mi caso, el tiempo de modificación no se puede usar para decidir qué archivo se cambió.

Respuestas:
Con rsync
Lo que está haciendo es esencialmente una copia de seguridad incremental: su amigo (su copia de seguridad) ya tiene los archivos originales y desea crear un archivo que contenga los archivos que ha cambiado de ese original.
Rsync tiene características para copias de seguridad incrementales.
-asignifica preservar todos los atributos (tiempos, propiedad, etc.).-csignifica comparar el contenido del archivo y no depender de la fecha y el tamaño.--compare-dest=/some/directorysignifica que los archivos que son idénticos en ese directorio y el árbol de origen no se copian. Tenga en cuenta que la ruta es relativa al directorio de destino.Rsync copia todos los directorios, incluso si no hay archivos terminados allí. Para deshacerse de estos directorios vacíos, ejecute
find -depth CHANGES_ONLY -type d -empty -delete(o sifindno tiene-deletey-empty, ejecutefind -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null).Luego haga el archivo desde el
CHANGES_ONLYdirectorio.El camino peatonal
Recorre el directorio con tu archivo. Omita archivos que sean idénticos al original. Cree directorios en el destino según sea necesario. Copiar archivos modificados.
fuente
ORIGINALy hacerORIGINAL_AND_MY_CHANGESuna bifurcación? LuegoCHANGESdescúbrelo con un comando scm.ORIGINAL, son las fuentes de la plataforma Android (3GB, 126000 archivos). Incluso ejecutar rsync tarda ~ 15-20 minutos. Creo que agregar todo esto bajo el control de la fuente tomará demasiado espacio y tiempo.El comando
produciría un ARCHIVO por lotes que contiene los cambios necesarios (sin modificar nada).
El parche podría aplicarse en otro sitio, donde toma el ARCHIVO por lotes, con
fuente