Primeiro, uma advertência: assumir a identidade com base em uma soma de verificação é muito perigoso. Não recomendado.
Usar uma soma de verificação como um filtro para remover não-duplicados definidos é OK.
Se eu estivesse fazendo isso, eu me aproximaria assim:
-
Crie uma lista de arquivos com base no comprimento (comprimento, caminho completo)
-
Analise essa lista em busca de possíveis tamanhos duplicados.
-
Quaisquer correspondências são duplicatas possíveis e eu compararia os arquivos suspeitos apropriadamente, se possível.
A razão para usar comprimentos é que esta informação está disponível muito rapidamente sem varrer o arquivo byte-by-by, como é normal nas estatísticas do sistema de arquivos para acesso rápido.
Você pode adicionar outro estágio comparando somas de verificação (em arquivos de tamanho similar) se achar que é mais rápido do que comparar arquivos diretamente, usando uma abordagem semelhante (somas de verificação calculadas uma vez). Use uma abordagem semelhante (comece na lista de comprimentos correspondentes e calcule somas de verificação para essas).
O cálculo da soma de verificação só beneficia você se houver vários arquivos com o mesmo tamanho e, mesmo assim, uma comparação direta byte a byte provavelmente encontrará não correspondências muito rapidamente.