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é diff
pero no puede guardar datos binarios y rsync --link-dest
genera 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.
-a
significa preservar todos los atributos (tiempos, propiedad, etc.).-c
significa comparar el contenido del archivo y no depender de la fecha y el tamaño.--compare-dest=/some/directory
significa 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 sifind
no tiene-delete
y-empty
, ejecutefind -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).Luego haga el archivo desde el
CHANGES_ONLY
directorio.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
ORIGINAL
y hacerORIGINAL_AND_MY_CHANGES
una bifurcación? LuegoCHANGES
descú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