Você deve conseguir isso com rsync , usando o sinalizador --existing :
--existing skip creating new files on receiver
dado
$ tree -a A/ B/
A/
├── bar
├── baz
├── foo
└── .hidden
B/
├── bam
├── baz
├── foo
└── .hidden
0 diretórios, 8 arquivos
em que baz , foo e .hidden são comuns, mas bar existe somente na origem e bam apenas no destino, então (nota: incluímos o verboso -v e -n "run dry" flag com a finalidade de ilustração):
$ rsync -avn --existing A/ B/
sending incremental file list
.hidden
baz
foo
sent 152 bytes received 25 bytes 354.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)
atualiza apenas baz , foo e .hidden . (Arquivos que existem apenas no destino são ignorados por padrão).
Você pode verificar se sem --existing , bar também seria copiado:
$ rsync -avn A/ B/
sending incremental file list
.hidden
bar
baz
foo
sent 155 bytes received 28 bytes 366.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)