Skip to content

Instantly share code, notes, and snippets.

@honmaple
Created July 1, 2021 09:28
Show Gist options
  • Save honmaple/e7af0ccd0b0c91de1f15ea12cd0be833 to your computer and use it in GitHub Desktop.
Save honmaple/e7af0ccd0b0c91de1f15ea12cd0be833 to your computer and use it in GitHub Desktop.
package main
import (
"compress/gzip"
"flag"
"fmt"
"io"
"os"
)
func compress(name string, level int) error {
// 由于压缩率影响,需要重新压缩文件
f, err := os.OpenFile(name, os.O_RDONLY, 0644)
if err != nil {
return err
}
defer f.Close()
zr, err := gzip.NewReader(f)
if err != nil {
return err
}
defer zr.Close()
tmpf, err := os.OpenFile(fmt.Sprintf("%s.tmp", name), os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
defer f.Close()
zw, err := gzip.NewWriterLevel(tmpf, level)
if err != nil {
return err
}
defer zw.Close()
if _, err := io.Copy(zw, zr); err != nil {
return err
}
// os.Rename(tmpf.Name(), f.Name())
fmt.Println("rename to success", tmpf.Name())
return nil
}
func main() {
var (
filename string
level int
)
flag.StringVar(&filename, "f", "", "special file")
flag.IntVar(&level, "l", 5, "compress level")
flag.Parse()
if filename != "" {
if err := compress(filename, level); err != nil {
fmt.Println(err.Error())
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment