---
name: "mkzip"
section: "3tcl"
platform: "linux"
package: "tcllib"
version: "2.0+dfsg-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/mkzip"
---

# mkzip(3tcl)

Build a zip archive

```

```

## NAME

zipfile::mkzip - Build a zip archive

## SYNOPSIS

package require **Tcl 8.6 9**

package require **zipfile::mkzip ?1.2.4?**

**::zipfile::mkzip::mkzip** *zipfile* ?**-zipkit**? ?**-runtime** *prefix*? ?**-comment** *string*? ?**-directory** *rootpath*? ?**-prepend-base-directory** *bool*? ?**-exclude** *exclude*? ?**--**? ?*path*...?

```

```

## DESCRIPTION

This package utilizes the zlib functions in Tcl 8.6 to build zip archives.

## API

- **::zipfile::mkzip::mkzip** *zipfile* ?**-zipkit**? ?**-runtime** *prefix*? ?**-comment** *string*? ?**-directory** *rootpath*? ?**-prepend-base-directory** *bool*? ?**-exclude** *exclude*? ?**--**? ?*path*...?

  From *http://wiki.tcl.tk/15158*

  This command constructs a zip archive from a directory tree using nothing but Tcl 8.6 core features. The resulting zip file should be compatible with other **zip** programs - with the possible exception of unicode support. The files generated by this command use utf-8 encoding for all filenames and comments and it has been noticed particularly on Windows the **info-zip** and the Windows built-in zip view have rather poor support for this part of the ZIP file specification. The **7-Zip** program does correctly display utf8 filenames however and the **vfs::zip** package will use these of course.

  If you use

  ```
  ::mkzip::mkzip mystuff.tm -zipkit -directory mystuff.vfs
  ```

-

  it will pack your "*mystuff.vfs/*" virtual filesystem tree into a zip archive with a suitable header such that on unix you may mark it executable and it should run with tclkit. Or you can run it with **tclsh** or **wish** 8.6 if you like.

  To change the executable header, specify the **-runtime** "*preface*" where preface is a file containing code you want prefixed. For instance, on Windows you can create a self-extracting zip archive using

  ```
  mkzip mystuff.exe -directory mystuff.vfs -runtime unzipsfx.exe
  ```

-

  The "*unzipsfx.exe*" is the Info-Zip self-extracting stub.

  Accepted options:

  - **-runtime** path

    This option specifies a file to use as prefix to the actual zip archive. If specified **-zipkit** will be ignored.

  - **-zipkit**

    Instructs the command to generate a prefix which makes the archive a zip-based starkit. Ignored if **-runtime** is present.

  - **-comment** string

    This options specifies a global comment to place into the generated archive.

  - **-directory** path

    This option specifies the directory to place into the generated archive. If specified any argument *path*s are *ignored*.

  - **-prepend-base-directory** bool

    When this option is set the tail of the **-directory** path is prepended to all paths added to the archive.

    The option is ignored when option **-directory** is not specified.

    By default this option is **false**.

  - **-exclude** list

    This option specifies a list of glob patterns. All paths matching at least one of the patterns are not placed into the generated archive. This option defaults to

    ```
        CVS/* */CVS/* *~ ".#*" "*/.#*"
    ```

  - **--**

    This option signals the end of the options, forcing processing of all further words as arguments, even if they begin with a dash character.

  Accepted arguments:

  - path *path*

    Each path is a directory or file to place into the generated archive. Note however that these will be ignored when option **-directory** is specified.

## BUGS, IDEAS, FEEDBACK

This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category *zipfile* of the *Tcllib Trackers* \[http://core.tcl.tk/tcllib/reportlist\]. Please also report any ideas for enhancements you may have for either package and/or documentation.

When proposing code changes, please provide *unified diffs*, i.e the output of **diff -u**.

Note further that *attachments* are strongly preferred over inlined patches. Attachments can be made by going to the **Edit** form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.

## KEYWORDS

decompression, zip

## CATEGORY

File

## COPYRIGHT

```
Copyright (c) 2009 Pat Thoyts
```
