Advertisement
Guest User

Untitled

a guest
Jul 8th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.20 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "archive/tar"
  5.     "bytes"
  6.     "compress/gzip"
  7.     "fmt"
  8.     "io"
  9.     "io/ioutil"
  10.     "os"
  11.     "path/filepath"
  12. )
  13.  
  14. func main() {
  15.     modemBinDir := "bin"
  16.     f, err := os.Create("test-file-handle.tar.gz")
  17.     if err != nil {
  18.         panic(err)
  19.     }
  20.     buff := new(bytes.Buffer)
  21.     mw := io.MultiWriter(buff, f)
  22.     // gzw := gzip.NewWriter(buff)
  23.     gzw := gzip.NewWriter(mw)
  24.     defer gzw.Close()
  25.  
  26.     tw := tar.NewWriter(gzw)
  27.     defer tw.Close()
  28.     if err := filepath.Walk(modemBinDir, func(path string, info os.FileInfo, err error) error {
  29.         if err != nil {
  30.             return err
  31.         }
  32.  
  33.         header, err := tar.FileInfoHeader(info, path)
  34.         if err != nil {
  35.             return err
  36.         }
  37.  
  38.         header.Name = path
  39.         fmt.Println("Header name:", header.Name)
  40.         if err := tw.WriteHeader(header); err != nil {
  41.             return err
  42.         }
  43.  
  44.         //Can't write folders, only their paths
  45.         if !info.Mode().IsRegular() {
  46.             return nil
  47.         }
  48.  
  49.         f, err := os.Open(path)
  50.         if err != nil {
  51.             return err
  52.         }
  53.  
  54.         if n, err := io.Copy(tw, f); err != nil {
  55.             return err
  56.         } else {
  57.             fmt.Println("Wrote", n, "bytes to tar archive")
  58.         }
  59.  
  60.         f.Close()
  61.         return nil
  62.     }); err != nil {
  63.         panic(err)
  64.     }
  65.     ioutil.WriteFile("test-buffer.tar.gz", buff.Bytes(), 0644)
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement