package main import ( "archive/zip" "fmt" "os" "path/filepath" "strings" ) func main() { if len(os.Args) != 3 { fmt.Println("usage: create_zip ") os.Exit(1) } sourceDir := os.Args[1] outputZip := os.Args[2] outFile, err := os.Create(outputZip) if err != nil { panic(err) } defer outFile.Close() w := zip.NewWriter(outFile) defer w.Close() err = filepath.Walk(sourceDir, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil // Skip directory entries entirely } // Skip hidden files/directories (like .DS_Store) if strings.HasPrefix(filepath.Base(path), ".") { return nil } // Get path relative to the source directory relPath, err := filepath.Rel(sourceDir, path) if err != nil { return err } // Ensure forward slashes for zip spec compliance relPath = filepath.ToSlash(relPath) // Create file in zip f, err := w.Create(relPath) if err != nil { return err } // Write content fileContent, err := os.ReadFile(path) if err != nil { return err } _, err = f.Write(fileContent) return err }) if err != nil { panic(err) } }