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.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-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 si find
no tiene -delete
y -empty
, ejecute find -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.
cd ORIGINAL_AND_MY_CHANGES
find . \! -type d -exec sh -c '
for x; do
if cmp -s "$x" "../ORIGINAL/$x"; then continue; fi
[ -d "../CHANGES_ONLY/$x" ] || mkdir -p "../CHANGES_ONLY/${%/*}"
cp -p "$x" "../CHANGES_ONLY/$x"
done
' {} +