package fileop import ( "crypto/sha256" "fmt" "io" "os" "path/filepath" ) func WalkFolder(folder string) <-chan string { c := make(chan string) go func(folder string, c chan string) { filepath.Walk(folder, func(path string, info os.FileInfo, err error) error { file, _ := os.Open(path) defer file.Close() fileInfo, _ := file.Stat() if !fileInfo.IsDir() { c <- path } return nil }) close(c) }(folder, c) return c } func CalculateSHA256(file string) (string, error) { f, err := os.Open(file) if err != nil { return "", err } defer f.Close() h := sha256.New() if _, err := io.Copy(h, f); err != nil { return "", err } shaString := fmt.Sprintf("%x", h.Sum(nil)) return shaString, nil } type MoveCommand struct { Source string Destination string } func Move() chan<- *MoveCommand { c := make(chan *MoveCommand) go func(chan *MoveCommand) { for cmd := range c { // TODO: add error handling err := os.Rename(cmd.Source, cmd.Destination) if err != nil { fmt.Println(err.Error()) } } }(c) return c }