package handlers import ( "fmt" "os" "path/filepath" "regexp" ) var numberSuffixRegex = regexp.MustCompile(` \(\d+\)$`) // GetUniquePath checks if a file or folder exists at the given baseDir with the given name. // If it does, it systematically appends " (1)", " (2)", etc., until it finds an available name. // It returns the unique filename. func GetUniquePath(baseDir, name string) string { ext := filepath.Ext(name) base := name[:len(name)-len(ext)] finalPath := filepath.Join(baseDir, name) if _, err := os.Stat(finalPath); os.IsNotExist(err) { return name } base = numberSuffixRegex.ReplaceAllString(base, "") for i := 1; ; i++ { newName := fmt.Sprintf("%s (%d)%s", base, i, ext) finalPath = filepath.Join(baseDir, newName) if _, err := os.Stat(finalPath); os.IsNotExist(err) { return newName } } }