Bilgisayarınızdan yinelenen görüntü dosyalarını kaldırmanın en iyi yöntemi nedir?


14

Windows bilgisayarımda, farklı alt klasörlerde ve farklı dosya adlarında çok sayıda yinelenen görüntü dosyası var.

Kopyaları kaldırmak için hangi Python betiği veya ücretsiz programı önerirsiniz?

( Bu benzer soruyu okudum , ancak poster farklı dosya boyutlarına sahip görsel kopyalar hakkında soruyor. Benimki farklı dosya adlarıyla tam kopyalar.)


2
Tüm pikseller aynı olsa bile, hâlihazırda önerilen çözümlerin çoğunda sorun yaratabilecek farklı EXIF ​​bilgilerine (görüntüleri bir aşamada işleyen programlar tarafından değiştirilmiş) sahip olabileceğini unutmayın.
user12889

Yanıtlar:


17

MD5 toplamlarına güvenmeyin.

MD5 toplamları kopyaları kontrol etmek için güvenilir bir yol değildir, sadece farklılıkları kontrol etmenin bir yoludur.

Olası aday kopyaları bulmak için MD5'leri kullanın ve ardından MD5'i paylaşan her bir çift için

  1. Her iki dosyayı da açar
  2. Farklı olana kadar bu dosyaları ileriye doğru arar.

Yinelenen Kimlik dosyasını dosyalamak için naif yaklaşımlar uygulayan insanlar tarafından aşağılandığımı görünce, Tamamen bir karma algoritmaya güvenecekseniz , iyilik için, SHA256 veya SHA512 gibi daha sert bir şey kullanın, en azından daha fazla bit kontrol ederek makul bir derece. MD5 çarpışma koşulları için son derece zayıftır.

Ayrıca, insanların burada 'dosya kontrolü' başlıklı posta listelerini okumasını tavsiye ediyorum: http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

"MD5 tüm dosyaları benzersiz bir şekilde tanımlayabilir" derseniz bir mantık hatası vardır.

40.000 bayt uzunluğundan 100.000.000.000 bayt uzunluğa kadar değişen uzunluklarda bir değer aralığı göz önüne alındığında, bu aralıkta kullanılabilir toplam kombinasyon sayısı, sadece 128 bit uzunluğunda olan MD5 tarafından temsil edilen olası değer sayısını büyük ölçüde aşmaktadır.

Yalnızca 2 ^ 128 kombinasyonlu 2 ^ 100.000.000.000 kombinasyonu mu temsil ediyorsunuz? Ben öyle düşünmüyorum.

En Az Yol

Kopyaları ayıklamanın en az saf ve en hızlı yolu aşağıdaki gibidir.

  1. Boyuta göre : Farklı boyuttaki dosyalar aynı olamaz. Bu dosyayı açmak zorunda olmadığı için çok az zaman alır.
  2. MD5'e göre : Farklı MD5 / Sha değerlerine sahip dosyalar aynı olamaz. Bu, dosyadaki tüm baytları okumak ve üzerinde matematik yapmak zorunda olduğu için biraz daha uzun sürer, ancak çoklu karşılaştırmaları daha hızlı hale getirir.
  3. Yukarıdaki farkların başarısız olması : Dosyaların bayt-byte karşılaştırmasını yapın. Bu, yürütmek için yavaş bir testtir, bu yüzden diğer tüm ortadan kaldırıcı faktörler dikkate alınana kadar bırakılır.

Fdupes bunu yapar. Ve aynı ölçütleri kullanan bir yazılım kullanmalısınız.


7
Sabit sürücünüzün MD5'in çarpışacağından bir görüntüyü sihirli bir şekilde yok etmesi tam anlamıyla daha olasıdır. "Yalnızca 2 ^ 128 kombinasyonuyla 2 ^ 100.000.000.000 kombinasyonu temsil et" - Burada size katılıyorum. 2 ^ 100.000.000.000 resmi varsa, MD5 (veya hemen hemen her karma algoritması) kötü olurdu.
Greg Dean

4
orada hiçbir garanti onun sadece, olası . Bu imkansız değil . Hepsi birbiriyle çarpışan ancak hepsi tamamen farklı olan 10 dosyaya sahip olmak oldukça mümkündür. Bu olası değildir, ancak olabilir, bu yüzden test etmeniz gerekir.
Kent Fredric

2
dosya boyutu, sonra MD5 ve yalnızca o zaman bayt kontrolü için bayt.
Brad Gilbert

3
@Kent -% 100 sana katılıyorum. Bir şeyi göz ardı etmek tembelliktir, çünkü bahsettiğimiz kadar olası değildir. Verilerimden bazıları yok edildiğinde rahatsız olurdum, çünkü programı yazan kişi kodlamanın zahmetine girmenin çok olası olmadığını düşündü.
Joe Taylor

10

Unix gibi (linux dahil) işletim sistemleri veya Cygwin yüklü Windows'da tek bir astar:

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 (yaklaşık% 50 daha hızlı), kasıtlı olarak yaratılan bir çarpışma olmadığını biliyorsanız (10 büyük piyango kazanmak için doğal olarak oluşan bir md5 çarpışması bulma şansından daha iyi bir şansınız olacaktır.)

Kaldırmak yerine sahip olduğunuz tüm dup'ları görmek istiyorsanız sadece unlink $fileparçayı değiştirin print $file, "\n".


1
Ayrıca boşlukları yakalamak için -print0 ve xargs-0 kullanabilirsiniz, ancak bulmanın burada yararlı bir -exec seçeneği de vardır: bul. -tip f -exec shasum {} \; | sort ... Ayrıca: @F (-a) kullanmamalısınız çünkü boşluklarla çalışmaz. Bunun yerine substr'yi deneyin.

İyi arama, geocar. Cevabı önerilerinizle güncelleyin.

"md5sum (yaklaşık% 50 daha hızlı), kasıtlı olarak yaratılan bir çarpışma olmadığını biliyorsanız kullanılabilir" - tam olarak
Greg Dean

6

Kullandığım fdupes(C yazılı) ve freedupsUnix sistemleri üzerinde (Perl) ve bunlar Windows üzerinde çalışır yanı olabilir; da vardır benzer olanları Windows üzerinde çalışması talep edilmiştir: dupmerge, liten(Python ile yazılmış) vb


Perl ve Python yazılımları, dosya sisteminin ayrıntılarının önemli olmadığı varsayılarak, Windows ve * nix sistemlerinde aynı şekilde çalışmalıdır.
CarlF

2

Windows'daki yinelenen görüntüleri kaldırmak için DupliFinder'a bakın. Resimleri ad, boyut ve gerçek görüntü bilgileri gibi çeşitli kriterlere göre karşılaştırabilir.

Yinelenen dosyaları kaldırmak için diğer araçlar için bu Lifehacker makalesine göz atın .


1

DupliFinder yerine çatallı projeyi deneyin, DeadRinger . Orijinal projedeki bir ton hatayı düzelttik, bir dizi yeni özellik ekledik ve performansı önemli ölçüde artırdık.


1

Bir seçenek Dupkiller olabilir .

DupKiller, bilgisayarınızdaki yinelenen veya benzer dosyaları aramak ve kaldırmak için en hızlı ve en güçlü araçlardan biridir. Arama mekanizmasında yerleşik olan karmaşık algoritmalar, yüksek sonuçlar verir - hızlı dosya arama. Birçok seçenek aramayı esnek bir şekilde özelleştirmenizi sağlar.

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.