testtar.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package main
  2. import (
  3. "fmt"
  4. "archive/tar"
  5. //"errors"
  6. "io"
  7. "io/ioutil"
  8. "os"
  9. "path/filepath"
  10. "strings"
  11. )
  12. func main() {
  13. f, err := os.OpenFile("hello.tar", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0777)
  14. if err != nil {
  15. panic(err)
  16. }
  17. defer f.Close()
  18. err = Persist(f)
  19. if err != nil {
  20. panic(err)
  21. }
  22. }
  23. func Persist(wr io.Writer) error {
  24. tw := tar.NewWriter(wr)
  25. defer tw.Close()
  26. dirPath := filepath.Dir("/opt/matrix/var/logs/odbserver/log.db")
  27. if dir, err := ioutil.ReadDir( dirPath ) ; err != nil {
  28. return err
  29. } else {
  30. println(dir)
  31. PthSep := string(os.PathSeparator)
  32. for _, fi := range dir {
  33. if fi.IsDir() { // 忽略目录
  34. continue
  35. }
  36. //-------------------------------
  37. // 把所有db保存为tar格式
  38. //-------------------------------
  39. println("name ==>"+fi.Name())
  40. if strings.HasSuffix(fi.Name(), ".db") { //匹配文件
  41. file := dirPath+PthSep+fi.Name()
  42. println("file =>", file)
  43. if f, err := os.Open(file) ; err != nil {
  44. return err
  45. }else{
  46. if header, err := tar.FileInfoHeader(fi, "") ; err != nil {
  47. return err
  48. }else{
  49. header.Name = "/" + header.Name
  50. println("header.Name =>"+header.Name)
  51. if err = tw.WriteHeader(header) ; err != nil {
  52. return err
  53. }else{
  54. if n, err := io.Copy(tw, f) ; err != nil {
  55. return err
  56. }else{
  57. fmt.Printf("n==> %d", n)
  58. f.Close()
  59. }
  60. }
  61. }
  62. }
  63. }
  64. }
  65. }
  66. return nil
  67. }