Com rsync
O que você está fazendo é essencialmente um backup incremental: seu amigo (seu backup) já possui os arquivos originais e você deseja criar um arquivo que contenha os arquivos que você alterou desse original.
O Rsync possui recursos para backups incrementais.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-a
significa preservar todos os atributos (horários, propriedade etc.).
-c
significa comparar o conteúdo do arquivo e não confiar na data e no tamanho.
--compare-dest=/some/directory
significa que arquivos idênticos nesse diretório e na árvore de origem não são copiados. Observe que o caminho é relativo ao diretório de destino.
O Rsync copia todos os diretórios, mesmo que nenhum arquivo termine lá. Para se livrar desses diretórios vazios, execute find -depth CHANGES_ONLY -type d -empty -delete
(ou se você find
não tiver -delete
e -empty
execute find -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).
Em seguida, faça o arquivo morto a partir do CHANGES_ONLY
diretório
O caminho para pedestres
Atravesse o diretório com seu arquivo. Ignore arquivos idênticos ao original. Crie diretórios no destino, conforme necessário. Copie os arquivos alterados.
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
' {} +