Skip to content

Instantly share code, notes, and snippets.

@imjasonh
Last active October 28, 2021 06:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save imjasonh/8322584 to your computer and use it in GitHub Desktop.
Save imjasonh/8322584 to your computer and use it in GitHub Desktop.
Go script to strip files matching a suffix from a ZIP file. I used this to strip .mp3 voicemails from my Google Voice takeout data dump, for example. "go run stripzip.go -file username@gmail.com-20140108T184123Z-Voice.zip -exclude .mp3"
package main
import (
"archive/zip"
"flag"
"io"
"log"
"os"
"strings"
)
var file = flag.String("file", "", "ZIP file to strip")
var exclude = flag.String("exclude", "", "File extension to remove")
func main() {
flag.Parse()
r, err := zip.OpenReader(*file)
if err != nil {
log.Fatal("open:", err)
}
outfile, err := os.Create(*file + "-stripped.zip")
if err != nil {
log.Fatal("create:", err)
}
defer outfile.Close()
out := zip.NewWriter(outfile)
defer out.Close()
for _, f := range r.File {
n := f.FileHeader.Name
if strings.HasSuffix(n, *exclude) {
continue
}
w, err := out.CreateHeader(&f.FileHeader)
if err != nil {
log.Fatal("create %s: %v", n, err)
}
r, err := f.Open()
if err != nil {
log.Fatal("open %s: %v", n, err)
}
defer r.Close()
if _, err := io.Copy(w, r); err != nil {
log.Fatal("copy %s: %v", n, err)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment