Se eu estou entendendo corretamente, o rsync é definitivamente o que você quer. Digamos que você tenha uma fonte de:
- Pasta pai
- Subpasta A
- Arquivo A1
- Arquivo A2
- Arquivo A3
- Subpasta B
- Arquivo B1
- Arquivo B2
- Arquivo B3
- Subpasta A
e um destino de:
- Pasta pai
- Pasta A
- Arquivo A1
- Pasta B
- Arquivo B2
- Pasta A
Se você quiser copiar apenas os arquivos que ainda não existem no destino, o sinalizador --ignore-existing (rsync -av --ignore-existing / source_user @ host: / dest) copiará somente arquivos que ainda não estão no diretório de destino. Isso copiará os arquivos A2 A3, B1 e B3 para o local apropriado no novo host. No entanto, se você estiver querendo copiar os arquivos A1 e B2, se eles tiverem sido atualizados, o sinalizador --ignore-existing irá copiar todos os arquivos novos e atualizados para o destino, mas não copiará nenhum arquivo que não tenha sido modificado (com base no tamanho e modificação de data e hora por padrão). Existem muitas opções adicionais que podem ser encontradas na página do manual do rsync .
Como nota, os sinalizadores -av são para --archive e --verbose. O modo de arquivo permite a recursão, preserva o máximo possível de metadados de arquivo (como propriedade, registros de data e hora, etc.) e copia links simbólicos. Verbose apenas permite notificação de progresso e outras informações de cópia, pois o rsync é silencioso por padrão. Você pode adicionar vs adicionais para mais informações (mais de dois são destinados a depurar o software).