¿Cuál es el mejor método para eliminar archivos de imagen duplicados de su computadora?

14

Tengo muchos archivos de imagen duplicados en mi computadora con Windows, en diferentes subcarpetas y con diferentes nombres de archivo.

¿Qué script Python o programa gratuito recomendaría para eliminar los duplicados?

(He leído esta pregunta similar, pero el cartel allí pregunta acerca de duplicados visuales con diferentes tamaños de archivo. Los míos son duplicados exactos con diferentes nombres de archivo).

BioGeek
fuente
2
Tenga en cuenta que incluso si todos los píxeles son iguales, pueden tener información EXIF ​​diferente (modificada por programas que manejan las imágenes en algún momento), lo que planteará problemas con la mayoría de las soluciones propuestas actualmente.
user12889

Respuestas:

17

No confíe en sumas MD5.

Las sumas MD5 no son una forma confiable de verificar si hay duplicados, solo son una forma de verificar las diferencias.

Use los MD5 para encontrar posibles duplicados candidatos , y luego para cada par que comparta un MD5

  1. Abre ambos archivos.
  2. Busca hacia adelante en esos archivos hasta que uno difiere.

Al ver que me votan negativamente las personas que hacen enfoques ingenuos para archivar identidades duplicadas, si va a confiar completamente en un algoritmo hash, por amor de Dios, use algo más duro como SHA256 o SHA512, al menos reducirá la probabilidad de un grado razonable al tener más bits revisados. MD5 es extremadamente débil para condiciones de colisión.

También aconsejo a las personas que lean las listas de correo aquí tituladas 'verificación de archivos': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Si dice "MD5 puede identificar todos los archivos de manera única", entonces tiene un error lógico.

Dado un rango de valores, de longitudes variables de 40,000 bytes de longitud a 100,000,000,000 bytes de longitud, el número total de combinaciones disponibles para ese rango excede en gran medida el posible número de valores representados por MD5, con un peso de solo 128 bits de longitud.

¿Representa 2 ^ 100,000,000,000 combinaciones con solo 2 ^ 128 combinaciones? No creo que sea probable.

La manera menos ingenua

La forma menos ingenua, y la forma más rápida, de eliminar los duplicados es la siguiente.

  1. Por tamaño : los archivos con diferentes tamaños no pueden ser idénticos. Esto lleva poco tiempo ya que ni siquiera tiene que abrir el archivo.
  2. Por MD5 : los archivos con diferentes valores de MD5 / Sha no pueden ser idénticos. Esto lleva un poco más de tiempo porque tiene que leer todos los bytes del archivo y realizar cálculos matemáticos en ellos, pero hace que las comparaciones múltiples sean más rápidas.
  3. Fallando las diferencias anteriores : realice una comparación byte por byte de los archivos. Esta es una prueba lenta de ejecutar, por lo que se deja hasta después de que se hayan considerado todos los demás factores de eliminación.

Fdupes hace esto. Y debe usar un software que use el mismo criterio.

Kent Fredric
fuente
77
Literalmente, es más probable que su disco duro destruya mágicamente una imagen, que MD5 colisionará. "Representa 2 ^ 100,000,000,000 combinaciones con solo 2 ^ 128 combinaciones" - Estoy de acuerdo contigo aquí. Si tuviera 2 ^ 100,000,000,000 de imágenes, MD5 (o casi cualquier algoritmo hash) sería malo.
Greg Dean el
44
No hay garantía, es poco probable . Su no imposible. Es bastante posible tener 10 archivos que todos colisionan entre sí, pero que son completamente diferentes. Esto es poco probable, pero puede suceder, por lo que debe probarlo.
Kent Fredric el
2
tamaño de archivo, luego MD5, y solo luego byte para verificación de byte.
Brad Gilbert el
3
@Kent - Estoy 100% de acuerdo contigo. Es pereza ignorar algo porque es muy poco probable, incluso tan poco probable como estamos hablando. Me molestaría que algunos de mis datos se destruyeran solo porque la persona que escribió el programa pensó que era muy poco probable que algo molestara en la codificación.
Joe Taylor
10

Es un trazador de líneas en sistemas operativos tipo Unix (incluidos Linux) o Windows con 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'

md5sum (que es aproximadamente un 50% más rápido) se puede usar si sabe que no hay colisiones creadas deliberadamente (tendría más posibilidades de ganar 10 loterías importantes que la posibilidad de encontrar una colisión md5 que ocurra naturalmente).

Si desea ver todos los duplicados que tiene en lugar de eliminarlos, simplemente cambie la unlink $fileparte a print $file, "\n".


fuente
1
También puede usar -print0 y xargs-0 para capturar espacios, pero find también tiene una opción -exec que es útil aquí: find. -tipo f -exec shasum {} \; El | ordenar ... Además: no debe usar @F (-a) porque no funcionará con espacios. Prueba substr en su lugar.
Buena llamada, geocar. Actualizó la respuesta con sus sugerencias.
"md5sum (que es aproximadamente un 50% más rápido) puede usarse si sabe que no hay colisiones creadas deliberadamente" - exactamente
Greg Dean
6

He usado fdupes(escrito en C) y freedups(Perl) en sistemas Unix, y también podrían funcionar en Windows; también hay otros similares que se dice que el trabajo en Windows: dupmerge, liten(escrito en Python), etc.

ShreevatsaR
fuente
El software Perl y Python debería funcionar de manera idéntica en los sistemas Windows y * nix, suponiendo que los detalles del sistema de archivos no importen.
CarlF
2

Para eliminar imágenes duplicadas en Windows, eche un vistazo a DupliFinder. Puede comparar imágenes por una variedad de criterios, como el nombre, el tamaño y la información de la imagen real.

Para otras herramientas para eliminar archivos duplicados, eche un vistazo a este artículo de Lifehacker .

Sean
fuente
1

En lugar de DupliFinder, prueba el proyecto bifurcado, DeadRinger . Hemos solucionado un montón de errores en el proyecto original, hemos agregado un montón de características nuevas y hemos mejorado drásticamente el rendimiento.


fuente
1

Una opción puede ser Dupkiller .

DupKiller es una de las herramientas más rápidas y poderosas para buscar y eliminar archivos duplicados o similares en su computadora. Algoritmos complicados, incorporados en su mecanismo de búsqueda, obtienen altos resultados: búsqueda rápida de archivos. Muchas opciones permiten personalizar de forma flexible la búsqueda.

ingrese la descripción de la imagen aquí

jhamu
fuente