Eu criei um sistema de implantação automatizado em C # para um dos meus clientes. Esse problema parece semelhante, exceto em escala.
Coisas que foram atendidas no ADS:
- Check-out automático do SVN.
- Percorra todas as pastas.
- Cada pasta pode ser incluída ou excluída da distribuição.
- Se uma pasta for incluída, todos os arquivos e subpastas também serão incluídos. O mesmo vale para exclusão.
- Assim como a inclusão, cada pasta pode ser realocada para um novo local na pasta de implantação.
- Tudo foi arrastar e soltar (felizmente, os scripts de implantação não precisam ser modificados com frequência).
- A parte mais crítica foi a comparação de arquivos binários para copiar apenas arquivos modificados. < - Isso parece ser a coisa mais importante para você também. Como eu estava lidando apenas com arquivos de código como C # ou arquivos de código perl, essa foi uma verificação fácil:
- Capture arquivos à esquerda e à direita
- Remova todos os espaços em branco.
- Compare os arquivos de um byte de cada vez.
No seu caso, a menos que os arquivos sejam enormes, você pode usar a mesma abordagem. Se os arquivos são enormes (supondo que estes são arquivos de dados), uma simples comparação de cabeçalho / rodapé deve fazer o truque.
We were thinking of having some unique identifier in each file but that idea never got traction as where would you store the unique identifier for different file types?
Isto é o que eu tinha começado também, mas o meu problema não era tão sério, então eu o descartei. Tecnicamente, cada objeto FileInfo foi agrupado em uma classe especializada que tinha um campo específico do tipo GUID. Eu estava salvando essa matriz de classes serializadas em arquivos XML.
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>