"Fix" file removal by tracking deleted files
This commit is contained in:
10
main.go
10
main.go
@@ -106,12 +106,16 @@ func main() {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
// Process results and remove duplicates
|
// Process results and remove duplicates
|
||||||
|
deletedFiles := make(map[string]bool)
|
||||||
for result := range groupResults {
|
for result := range groupResults {
|
||||||
allFiles := append([]string{result.mainFile}, result.group...)
|
allFiles := append([]string{result.mainFile}, result.group...)
|
||||||
var largestFile string
|
var largestFile string
|
||||||
var largestSize int64
|
var largestSize int64
|
||||||
|
|
||||||
for _, f := range allFiles {
|
for _, f := range allFiles {
|
||||||
|
if deletedFiles[f] {
|
||||||
|
continue
|
||||||
|
}
|
||||||
info, err := os.Stat(f)
|
info, err := os.Stat(f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to get file info for %s: %v", f, err)
|
logger.Error("Failed to get file info for %s: %v", f, err)
|
||||||
@@ -124,10 +128,12 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, f := range allFiles {
|
for _, f := range allFiles {
|
||||||
if f != largestFile {
|
if f != largestFile && !deletedFiles[f] {
|
||||||
logger.Info("Removing duplicate: %s (keeping %s)", f, largestFile)
|
logger.Info("Removing duplicate: %s (keeping %s)", f, largestFile)
|
||||||
if err := os.Remove(f); err != nil {
|
if err := os.Remove(f); err != nil {
|
||||||
logger.Error("Failed to remove file %s: %v", f, err)
|
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
|
var group []string
|
||||||
for fileb, hashb := range allHashes {
|
for fileb, hashb := range allHashes {
|
||||||
if filea == fileb {
|
if filea == fileb || processedFiles[fileb] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
distance, err := hasha.Distance(hashb)
|
distance, err := hasha.Distance(hashb)
|
||||||
|
Reference in New Issue
Block a user