Sobre o projeto

findDupes é uma utilidade de linha de comando escrita em Go que localiza arquivos duplicados por hash de conteúdo, e não por nome de arquivo, portanto cópias com nomes diferentes ainda são detectadas. Ele pesquisa um ou mais diretórios e executa hashing de forma concorrente. A varredura ocorre em estágios para evitar ler cada arquivo na íntegra. Primeiro, ela percorre recursivamente as raízes fornecidas e coleta o caminho e o tamanho de cada arquivo regular; arquivos cujo tamanho é único entre os descobertos são descartados, pois não podem ter uma cópia idêntica. Os candidatos restantes recebem hashing nos primeiros 4 KiB por meio de um pool de workers, e apenas os arquivos que compartilham esse hash de prefixo são lidos novamente e hasheados completamente com SHA-256. Arquivos com o mesmo hash completo são reportados como duplicados. As verificações de tamanho e prefixo atuam puramente como filtros, de modo que arquivos com tamanhos ou hashes de prefixo diferentes nunca são completamente hasheados um contra o outro. O tratamento das raízes é deliberadamente cuidadoso. As raízes são convertidas para caminhos absolutos, com resolução de symlinks, antes da varredura; raízes repetidas ou sobrepostas (como o mesmo diretório fornecido duas vezes, ou um diretório e seu subdiretório) são deduplicadas, incluindo grafias diferentes ou caminhos que se resolvem pelo mesmo symlink. Symlinks encontrados dentro de um diretório varrido não são seguidos; apenas arquivos regulares são coletados, e múltiplos caminhos para o mesmo arquivo vinculado por hard link são coletados uma única vez. Um arquivo que não puder ser lido durante o hashing é registrado e ignorado; se uma raiz não puder ser resolvida ou percorrida, os arquivos encontrados sob outras raízes ainda são processados, mas o comando retorna um erro após imprimir os resultados. Ctrl-C e SIGTERM cancelam uma varredura ativa, com o trabalho sendo interrompido entre leituras de sistema de arquivos. Os grupos de duplicatas são impressos com seu hash SHA-256, tamanho do arquivo e caminhos; os caminhos dentro de cada grupo e os próprios grupos são ordenados para produzir uma saída reproduzível. As flags incluem -v/--verbose para progresso durante a varredura, -w/--workers para o número de workers de hashing concorrentes (padrão: número de CPUs), --json para objetos JSON em formato newline-delimited com campos hash, size e paths, --stats para estatísticas da varredura no stderr, e --version. As estatísticas abrangem arquivos descobertos, arquivos filtrados por tamanho, candidatos a hash de conteúdo, grupos de duplicatas e arquivos duplicados; escrever as estatísticas no stderr mantém a saída JSON segura para encanamento em ferramentas como jq. A instalação requer Go 1.25 ou posterior e pode ser feita com go install github.com/mojotx/findDupes@latest, ou clonando o repositório e executando go install -v ./.... O repositório inclui fluxos de CI e CodeQL, e sua matriz de testes executa a suíte com race detection habilitado no Linux, macOS e Windows usando a versão do Go declarada no go.mod.