Você pode gerar um conjunto de regras de filtro na máquina de destino da seguinte maneira:
find /destdir/ -type d -printf 'show /%P/\nshow /%P/*\n'; echo 'hide *'
Você pode arrastar isso para os argumentos da linha de comando ou gravar o resultado em um arquivo e incluí-lo usando a regra de filtro merge
. Você provavelmente poderia fazer algo assim:
rsync srcdir/ target:/destdir/ --filter='merge '<(ssh target \
find /destdir/ -type d -printf 'show /%P/\nshow /%P/*\n'; echo 'hide *')
A ideia é fornecer uma lista de coisas que você deseja poder sincronizar (ou seja, mostrar para o rsync). Esta lista inclui diretórios e arquivos existentes diretamente . Qualquer coisa fora desses diretórios será ocultada da transferência, ou seja, não criada no destino.
Qualquer diretório ou arquivo existente no destino, mas não na origem, pode ser excluído se você também especificar --delete
. Se não for isso que você deseja, convém usar include
e exclude
em vez de show
e hide
.
Tudo isso é não testado , por isso não serei responsabilizado por qualquer perda de dados que isso cause a você.