Qual é o melhor método para remover arquivos de imagem duplicados do seu computador?


14

Tenho muitos arquivos de imagem duplicados no meu computador Windows, em subpastas diferentes e com nomes de arquivos diferentes.

Qual script de Python ou programa de freeware você recomendaria para remover as duplicatas?

(Eu li essa pergunta semelhante, mas o pôster está perguntando sobre duplicatas visuais com tamanhos de arquivo diferentes. As minhas são duplicatas exatas com nomes de arquivos diferentes.)


2
Lembre-se de que, mesmo que todos os pixels sejam iguais, eles ainda podem ter informações EXIF ​​diferentes (modificadas por programas que manipularam as imagens em algum momento), o que causará problemas nas soluções propostas atualmente.
user12889

Respostas:


17

Não confie nas somas MD5.

As somas MD5 não são uma maneira confiável de verificar se há duplicatas; elas são apenas uma maneira de verificar se há diferenças.

Use MD5s para encontrar possíveis duplicatas candidatas e, em seguida, para cada par que compartilha um MD5

  1. Abre os dois arquivos
  2. Procura avançar nesses arquivos até que um seja diferente.

Vendo que estou sendo criticado por pessoas que adotam abordagens ingênuas para arquivar Identidade duplicada, se você confiar inteiramente em um algoritmo de hash, pelo amor de Deus, use algo mais difícil como SHA256 ou SHA512, pelo menos reduzirá a probabilidade de um grau razoável, tendo mais bits verificados. O MD5 é extremamente fraco para condições de colisão.

Também recomendo que as pessoas leiam as listas de discussão aqui intituladas 'verificação de arquivo': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Se você disser "O MD5 pode identificar todos os arquivos exclusivamente", você terá um erro de lógica.

Dado um intervalo de valores, de comprimentos variados, de 40.000 bytes a 100.000.000.000 bytes, o número total de combinações disponíveis para esse intervalo excede em muito o número possível de valores representados pelo MD5, pesando apenas 128 bits de comprimento.

Representa 2 ^ 100.000.000.000 combinações com apenas 2 ^ 128 combinações? Eu não acho isso provável.

O caminho menos ingênuo

A maneira menos ingênua e a maneira mais rápida de eliminar duplicatas é a seguinte.

  1. Por tamanho : arquivos com tamanhos diferentes não podem ser idênticos. Isso leva pouco tempo, pois nem precisa abrir o arquivo.
  2. Por MD5 : Arquivos com diferentes valores MD5 / Sha não podem ser idênticos. Isso leva um pouco mais de tempo, pois é necessário ler todos os bytes no arquivo e executar cálculos neles, mas torna mais rápidas as comparações.
  3. Falhando nas diferenças acima : Execute uma comparação de bytes por bytes dos arquivos. Este é um teste lento para executar, e é por isso que resta até que todos os outros fatores eliminadores tenham sido considerados.

Fdupes faz isso. E você deve usar um software que use os mesmos critérios.


7
É literalmente mais provável que o seu disco rígido destrua magicamente uma imagem, do que o MD5 colidirá. "Represente 2 ^ 100.000.000.000 combinações com apenas 2 ^ 128 combinações" - concordo com você aqui. Se ele tivesse 2 ^ 100.000.000.000 de imagens, o MD5 (ou quase qualquer algoritmo de hash) seria ruim.
Greg Dean

4
não garantia, é apenas improvável . A sua não impossível. É bem possível ter 10 arquivos que colidem entre si, mas são totalmente diferentes. Isso é improvável, mas pode acontecer, então você deve testá-lo.
22710 Kent

2
tamanho do arquivo, MD5 e somente então byte para verificação de bytes.
Brad Gilbert

3
@ Kent - eu concordo 100% com você. É preguiça desconsiderar algo, porque é muito improvável, mesmo tão improvável quanto o que estamos falando. Eu ficaria irritado se alguns dos meus dados fossem destruídos apenas porque a pessoa que escreveu o programa achou que era improvável que algo incomodasse a codificação.
21410 Joe

10

É um liner em sistemas operacionais unix como (incluindo Linux) ou Windows com o Cygwin instalado:

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

O md5sum (que é cerca de 50% mais rápido) pode ser usado se você souber que não há colisões criadas deliberadamente (você teria mais chances de ganhar 10 grandes loterias do que a chance de encontrar uma colisão md5 que ocorre naturalmente).

Se você quiser ver todos os dups que possui, em vez de removê-los, basta alterar a unlink $fileparte para print $file, "\n".


1
Você pode usar -print0 e xargs-0 para capturar espaços também, mas o find também possui uma opção -exec que é útil aqui: find. -type f -exec shasum {} \; | classificar ... Além disso: você não deve usar @F (-a) porque não funcionará com espaços. Tente substr em vez disso.

Boa chamada, geocar. Atualizou a resposta com suas sugestões.

"md5sum (que é cerca de 50% mais rápido) pode ser usado se você sabe que há colisões não deliberadamente criadas" - exatamente
Greg Dean

6

Eu usei fdupes(escrito em C) e freedups(Perl) em sistemas Unix, e eles podem funcionar no Windows também; há também outras semelhantes que são requeridas para o trabalho no Windows: dupmerge, liten(escrito em Python), etc.


Os softwares Perl e Python devem funcionar de forma idêntica nos sistemas Windows e * nix, assumindo que os detalhes do sistema de arquivos não importam.
CarlF

2

Para remover imagens duplicadas no Windows, consulte o DupliFinder. Ele pode comparar imagens por vários critérios, como nome, tamanho e informações reais da imagem.

Para outras ferramentas para remover arquivos duplicados, dê uma olhada neste artigo do Lifehacker .


1

Em vez do DupliFinder, tente o projeto bifurcado, DeadRinger . Corrigimos uma tonelada de bugs no projeto original, adicionamos vários novos recursos e melhoramos drasticamente o desempenho.


1

Uma opção pode ser Dupkiller .

O DupKiller é uma das ferramentas mais rápidas e poderosas para pesquisar e remover arquivos duplicados ou similares no seu computador. Algoritmos complicados, construídos em seu mecanismo de busca, executam altos resultados - busca rápida de arquivos. Muitas opções permitem personalizar de forma flexível a pesquisa.

insira a descrição da imagem aqui

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.