diff --git a/mmv.go b/mmv.go index 72c995a..4b9f62f 100644 --- a/mmv.go +++ b/mmv.go @@ -4,10 +4,26 @@ import "os" // Move multiple files. func Move(files map[string]string) error { - for k, v := range files { - if err := os.Rename(k, v); err != nil { + rs, err := buildRenames(files) + if err != nil { + return err + } + for _, r := range rs { + if err := os.Rename(r.src, r.dst); err != nil { return err } } return nil } + +type rename struct { + src, dst string +} + +func buildRenames(files map[string]string) ([]rename, error) { + rs := make([]rename, 0, 2*len(files)) + for src, dst := range files { + rs = append(rs, rename{src, dst}) + } + return rs, nil +}