2016-11-19 94 views

回答

2

散列所有文件將需要很長時間,因爲您必須讀取所有文件內容。

我推薦的3步算法:

  1. 掃描您的目錄,並記下的路徑&大小的文件
  2. 哈希只有文件具有大小爲其他文件一樣,只有當有兩個以上的文件具有相同的大小:如果一個文件與另一個文件具有相同的大小,則不需要散列,只是將它們的內容一對一地進行比較(保存散列時間,不會之後需要散列值)
  3. 即使散列值相同,您仍然必須比較每個字節的文件數,因爲ha sh對於不同的文件可以是相同的(儘管如果文件大小相同,它是不太可能的,並且它是文件系統)。

你也可以不做哈希,如果可能的話同時打開所有文件,並比較內容。這將節省對大文件的多次讀取。根據你的數據類型,你可以實現很多調整來節省時間(例如:如果2個壓縮/ tar文件具有相同大小> x Ggigabytes大小(並且名稱相同),則不要讀取內容,考慮到你的過程,文件很可能是重複的)

這樣,你可以避免散列大小在系統中唯一的文件。節省很多時間。

注意:這裏沒有考慮名稱,因爲我想名稱可能不同。

編輯:我已經做了一些研究(太遲),並發現fdupes似乎恰恰如此,如果你正在使用的Un * X-like系統:

https://linux.die.net/man/1/fdupes

看到那個問題:List duplicate files in a directory in Unix

相關問題