Apa metode terbaik untuk menghapus file gambar duplikat dari komputer Anda?

14

Saya memiliki banyak file gambar duplikat di komputer Windows saya, di berbagai subfolder dan dengan nama file yang berbeda.

Skrip Python atau program freeware apa yang akan Anda rekomendasikan untuk menghapus duplikat?

(Saya sudah membaca pertanyaan serupa ini , tetapi poster di sana menanyakan tentang duplikat visual dengan ukuran file yang berbeda. Milik saya duplikat persis dengan nama file yang berbeda.)

BiGeek
sumber
2
Perlu diingat bahwa meskipun semua pikselnya sama, mereka masih memiliki informasi EXIF ​​yang berbeda (dimodifikasi oleh program yang menangani gambar pada tahap tertentu) yang akan menimbulkan masalah dengan sebagian besar solusi yang diusulkan saat ini.
user12889

Jawaban:

17

Jangan Mengandalkan jumlah MD5.

Jumlah MD5 bukan cara yang dapat diandalkan untuk memeriksa duplikat, mereka hanya cara untuk memeriksa perbedaan.

Gunakan MD5 untuk menemukan kemungkinan kandidat duplikat, dan kemudian untuk setiap pasangan membagikan MD5

  1. Buka kedua file
  2. Mencari maju dalam file-file itu sampai satu berbeda.

Melihat saya semakin banyak dipilih oleh orang-orang yang melakukan pendekatan naif untuk mengajukan duplikat Identity, Jika Anda akan bergantung sepenuhnya pada algoritma hash, demi kebaikan, gunakan sesuatu yang lebih keras seperti SHA256 atau SHA512, setidaknya Anda akan mengurangi kemungkinan untuk gelar yang masuk akal dengan memeriksa lebih banyak bit. MD5 sangat lemah untuk kondisi tabrakan.

Saya juga menyarankan orang membaca milis di sini berjudul 'pemeriksaan file': http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

Jika Anda mengatakan "MD5 dapat secara unik mengidentifikasi semua file secara unik" maka Anda memiliki kesalahan logika.

Dengan kisaran nilai, dari panjang yang bervariasi dari 40.000 byte hingga 100.000.000 byte, total jumlah kombinasi yang tersedia untuk rentang tersebut sangat melebihi jumlah kemungkinan nilai yang diwakili oleh MD5, dengan berat hanya 128 bit.

Mewakili 2 ^ 100.000.000.000 kombinasi hanya dengan 2 ^ 128 kombinasi? Saya pikir itu tidak mungkin.

Cara Paling Naif

Cara yang paling naif, dan cara tercepat, untuk menghilangkan duplikat adalah sebagai berikut.

  1. Menurut ukuran : File dengan ukuran berbeda tidak boleh identik. Ini membutuhkan sedikit waktu karena tidak perlu membuka file.
  2. Oleh MD5 : File dengan nilai MD5 / Sha berbeda tidak dapat sama. Ini membutuhkan waktu sedikit lebih lama karena harus membaca semua byte dalam file dan melakukan perhitungan matematikanya, tetapi membuat beberapa perbandingan lebih cepat.
  3. Gagal perbedaan di atas : Melakukan perbandingan byte-by-byte dari file. Ini adalah tes lambat untuk dieksekusi, itulah sebabnya ia dibiarkan sampai setelah semua faktor penghilangan lainnya telah dipertimbangkan.

Fdupes melakukan ini. Dan Anda harus menggunakan perangkat lunak yang menggunakan kriteria yang sama.

Kent Fredric
sumber
7
Secara harfiah kemungkinan besar hard drive Anda akan secara ajaib menghancurkan gambar, daripada MD5 akan bertabrakan. "Mewakili 2 ^ 100.000.000.000 kombinasi hanya dengan 2 ^ 128 kombinasi" - Saya setuju dengan Anda di sini. Jika ia memiliki 2 ^ 100.000.000.000 gambar, MD5 (atau hampir semua algoritma hash) akan menjadi buruk.
Greg Dean
4
tidak ada jaminan, itu tidak mungkin . Its tidak mustahil. Sangat mungkin untuk memiliki 10 file yang semuanya saling bertabrakan, tetapi semuanya sangat berbeda. Ini tidak mungkin, tetapi itu bisa terjadi, jadi Anda harus mengujinya.
Kent Fredric
2
ukuran file, lalu MD5, dan hanya byte untuk cek byte.
Brad Gilbert
3
@ Sent - Saya 100% setuju dengan Anda. Adalah kemalasan untuk mengabaikan sesuatu karena itu sangat tidak mungkin, bahkan tidak mungkin seperti yang kita bicarakan. Saya akan jengkel jika beberapa data saya dihancurkan hanya karena orang yang menulis program tersebut berpikir bahwa ada sesuatu yang tidak mungkin mengganggu untuk dikodekan.
Joe Taylor
10

Ini adalah liner satu pada unix seperti (termasuk linux) OS atau Windows dengan Cygwin diinstal:

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 (sekitar 50% lebih cepat) dapat digunakan jika Anda tahu tidak ada tabrakan yang sengaja dibuat (Anda akan memiliki kesempatan lebih baik untuk memenangkan 10 lotere utama daripada kesempatan untuk menemukan satu tabrakan md5 yang terjadi secara alami.)

Jika Anda ingin melihat semua dups yang Anda miliki alih-alih menghapusnya cukup ubah unlink $filebagian print $file, "\n".


sumber
1
Anda dapat menggunakan -print0 dan xargs-0 untuk menangkap spasi juga, tetapi temukan juga memiliki opsi -exec yang berguna di sini: find. -type f -exec shasum {} \; | sort ... Juga: Anda seharusnya tidak menggunakan @F (-a) karena tidak akan bekerja dengan spasi. Coba substrat sebagai gantinya.
Panggilan bagus, geocar. Memperbarui jawabannya dengan saran Anda.
"md5sum (yang sekitar 50% lebih cepat) dapat digunakan jika Anda tahu tidak ada tabrakan yang sengaja dibuat" - persis
Greg Dean
6

Saya telah menggunakan fdupes(ditulis dalam C) dan freedups(Perl) pada sistem Unix, dan mereka mungkin bekerja pada Windows juga; ada juga yang serupa yang diklaim bekerja pada Windows: dupmerge, liten(ditulis dengan Python), dll

ShreevatsaR
sumber
Perangkat lunak Perl dan Python harus bekerja secara identik pada sistem Windows dan * nix, dengan asumsi rincian sistem file tidak menjadi masalah.
CarlF
2

Untuk menghapus gambar duplikat di Windows, lihat DupliFinder. Itu dapat membandingkan gambar dengan berbagai kriteria seperti nama, ukuran, dan informasi gambar aktual.

Untuk alat lain untuk menghapus file duplikat lihat artikel Lifehacker ini.

Sean
sumber
1

Alih-alih DupliFinder, coba proyek bercabang sebagai gantinya, DeadRinger . Kami telah memperbaiki banyak bug di proyek asli, menambahkan banyak fitur baru, dan kinerja yang meningkat secara dramatis.


sumber
1

Salah satu opsi bisa berupa Dupkiller .

DupKiller adalah salah satu alat tercepat dan paling kuat untuk mencari dan menghapus file duplikat atau serupa di komputer Anda. Algoritma rumit, dibangun dalam mekanisme pencariannya, melakukan hasil tinggi - pencarian file cepat. Banyak opsi memungkinkan untuk menyesuaikan pencarian secara fleksibel.

masukkan deskripsi gambar di sini

jhamu
sumber