diff --git a/main.go b/main.go index 21a558d..cbb39ed 100644 --- a/main.go +++ b/main.go @@ -106,12 +106,16 @@ func main() { }() // Process results and remove duplicates + deletedFiles := make(map[string]bool) for result := range groupResults { allFiles := append([]string{result.mainFile}, result.group...) var largestFile string var largestSize int64 for _, f := range allFiles { + if deletedFiles[f] { + continue + } info, err := os.Stat(f) if err != nil { logger.Error("Failed to get file info for %s: %v", f, err) @@ -124,10 +128,12 @@ func main() { } for _, f := range allFiles { - if f != largestFile { + if f != largestFile && !deletedFiles[f] { logger.Info("Removing duplicate: %s (keeping %s)", f, largestFile) if err := os.Remove(f); err != nil { logger.Error("Failed to remove file %s: %v", f, err) + } else { + deletedFiles[f] = true } } } @@ -218,7 +224,7 @@ func groupWorker(in <-chan HashResult, out chan<- GroupResult, wg *sync.WaitGrou var group []string for fileb, hashb := range allHashes { - if filea == fileb { + if filea == fileb || processedFiles[fileb] { continue } distance, err := hasha.Distance(hashb)