|
@@ -12,6 +12,7 @@ import (
|
|
"os"
|
|
"os"
|
|
"path/filepath"
|
|
"path/filepath"
|
|
"runtime"
|
|
"runtime"
|
|
|
|
+ "sort"
|
|
"sync"
|
|
"sync"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
@@ -270,8 +271,8 @@ func loadHashfile(fileStr string) Fdhashes {
|
|
func compareFolder(folder string) {
|
|
func compareFolder(folder string) {
|
|
loadAllHashFiles(folder)
|
|
loadAllHashFiles(folder)
|
|
|
|
|
|
|
|
+ // putting all hashes into one big map key = hash, value list of files with that hash
|
|
index := make(map[string][]string)
|
|
index := make(map[string][]string)
|
|
-
|
|
|
|
for _, hashFile := range hashes {
|
|
for _, hashFile := range hashes {
|
|
for filename, hash := range hashFile.Hashes {
|
|
for filename, hash := range hashFile.Hashes {
|
|
values := index[hash]
|
|
values := index[hash]
|
|
@@ -283,11 +284,33 @@ func compareFolder(folder string) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // sorting list of files for every hash and deleting hashes with only 1 entry
|
|
|
|
+ size := len(index)
|
|
|
|
+ myHashes := make([]string, 0)
|
|
|
|
+ for hash, values := range index {
|
|
|
|
+ count++
|
|
|
|
+ if count%100 == 0 {
|
|
|
|
+ fmt.Printf("%d (%d) sorting\n", count, size)
|
|
|
|
+ }
|
|
|
|
+ if len(values) > 1 {
|
|
|
|
+ sort.Strings(values)
|
|
|
|
+ index[hash] = values
|
|
|
|
+ myHashes = append(myHashes, hash)
|
|
|
|
+ // for _, filename := range values {
|
|
|
|
+ // fmt.Printf(" %s\n", filename)
|
|
|
|
+ // }
|
|
|
|
+ } else {
|
|
|
|
+ delete(index, hash)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ sort.Slice(myHashes, func(i, j int) bool { return index[myHashes[i]][0] < index[myHashes[j]][0] })
|
|
|
|
+
|
|
if outputJson {
|
|
if outputJson {
|
|
- size := len(index)
|
|
|
|
|
|
+ size = len(index)
|
|
var filesize int64
|
|
var filesize int64
|
|
fileCount := 0
|
|
fileCount := 0
|
|
- for hash, values := range index {
|
|
|
|
|
|
+ for _, hash := range myHashes {
|
|
|
|
+ values := index[hash]
|
|
count++
|
|
count++
|
|
if count%100 == 0 {
|
|
if count%100 == 0 {
|
|
fmt.Printf("%d (%d) checking\n", count, size)
|
|
fmt.Printf("%d (%d) checking\n", count, size)
|
|
@@ -324,7 +347,8 @@ func compareFolder(folder string) {
|
|
count := 0
|
|
count := 0
|
|
var filesize int64
|
|
var filesize int64
|
|
fileCount := 0
|
|
fileCount := 0
|
|
- for _, values := range index {
|
|
|
|
|
|
+ for _, hash := range myHashes {
|
|
|
|
+ values := index[hash]
|
|
count++
|
|
count++
|
|
if count%100 == 0 {
|
|
if count%100 == 0 {
|
|
fmt.Printf("%d (%d) checking\n", count, size)
|
|
fmt.Printf("%d (%d) checking\n", count, size)
|