題 從計算機中刪除重複圖像文件的最佳方法是什麼?


我的Windows計算機,不同的子文件夾和不同的文件名中有很多重複的圖像文件。

您建議刪除重複項的Python腳本或免費軟件程序是什麼?

(我讀了 這個 類似的問題,但那裡的海報詢問有不同文件大小的視覺副本。我的確是重複的,有不同的文件名。)


14
2018-01-01 22:57


起源


請記住,即使所有像素都相同,它們仍然可能具有不同的EXIF信息(由在某個階段處理圖像的程序修改),這將對目前提出的大多數解決方案造成問題。 - user12889


答案:


不要依賴MD5總和。

MD5總和不是檢查重複項的可靠方法,它們只是檢查差異的一種方法。

使用MD5查找 可能  候選人 重複,然後為每一對共享一個MD5

  1. 打開這兩個文件
  2. 在這些文件中向前搜索,直到一個文件不同。

看到我被那些採用天真的方法來複製身份的人貶低,如果你要依賴 完全 在哈希算法上,為了善良,使用更強硬的東西,如SHA256或SHA512,至少你可以通過檢查更多的位來將概率降低到合理的程度。 MD5在碰撞條件下非常弱。

我還建議人們在這裡閱讀名為'文件檢查'的郵件列表: http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html 

如果您說“MD5可以唯一地唯一標識所有文件”,那麼您就會出現邏輯錯誤。

給定一系列值,長度從40,000字節到100,000,000,000字節不等,可用於該範圍的組合總數 非常 超過MD5代表的可能值的數量,僅重128位長度。

代表2 ^ 100,000,000,000種組合,只有2 ^ 128種組合?我認為不太可能。

至少天真的方式

排除重複的最不天真的方式和最快的方法如下。

  1. 按大小:不同大小的文件不能相同。這需要很少的時間,因為它甚至不必打開文件。
  2. 通過MD5 :具有不同MD5 / Sha值的文件不能相同。這需要更長的時間,因為它必須讀取文件中的所有字節並對它們執行數學運算,但它可以更快地進行多次比較。
  3. 沒有上述差異:執行文件的逐字節比較。這是一個執行緩慢的測試,這就是為什麼在考慮了所有其他消除因素之後才將其留下。

Fdupes 做這個。您應該使用使用相同標準的軟件。


17
2018-01-01 23:13



事實上,你的硬盤驅動器將會神奇地破壞圖像,而不是MD5會碰撞。 “代表2 ^ 100,000,000,000種組合,只有2 ^ 128種組合” - 我同意你的看法。如果他有2 ^ 100,000,000,000張圖片,MD5(或幾乎任何哈希算法)都會很糟糕。 - Greg Dean
有 沒有 保證,它的正義 不會。它的 不 不可能。很可能有10個文件都互相碰撞,但都完全不同。這不太可能,但可能會發生,因此您必須對其進行測試。 - Kent Fredric
文件大小,然後MD5,然後只有字節進行字節檢查。 - Brad Gilbert
@Kent - 我100%與你凝聚。忽視某些事情是懶惰的,因為它不太可能,即使我們談論的不太可能。如果我的一些數據被銷毀,我會很生氣,因為編寫該程序的人認為某些東西太不可能打擾編碼。 - Joe Taylor


這是unix上的一個內容,如(包括linux)操作系統或安裝了Cygwin的Windows:

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(大約快50%)(你有更好的機會贏得10個主要彩票,而不是找到一個自然發生的md5碰撞的機會。)

如果你想看到你擁有的所有重複而不是刪除它們,只需更改 unlink $file 部分到 print $file, "\n"


10
2018-01-02 01:03



您也可以使用-print0和xargs-0來捕獲空格,但是find也有一個在這裡有用的-exec選項:find。 -type f -exec shasum {} \; | sort ...另外:你不應該使用@F(-a),因為它不適用於空格。請嘗試使用substr。
好的電話,geocar。根據您的建議更新了答案。
如果您知道沒有故意創建的碰撞,可以使用“md5sum(大約快50%)” - 確切地說 - Greg Dean


我用過 fdupes (用C語寫)和 freedups (Perl)在Unix系統上,它們也可以在Windows上運行;還有 類似的 聲稱可以在Windows上運行: dupmergeliten (用Python編寫)等


6
2018-01-01 23:37



假設文件系統的細節無關緊要,Perl和Python軟件應該在Windows和* nix系統上完全相同。 - CarlF


要在Windows上刪除重複的圖像,請查看 DupliFinder。  它可以通過各種標準比較圖片,例如名稱,大小和實際圖像信息。

有關刪除重複文件的其他工具,請查看此Lifehacker 文章。


2
2018-01-01 23:42





而不是DupliFinder,而是嘗試分叉項目, DeadRinger。我們在原始項目中修復了大量錯誤,添加了一系列新功能,並顯著提升了性能。


1
2017-08-14 23:47





一種選擇是 Dupkiller

DupKiller是用於搜索和刪除計算機上重複或類似文件的速度最快,功能最強大的工具之一。複雜的算法,內置其搜索機制,執行高效果 - 快速文件搜索。許多選項允許靈活地自定義搜索。

enter image description here


1
2017-11-03 12:22