package helpers import ( "crypto/md5" "fmt" "io" "log" "os" ) func CopyFile(src, dst string) (int64, error) { sourceFileStat, err := os.Stat(src) if err != nil { return 0, err } if !sourceFileStat.Mode().IsRegular() { return 0, fmt.Errorf("%s is not a regular file", src) } source, err := os.Open(src) if err != nil { return 0, err } defer source.Close() // Check if destination exists if _, err := os.Stat(dst); !os.IsNotExist(err) { log.Printf("- %s already exists, skipping...", dst) return 0, nil } destination, err := os.Create(dst) if err != nil { return 0, err } defer destination.Close() nBytes, err := io.Copy(destination, source) return nBytes, err } func Md5File(src string) ([]byte, error) { f, err := os.Open(src) if err != nil { return nil, err } defer f.Close() h := md5.New() if _, err := io.Copy(h, f); err != nil { return nil, err } return h.Sum(nil), nil }