Sim, existe um programa de código aberto chamado Unison que faz exatamente o que você está descrevendo: link . Ele lembra um valor de hash para cada arquivo que você está sincronizando. Se um arquivo se move, o Unison pode dizer que é o mesmo arquivo, porque ainda tem o mesmo valor de hash. Isso pode ser um pouco demorado se tiver que recalcular hashes em um grande número de arquivos, mas provavelmente consome menos tempo do que transmitir todos os arquivos em uma conexão lenta. Eu uso o Unison há anos e é ótimo. Ele é executado no Windows e no Unix.