diff --git a/cmd/transform/download.go b/cmd/transform/download.go index 4cfeeff5..9200d274 100644 --- a/cmd/transform/download.go +++ b/cmd/transform/download.go @@ -3,9 +3,10 @@ package transform import ( "context" - "strings" + "fmt" "github.com/charmbracelet/log" + "github.com/mrz1836/go-sanitize" sailpoint "github.com/sailpoint-oss/golang-sdk/v2" v3 "github.com/sailpoint-oss/golang-sdk/v2/api_v3" "github.com/sailpoint-oss/sailpoint-cli/internal/config" @@ -35,8 +36,14 @@ func newDownloadCommand() *cobra.Command { return sdk.HandleSDKError(resp, err) } + filenameCounts := make(map[string]int) for _, v := range transforms { - filename := strings.ReplaceAll(v.Name, " ", "") + baseName := sanitize.PathName(v.Name) + filename := baseName + if count := filenameCounts[baseName]; count > 0 { + filename = fmt.Sprintf("%s-%d", baseName, count) + } + filenameCounts[baseName]++ err := output.SaveJSONFile(v, filename, destination) if err != nil { diff --git a/internal/output/output.go b/internal/output/output.go index 98ce2be4..bd4b5e40 100644 --- a/internal/output/output.go +++ b/internal/output/output.go @@ -43,7 +43,8 @@ func WriteFile(folderPath string, filePath string, data []byte) error { } } - file, err := os.OpenFile(path.Join(folderPath, filePath), os.O_CREATE|os.O_RDWR, 0777) + // O_TRUNC ensures existing file content is removed before writing + file, err := os.OpenFile(path.Join(folderPath, filePath), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0777) if err != nil { return err }