package main import ( "fmt" "io" "io/ioutil" "log" "os" "strings" ) func main() { files, err := ioutil.ReadDir("./") if err != nil { log.Fatal(err) } for _, f := range files { currentName := f.Name() if strings.HasSuffix(currentName, ".png") { if strings.Contains(currentName, "_") { tmpSplit := strings.Split(currentName, "_") newName := fmt.Sprintf("combined/%s", tmpSplit[len(tmpSplit)-1]) if _, err := os.Stat(newName); os.IsNotExist(err) { err := copyFile(currentName, newName) if err != nil { log.Printf("failed to rename '%s' to '%s': %v", currentName, newName, err) } } } } } } func copyFile(src, dst string) error { in, err := os.Open(src) if err != nil { return err } defer in.Close() out, err := os.Create(dst) if err != nil { return err } defer out.Close() _, err = io.Copy(out, in) if err != nil { return err } return out.Close() }