package shellcode import ( "fmt" "io" "os" "path/filepath" ) // CopyFile - copies a file 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() destination, err := os.Create(dst) if err != nil { return 0, err } defer destination.Close() nBytes, err := io.Copy(destination, source) return nBytes, err } // DirExists - returns true iff a directory exists func DirExists(dirname string) bool { info, err := os.Stat(dirname) if os.IsNotExist(err) { return false } return info.IsDir() } // WalkMatch - returns all files matching a pattern recursively func WalkMatch(root, pattern string) ([]string, error) { var matches []string err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil } if matched, err := filepath.Match(pattern, filepath.Base(path)); err != nil { return err } else if matched { matches = append(matches, path) } return nil }) if err != nil { return nil, err } return matches, nil }