- -0 to -9
- Regulate the speed of compression, where -0 indicates no compression,
-1 (one) indicates the fastest compression
method (less compression) and -9 indicates the slowest
compression method (optimal compression). The default compression level is -6.
- -@
- --names-stdin
- Read names from standard input, one file name per line.
- -A
- --adjust-sfx
- Adjust a self-extracting executable archive.
A self-extracting executable archive is created by prepending the SFX stub to an existing archive.
The -A option tells zip to adjust the entry
offsets stored in the archive to take into account this preamble data.
- -b path
- --temp-path path
- Use the specified path for the temporary zip archive.
- -c
- --entry-comments
- Add one-line comments for each file. File operations (adding, updating) are done
first, and then the utility prompts for one-line comments for each file.
Enter the comment followed by return, or just return for no comment.
- -D
- --no-dir-entries
- Don't create entries in the zip file for directories.
Directory entries are created by default to allow their attributes to be saved in the zip archive.
- -DF
- --difference-archive
- Create an archive that contains all new and changed files since
the original archive was created. For this to work, the input
file list and current directory must be the same as during the
original zip operation.
Note that the timezone environment variable TZ should be set
according to the local timezone in order for this option to work
correctly. A change in timezone since the original archive was
created could result in no times matching and all files being
included.
A possible approach to backing up a directory might be to create
a normal archive of the contents of the directory as a full
backup, then use this option to create incremental backups.
- -d
- --delete
- Delete entries from a zip file.
- -db
- --display-bytes
- Display running byte counts showing the bytes zipped and the bytes to go.
- -dc
- --display-counts
- Display a running count of entries zipped and entries to go.
- -dd
- --display-dots
- Display dots while each entry is zipped (except on ports that have their own progress indicator).
See -ds for setting the dot size.
The default is a dot every 10 MB of input file processed.
The -v option also displays dots, and
this rate is also controlled by -ds.
- -dg
- --display-globaldots
- Display progress dots for the archive instead of for each file.
The command:
zip -qdgds 10m
turns off most output except dots every 10 MB.
- -ds size
- --dot-size size
- Set the amount of input file processed for each dot displayed.
See -dd to enable the displaying of dots.
Setting this option implies -dd.
The size is in the format nm, where n is a number
and m is a multiplier.
Currently m can be k (KB), m (MB), g (GB), or t (TB).
The default is 10 MB.
The -v option also displays dots and now defaults to 10 MB also.
This rate is also controlled by this option.
A size of 0 turns dots off.
This option doesn't control the dots from the Scanning files
message as zip scans for input files.
The dot size for that is fixed at 2 seconds or a fixed number of entries, whichever is longer.
- -du
- --display-usize
- Display the uncompressed size of each entry.
- -dv
- --display-volume
- Display the volume (disk) number each entry is being read from,
if reading an existing archive, and being written to.
- -e
- --encrypt
- Encrypt the contents of the zip archive using a password that you're prompted to enter
(twice) on the terminal.
- -F
- --fix
- Fix the zip file. Use this option if some portions of the file are missing.
- -FF
- --fixfix
- Try harder to fix the zip file.
- -FI
- --fifo
- Normally zip skips reading any FIFOs (named pipes)
encountered, as it can hang if the FIFO isn't being fed.
This option tells zip to read the contents of any FIFO it finds.
- -FS
- --filesync
- Synchronize the contents of an archive with the files on the OS.
Normally when an archive is updated, new files are added and
changed files are updated but files that no longer exist on the
OS are not deleted from the archive. This option enables a
mode that checks entries in the archive against the file system.
If the file time and file size of the entry matches that of the
OS file, the entry is copied from the old archive instead of
being read from the file system and compressed. If the OS file
has changed, the entry is read and compressed as usual. If the
entry in the archive does not match a file on the OS, the entry
is deleted. Enabling this option should create archives that
are the same as new archives, but since existing entries are
copied instead of compressed, updating an existing archive with
-FS can be much faster than creating a new archive.
Also consider using -u for updating an archive.
For this option to work, the archive should be updated from the
same directory it was created in so the relative paths match.
If few files are being copied from the old archive, it may be
faster to create a new archive instead.
Note that the timezone environment variable TZ should be set
according to the local timezone in order for this option to work
correctly. A change in timezone since the original archive was
created could result in no times matching and recompression of
all files.
This option deletes files from the archive.
If you need to preserve the original archive, make a copy of the archive first or
use the --out option to output the updated archive to a new
file. Even though it may be slower, creating a new archive with
a new archive name is safer, avoids mismatches between archive
and OS paths, and is preferred.
- -f
- Freshen (replace) only the files that have changed.
Unlike the update option (-u), this doesn't add files that
aren't already in the zip archive.
- -g
- --grow
- Grow (append to) the specified zip archive, instead of creating
a new one. If this operation fails, zip attempts to restore the
archive to its original state. If the restoration fails, the
archive might become corrupted. This option is ignored when
there's no existing archive or when at least one archive member
must be updated or deleted.
- -h
- -?
- --help
- Display a help message.
- -h2
- --more-help
- Show more help.
- -i
- Include only specified files. For example:
zip -r foo . -i \*.c
This command includes only the files that end in .c
in the current directory and its subdirectories.
- -J
- --junk-sfx
- Strip any prepended data (i.e., a SFX stub) from the file.
- -j
- --junk-paths
- Junk the path to the file; store just the name of the saved file.
- -k
- --DOS-names
- Attempt to convert the names and paths to conform to MSDOS,
store only the MSDOS attribute (just the user write attribute
from Unix), and mark the entry as made under MSDOS (even though
it was not); for compatibility with PKUNZIP under MSDOS which
cannot handle certain names such as those with two dots.
- -L
- --license
- Display the zip license.
- -l
- --tocrlf
- Convert the UNIX end-of-line character LF to the MS-DOS convention, CR LF.
Use -ll to convert the CR LF convention back to the end-of-line character, LF.
Note:
Don't use these options on binary files.
- -la
- --log-append
- Append to the existing logfile. The default is to overwrite.
- -lf logfilepath
- --logfile-path logfilepath
- Open a logfile at the given path. By default any existing file
at that location is overwritten, but if you specify the -la option,
an existing file is opened and the new log information
appended to any existing information. Only warnings and errors
are written to the log unless the -li option is also given, then
all information messages are also written to the log.
- -li
- --log-info
- Include information messages, such as file names being zipped,
in the log. The default is to only include the command line,
any warnings and errors, and the final status.
- -ll
- --from-crlf
- Translate the MSDOS end-of-line CR LF into Unix LF. This option
should not be used on binary files. This option can be used on
MSDOS if the zip file is intended for unzip under Unix. If the
file is converted and the file is later determined to be binary
a warning is issued and the file is probably corrupted. In this
release if -ll detects binary in the first buffer read from a
file, zip now issues a warning and skips line end conversion on
the file. This check seems to catch all binary files tested,
but the original check remains and if a converted file is later
determined to be binary that warning is still issued. A new
algorithm is now being used for binary detection that should
allow line end conversion of text files in UTF-8 and similar
encodings.
- -MM
- --must-match
- All input patterns must match at least one file and all input
files found must be readable. Normally when an input pattern
does not match a file the name not matched warning is issued
and when an input file has been found but later is missing or
not readable a missing or not readable warning is issued. In
either case zip continues creating the archive, with missing or
unreadable new files being skipped and files already in the
archive remaining unchanged. After the archive is created, if
any files were not readable zip returns the OPEN error code (18
on most systems) instead of the normal success return (0 on most
systems). With -MM set, zip exits as soon as an input pattern
is not matched (whenever the name not matched warning would be
issued) or when an input file is not readable. In either case
zip exits with an OPEN error and no archive is created.
This option is useful when a known list of files is to be zipped
so any missing or unreadable files will result in an error. It
is less useful when used with wildcards, but zip will still exit
with an error if any input pattern doesn't match at least one
file and if any matched files are unreadable. If you want to
create the archive anyway and only need to know if files were
skipped, don't use -MM and just check the return code.
Also -lf could be useful.
- -m
- --move
- Move the specified files into the zip file and delete the target directories/files.
If a directory becomes empty after removal of the files, the directory is also removed.
No deletions are done until zip has created the archive without error.
This is useful for conserving disk space, but is potentially dangerous, so we recommend
you use it in combination with -T to test the archive before removing all input files.
- -n suffixes
- --suffixes suffixes
- Don't attempt to compress files named with the suffixes indicated.
You can use either colons or semicolons to separate the suffixes.
- -nw
- --no-wild
- Do not perform internal wildcard processing (shell processing of
wildcards is still done by the shell unless the arguments are escaped).
Useful if a list of paths is being read and no wildcard substitution is desired.
- -O output-file
- --output-file output-file
- Process the archive changes as usual, but instead of updating
the existing archive, output the new archive to output-file.
Useful for updating an archive without changing the existing
archive and the input archive must be a different file than the
output archive.
This option can be used to create updated split archives. It
can also be used with -U to copy entries from an existing
archive to a new archive. See the Examples section below.
Another use is converting zip files from one split size to
another. For instance, to convert an archive with 700 MB CD
splits to one with 2 GB DVD splits, you can use:
zip -s 2g cd-split.zip --out dvd-split.zip
which uses copy mode. See -U below. Also:
zip -s 0 split.zip --out unsplit.zip
will convert a split archive to a single-file archive.
Copy mode will convert stream entries (using data descriptors
and which should be compatible with most unzips) to normal
entries (which should be compatible with all unzips), except if
standard encryption was used. For archives with encrypted
entries, zipcloak will decrypt the entries and convert them to
normal entries.
- -o
- --latest-time
- Set the last modified time on the zip file to match the last modified time
on the zip archive entries.
- -P password
- --password password
- Use the given password to encrypt the archive entries.
Note:
Specifying a plain-text password on the command line or in a script can be a security problem.
- -p
- --paths
- Include relative file paths as part of the names of files stored
in the archive. This is the default. The -j option junks the
paths and just stores the names of the files.
- -q
- --quiet
- Change to quiet mode by eliminating informational messages and command prompts.
- -R
- --recurse-patterns
- Recurse into the directories starting at the current directory.
- -r
- --recurse-paths
- Recurse into the directories.
- -s splitsize
- --split-size splitsize
- Enable creating a split archive and set the split size. A split
archive is an archive that could be split over many files. As
the archive is created, if the size of the archive reaches the
specified split size, that split is closed and the next split
opened. In general all splits but the last will be the split
size and the last will be whatever is left. If the entire
archive is smaller than the split size a single-file archive is
created.
Split archives are stored in numbered files. For example, if
the output archive is named archive and three splits are
required, the resulting archive will be in the three files
archive.z01, archive.z02, and archive.zip.
Do not change the
numbering of these files, or the archive will not be readable as
these are used to determine the order the splits are read.
Split size is a number optionally followed by a multiplier.
Currently the number must be an integer. The multiplier can
currently be one of k (kilobytes), m (megabytes), g (gigabytes),
or t (terabytes). As 64 KB is the minimum split size, numbers
without multipliers default to megabytes.
For example, to create a split archive called foo with the contents of the
bar directory with splits of 670 MB that might be useful for burning
on CDs, you could use this command:
zip -s 670m -r foo bar
Currently the old splits of a split archive are not excluded
from a new archive, but they can be specifically excluded. If
possible, keep the input and output archives out of the path
being zipped when creating split archives.
Using -s without -sp as above creates all the splits where
foo is being written, in this case the current directory. This
split mode updates the splits as the archive is being created,
requiring all splits to remain writable, but creates split
archives that are readable by any unzip that supports split
archives. See -sp below for enabling split pause mode, which
allows splits to be written directly to removable media.
The option -sv can be used to enable verbose splitting and pro-
vide details of how the splitting is being done. The -sb option
can be used to ring the bell when zip pauses for the next split
destination.
Split archives cannot be updated, but see the -O (--out) option
for how a split archive can be updated as it is copied to a new
archive.
A split archive can also be converted into a single-file archive using a split size of 0
or negating the -s option:
zip -s 0 split.zip --out single.zip
Also see -U (--copy) for more on using copy mode.
- -sb
- --split-bell
- If splitting and using split pause mode, ring the bell when zip
pauses for each split destination.
- -sc
- --show-command
- Show the command line starting zip as processed, and then exit.
The command parser permutes the arguments, putting all options
and any values associated with them before any non-option arguments.
This allows an option to appear anywhere in the command
line as long as any values that go with the option go with it.
This option displays the command line as zip sees it, including
any arguments from the environment such as from the ZIPOPT variable.
Where allowed, options later in the command line can
override options earlier in the command line.
- -sf
- --show-files
- Show the files that would be operated on, and then exit. For
instance, if creating a new archive, this will list the files
that would be added. If the option is negated, -sf-, output
only to an open log file. Screen display is not recommended for
large lists.
- -so
- --show-options
- Show all available options supported by zip as compiled on the
current system. As this command reads the option table, it
should include all options. Each line includes the short option
(if defined), the long option (if defined), the format of any
value that goes with the option, if the option can be negated,
and a small description. The value format can be no value,
required value, optional value, single character value, number
value, or a list of values. The output of this option is not
intended to show how to use any option but only show what
options are available.
- -sp
- --split-pause
- If splitting is enabled with -s, enable split pause mode. This
creates split archives as -s does, but stream writing is used so
each split can be closed as soon as it is written and zip will
pause between each split to allow changing split destination or
media.
Though this split mode allows writing splits directly to remov-
able media, it uses stream archive format that may not be read-
able by some unzips. Before relying on splits created with -sp,
test a split archive with the unzip you will be using.
To convert a stream split archive (created with -sp) to a standard archive,
see the --out option.
- -su
- --show-unicode
- As -sf, but also show the Unicode version of the path if it exists.
- -sU
- --show-just-unicode
- As -sf, but only show the Unicode version of the path if it exists,
otherwise show the standard version of the path.
- -sv
- --split-verbose
- Enable various verbose messages while splitting, showing how the
splitting is being done.
- -T
- --test
- Test the integrity of the new zip file.
If the check fails, the old zip file is unchanged,
and (with the -m option) no input files are removed.
- -TT cmd
- --unzip-command cmd
- Use command cmd instead of unzip -tqq to test an archive when
the -T option is used. On Unix, to use a copy of unzip in the
current directory instead of the standard system unzip, you could use:
zip archive file1 file2 -T -TT "./unzip -tqq"
In cmd, {} is replaced by the name of the temporary archive,
otherwise the name of the archive is appended to the end of the
command. The return code is checked for success (0 on Unix).
- -t mmddyyyy
- --from-date mmddyyyy
- Don't operate on files modified prior to the specified date,
where mm is the month, dd
represents the day of the month, and yyyy is the year.
- -tt mmddyyyy
- --before-date mmddyyyy
- Don't operate on files modified after or at the specified date,
where mm is the month, dd
represents the day of the month, and yyyy is the year.
- -U
- --copy-entries
- Copy entries from one archive to another. Requires the --out
option to specify a different output file than the input
archive. Copy mode is the reverse of -d delete. When delete is
being used with --out, the selected entries are deleted from the
archive and all other entries are copied to the new archive,
while copy mode selects the files to include in the new archive.
Unlike -u update, input patterns on the command line are matched
against archive entries only and not the file system files. For
instance:
zip inarchive "*.c" --copy --out outarchive
copies entries with names ending in .c from inarchive
to outarchive.
The wildcard must be escaped on some systems to prevent the shell from substituting names of files from the file
system which may have no relevance to the entries in the archive.
If no input files appear on the command line and --out is used,
copy mode is assumed:
zip inarchive --out outarchive
This is useful for changing split size for instance. Encrypting
and decrypting entries is not yet supported using copy mode.
Use zipcloak for that.
- -UN v
- --unicode v
- Determine what zip should do with Unicode file names.
Version 3.0 of zip,
in addition to the standard file path, includes the UTF-8
translation of the path if the entry path is not entirely 7-bit
ASCII. When an entry is missing the Unicode path, zip reverts
back to the standard file path. The problem with using the
standard path is this path is in the local character set of the
zip that created the entry, which may contain characters that
are not valid in the character set being used by the unzip.
When zip is reading an archive, if an entry also has a Unicode
path, zip now defaults to using the Unicode path to recreate the
standard path using the current local character set.
This option can be used to determine what zip should do with
this path if there is a mismatch between the stored standard
path and the stored UTF-8 path (which can happen if the standard
path was updated). In all cases, if there is a mismatch, it is
assumed that the standard path is more current and zip uses
that. Values for v are:
- q — quit if paths do not match
- w — warn, and then continue with standard path
- i — ignore, and then continue with standard path
- n — no Unicode; do not use Unicode paths
The default is to warn and continue.
Characters that are not valid in the current character set are
escaped as #Uxxxx and #Lxxxxxx, where x is an ASCII character
for a hex digit. The first is used if a 16-bit character number
is sufficient to represent the Unicode character and the second
if the character needs more than 16 bits to represent it's Unicode character code.
Setting -UN to e (escape), as in:
zip archive -sU -UN=e
forces zip to escape all characters that are not printable 7-bit
ASCII.
Normally zip stores UTF-8 directly in the standard path field on
systems where UTF-8 is the current character set and stores the
UTF-8 in the new extra fields otherwise. The option u (UTF-8), as in
zip archive dir -r -UN=UTF8
forces zip to store UTF-8 as native in the archive. Note that
storing UTF-8 directly is the default on Unix systems that support it.
This option could be useful on Windows systems where
the escaped path is too large to be a valid path and the UTF-8
version of the path is smaller, but native UTF-8 is not backward
compatible on Windows systems.
- -u
- --update
- Update only changed or new files.
The -u option with no input file arguments acts like the -f (freshen) option.
- -v
- --verbose
- Be verbose, or print version information.
- -ws
- --wild-stop-dirs
- Wildcards match only at a directory level. Normally zip handles
paths as strings, and given the paths /foo/bar/dir/file1.c
and /foo/bar/file2.c, an input pattern such as /foo/bar/*
normally would match both paths, the * matching dir/file1.c and
file2.c. Note that in the first case a directory boundary (/)
was crossed in the match. With -ws no directory bounds will be
included in the match, making wildcards local to a specific
directory level. So, with -ws enabled, only the second path
would be matched.
When using -ws, use ** to match across directory boundaries as *
does normally.
- -X
- --no-extra
- Don't save extra file attributes (Extended Attributes on OS/2, uid/gid and file times on Unix).
- -x files
- --exclude files
- Explicitly exclude the files specified. For example:
zip -r foo foo -x \*.o
includes the contents of foo in foo.zip,
while it excludes all the files that end in .o.
- -y
- --symlinks
- Store symbolic links as links instead of as the referenced files.
- -Z cm
- --compression-method cm
- Set the default compression method. Currently the main methods
supported by zip are store and deflate. Compression method can
be set to:
- store — setting the compression method to store forces zip to
store entries with no compression. This is generally faster
than compressing entries, but results in no space savings. This
is the same as using -0 (compression level zero).
- deflate — this is the default method for zip.
If zip determines
that storing is better than deflation, the entry will be stored instead.
- bzip2 — if bzip2 support is compiled in, this compression method
also becomes available. Only some modern unzips currently support the bzip2 compression method,
so test the unzip you will be
using before relying on archives using this method (compression
method 12).
For example, to add bar.c to archive foo using bzip2 compression:
zip -Z bzip2 foo bar.c
The compression method can be abbreviated:
zip -Zb foo bar.c
- -z
- --archive-comment
- Prompt for a multiline comment for the entire zip archive.
The comment is ended by a line containing just a period, or an end-of-file condition.
The comment can be taken from a file:
zip -z foo < foowhat