From 83521eeae650f99ac5f6eb67edeb6fd6214fbd8a Mon Sep 17 00:00:00 2001 From: Jan Bader Date: Sat, 21 Nov 2020 21:43:22 +0100 Subject: [PATCH] Implement moving instead of deleting --- main.go | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 082dfa5..cf7e628 100644 --- a/main.go +++ b/main.go @@ -19,9 +19,42 @@ var fromFile = flag.String("from-file", "", "Load results file from ") var toFile = flag.String("to-file", "", "Save results to ") var deleteDupesIn = flag.String("delete-dupes-in", "", "Delete duplicates if they are contained in ") var promptForDelete = flag.Bool("delete-prompt", false, "Ask which file to keep for each dupe-set") +var moveToFolder = flag.String("move-files", "", "Move files to instead of deleting them") var force = flag.Bool("force", false, "Actually delete files. Without this options, the files to be deleted are only printed") var verbose = flag.Bool("verbose", false, "Output additional information") +func Delete(path string) { + if !*force { + return + } + + if *moveToFolder == "" { + os.Remove(path) + return + } + + MoveButDontOvewrite(path, *moveToFolder) +} + +func MoveButDontOvewrite(path string, targetPath string) { + num := 0 + + filename := filepath.Base(path) + + target := filepath.Join(targetPath, filename) + + for { + _, err := os.Stat(target) + if os.IsNotExist(err) { + os.Rename(path, target) + return + } + + target = filepath.Join(targetPath, filename+"."+strconv.Itoa(num)) + num++ + } +} + func main() { flag.Parse() @@ -65,7 +98,7 @@ func main() { if strings.HasPrefix(filepath.Clean(file), deleteIn) { fmt.Println("Would delete ", file) if *force { - os.Remove(file) + Delete(file) } } } @@ -84,7 +117,7 @@ func main() { for i, file := range duplicateFiles { fmt.Println(i+1, file) if *force { - os.Remove(file) + Delete(file) } }