package main import ( "fmt" "archive/tar" //"errors" "io" "io/ioutil" "os" "path/filepath" "strings" ) func main() { f, err := os.OpenFile("hello.tar", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0777) if err != nil { panic(err) } defer f.Close() err = Persist(f) if err != nil { panic(err) } } func Persist(wr io.Writer) error { tw := tar.NewWriter(wr) defer tw.Close() dirPath := filepath.Dir("/opt/matrix/var/logs/odbserver/log.db") if dir, err := ioutil.ReadDir( dirPath ) ; err != nil { return err } else { println(dir) PthSep := string(os.PathSeparator) for _, fi := range dir { if fi.IsDir() { // 忽略目录 continue } //------------------------------- // 把所有db保存为tar格式 //------------------------------- println("name ==>"+fi.Name()) if strings.HasSuffix(fi.Name(), ".db") { //匹配文件 file := dirPath+PthSep+fi.Name() println("file =>", file) if f, err := os.Open(file) ; err != nil { return err }else{ if header, err := tar.FileInfoHeader(fi, "") ; err != nil { return err }else{ header.Name = "/" + header.Name println("header.Name =>"+header.Name) if err = tw.WriteHeader(header) ; err != nil { return err }else{ if n, err := io.Copy(tw, f) ; err != nil { return err }else{ fmt.Printf("n==> %d", n) f.Close() } } } } } } } return nil }