diff options
Diffstat (limited to 'zip.txt')
-rw-r--r-- | zip.txt | 2027 |
1 files changed, 2027 insertions, 0 deletions
@@ -0,0 +1,2027 @@ +ZIP(1L) ZIP(1L) + +NAME + zip - package and compress (archive) files + +SYNOPSIS + zip [-aABcdDeEfFghjklLmoqrRSTuvVwXyz!@$] [--longoption ...] [-b path] + [-n suffixes] [-t date] [-tt date] [zipfile [file ...]] [-xi list] + + zipcloak (see separate man page) + + zipnote (see separate man page) + + zipsplit (see separate man page) + + Note: Command line processing in zip has been changed to support long + options and handle all options and arguments more consistently. Some + old command lines that depend on command line inconsistencies may no + longer work. + +DESCRIPTION + zip is a compression and file packaging utility for Unix, VMS, MSDOS, + OS/2, Windows 9x/NT/XP, Minix, Atari, Macintosh, Amiga, and Acorn RISC + OS. It is analogous to a combination of the Unix commands tar(1) and + compress(1) and is compatible with PKZIP (Phil Katz's ZIP for MSDOS + systems). + + A companion program (unzip(1L)) unpacks zip archives. The zip and + unzip(1L) programs can work with archives produced by PKZIP (supporting + most PKZIP features up to PKZIP version 4.6), and PKZIP and PKUNZIP can + work with archives produced by zip (with some exceptions, notably + streamed archives, but recent changes in the zip file standard may + facilitate better compatibility). zip version 3.0 is compatible with + PKZIP 2.04 and also supports the Zip64 extensions of PKZIP 4.5 which + allow archives as well as files to exceed the previous 2 GB limit (4 GB + in some cases). zip also now supports bzip2 compression if the bzip2 + library is included when zip is compiled. Note that PKUNZIP 1.10 can- + not extract files produced by PKZIP 2.04 or zip 3.0. You must use PKUN- + ZIP 2.04g or unzip 5.0p1 (or later versions) to extract them. + + See the EXAMPLES section at the bottom of this page for examples of + some typical uses of zip. + + Large Archives and Zip64. zip automatically uses the Zip64 extensions + when files larger than 4 GB are added to an archive, an archive con- + taining Zip64 entries is updated (if the resulting archive still needs + Zip64), the size of the archive will exceed 4 GB, or when the number of + entries in the archive will exceed about 64K. Zip64 is also used for + archives streamed from standard input as the size of such archives are + not known in advance, but the option -fz- can be used to force zip to + create PKZIP 2 compatible archives (as long as Zip64 extensions are not + needed). You must use a PKZIP 4.5 compatible unzip, such as unzip 6.0 + or later, to extract files using the Zip64 extensions. + + In addition, streamed archives, entries encrypted with standard encryp- + tion, or split archives created with the pause option may not be com- + patible with PKZIP as data descriptors are used and PKZIP at the time + of this writing does not support data descriptors (but recent changes + in the PKWare published zip standard now include some support for the + data descriptor format zip uses). + + Mac OS X. Though previous Mac versions had their own zip port, zip + supports Mac OS X as part of the Unix port and most Unix features + apply. References to "MacOS" below generally refer to MacOS versions + older than OS X. Support for some Mac OS features in the Unix Mac OS X + port, such as resource forks, is expected in the next zip release. + + For a brief help on zip and unzip, run each without specifying any + parameters on the command line. + +USE + The program is useful for packaging a set of files for distribution; + for archiving files; and for saving disk space by temporarily compress- + ing unused files or directories. + + The zip program puts one or more compressed files into a single zip + archive, along with information about the files (name, path, date, time + of last modification, protection, and check information to verify file + integrity). An entire directory structure can be packed into a zip + archive with a single command. Compression ratios of 2:1 to 3:1 are + common for text files. zip has one compression method (deflation) and + can also store files without compression. (If bzip2 support is added, + zip can also compress using bzip2 compression, but such entries require + a reasonably modern unzip to decompress. When bzip2 compression is + selected, it replaces deflation as the default method.) zip automati- + cally chooses the better of the two (deflation or store or, if bzip2 is + selected, bzip2 or store) for each file to be compressed. + + Command format. The basic command format is + + zip options archive inpath inpath ... + + where archive is a new or existing zip archive and inpath is a direc- + tory or file path optionally including wildcards. When given the name + of an existing zip archive, zip will replace identically named entries + in the zip archive (matching the relative names as stored in the + archive) or add entries for new names. For example, if foo.zip exists + and contains foo/file1 and foo/file2, and the directory foo contains + the files foo/file1 and foo/file3, then: + + zip -r foo.zip foo + + or more concisely + + zip -r foo foo + + will replace foo/file1 in foo.zip and add foo/file3 to foo.zip. After + this, foo.zip contains foo/file1, foo/file2, and foo/file3, with + foo/file2 unchanged from before. + + So if before the zip command is executed foo.zip has: + + foo/file1 foo/file2 + + and directory foo has: + + file1 file3 + + then foo.zip will have: + + foo/file1 foo/file2 foo/file3 + + where foo/file1 is replaced and foo/file3 is new. + + -@ file lists. If a file list is specified as -@ [Not on MacOS], zip + takes the list of input files from standard input instead of from the + command line. For example, + + zip -@ foo + + will store the files listed one per line on stdin in foo.zip. + + Under Unix, this option can be used to powerful effect in conjunction + with the find (1) command. For example, to archive all the C source + files in the current directory and its subdirectories: + + find . -name "*.[ch]" -print | zip source -@ + + (note that the pattern must be quoted to keep the shell from expanding + it). + + Streaming input and output. zip will also accept a single dash ("-") + as the zip file name, in which case it will write the zip file to stan- + dard output, allowing the output to be piped to another program. For + example: + + zip -r - . | dd of=/dev/nrst0 obs=16k + + would write the zip output directly to a tape with the specified block + size for the purpose of backing up the current directory. + + zip also accepts a single dash ("-") as the name of a file to be com- + pressed, in which case it will read the file from standard input, + allowing zip to take input from another program. For example: + + tar cf - . | zip backup - + + would compress the output of the tar command for the purpose of backing + up the current directory. This generally produces better compression + than the previous example using the -r option because zip can take + advantage of redundancy between files. The backup can be restored using + the command + + unzip -p backup | tar xf - + + When no zip file name is given and stdout is not a terminal, zip acts + as a filter, compressing standard input to standard output. For exam- + ple, + + tar cf - . | zip | dd of=/dev/nrst0 obs=16k + + is equivalent to + + tar cf - . | zip - - | dd of=/dev/nrst0 obs=16k + + zip archives created in this manner can be extracted with the program + funzip which is provided in the unzip package, or by gunzip which is + provided in the gzip package (but some gunzip may not support this if + zip used the Zip64 extensions). For example: + + dd if=/dev/nrst0 ibs=16k | funzip | tar xvf - + + The stream can also be saved to a file and unzip used. + + If Zip64 support for large files and archives is enabled and zip is + used as a filter, zip creates a Zip64 archive that requires a PKZIP 4.5 + or later compatible unzip to read it. This is to avoid amgibuities in + the zip file structure as defined in the current zip standard (PKWARE + AppNote) where the decision to use Zip64 needs to be made before data + is written for the entry, but for a stream the size of the data is not + known at that point. If the data is known to be smaller than 4 GB, the + option -fz- can be used to prevent use of Zip64, but zip will exit with + an error if Zip64 was in fact needed. zip 3 and unzip 6 and later can + read archives with Zip64 entries. Also, zip removes the Zip64 exten- + sions if not needed when archive entries are copied (see the -U + (--copy) option). + + When directing the output to another file, note that all options should + be before the redirection including -x. For example: + + zip archive "*.h" "*.c" -x donotinclude.h orthis.h > tofile + + Zip files. When changing an existing zip archive, zip will write a + temporary file with the new contents, and only replace the old one when + the process of creating the new version has been completed without + error. + + If the name of the zip archive does not contain an extension, the + extension .zip is added. If the name already contains an extension + other than .zip, the existing extension is kept unchanged. However, + split archives (archives split over multiple files) require the .zip + extension on the last split. + + Scanning and reading files. When zip starts, it scans for files to + process (if needed). If this scan takes longer than about 5 seconds, + zip will display a "Scanning files" message and start displaying + progress dots every 2 seconds or every so many entries processed, + whichever takes longer. If there is more than 2 seconds between dots + it could indicate that finding each file is taking time and could mean + a slow network connection for example. (Actually the initial file scan + is a two-step process where the directory scan is followed by a sort + and these two steps are separated with a space in the dots. If updat- + ing an existing archive, a space also appears between the existing file + scan and the new file scan.) The scanning files dots are not con- + trolled by the -ds dot size option, but the dots are turned off by the + -q quiet option. The -sf show files option can be used to scan for + files and get the list of files scanned without actually processing + them. + + If zip is not able to read a file, it issues a warning but continues. + See the -MM option below for more on how zip handles patterns that are + not matched and files that are not readable. If some files were + skipped, a warning is issued at the end of the zip operation noting how + many files were read and how many skipped. + + Command modes. zip now supports two distinct types of command modes, + external and internal. The external modes (add, update, and freshen) + read files from the file system (as well as from an existing archive) + while the internal modes (delete and copy) operate exclusively on + entries in an existing archive. + + add + Update existing entries and add new files. If the archive does + not exist create it. This is the default mode. + + update (-u) + Update existing entries if newer on the file system and add new + files. If the archive does not exist issue warning then create + a new archive. + + freshen (-f) + Update existing entries of an archive if newer on the file sys- + tem. Does not add new files to the archive. + + delete (-d) + Select entries in an existing archive and delete them. + + copy (-U) + Select entries in an existing archive and copy them to a new + archive. This new mode is similar to update but command line + patterns select entries in the existing archive rather than + files from the file system and it uses the --out option to write + the resulting archive to a new file rather than update the + existing archive, leaving the original archive unchanged. + + The new File Sync option (-FS) is also considered a new mode, though it + is similar to update. This mode synchronizes the archive with the + files on the OS, only replacing files in the archive if the file time + or size of the OS file is different, adding new files, and deleting + entries from the archive where there is no matching file. As this mode + can delete entries from the archive, consider making a backup copy of + the archive. + + Also see -DF for creating difference archives. + + See each option description below for details and the EXAMPLES section + below for examples. + + Split archives. zip version 3.0 and later can create split archives. + A split archive is a standard zip archive split over multiple files. + (Note that split archives are not just archives split in to pieces, as + the offsets of entries are now based on the start of each split. Con- + catenating the pieces together will invalidate these offsets, but unzip + can usually deal with it. zip will usually refuse to process such a + spliced archive unless the -FF fix option is used to fix the offsets.) + + One use of split archives is storing a large archive on multiple remov- + able media. For a split archive with 20 split files the files are typ- + ically named (replace ARCHIVE with the name of your archive) + ARCHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Note that the + last file is the .zip file. In contrast, spanned archives are the + original multi-disk archive generally requiring floppy disks and using + volume labels to store disk numbers. zip supports split archives but + not spanned archives, though a procedure exists for converting split + archives of the right size to spanned archives. The reverse is also + true, where each file of a spanned archive can be copied in order to + files with the above names to create a split archive. + + Use -s to set the split size and create a split archive. The size is + given as a number followed optionally by one of k (kB), m (MB), g (GB), + or t (TB) (the default is m). The -sp option can be used to pause zip + between splits to allow changing removable media, for example, but read + the descriptions and warnings for both -s and -sp below. + + Though zip does not update split archives, zip provides the new option + -O (--output-file or --out) to allow split archives to be updated and + saved in a new archive. For example, + + zip inarchive.zip foo.c bar.c --out outarchive.zip + + reads archive inarchive.zip, even if split, adds the files foo.c and + bar.c, and writes the resulting archive to outarchive.zip. If inar- + chive.zip is split then outarchive.zip defaults to the same split size. + Be aware that if outarchive.zip and any split files that are created + with it already exist, these are always overwritten as needed without + warning. This may be changed in the future. + + Unicode. Though the zip standard requires storing paths in an archive + using a specific character set, in practice zips have stored paths in + archives in whatever the local character set is. This creates problems + when an archive is created or updated on a system using one character + set and then extracted on another system using a different character + set. When compiled with Unicode support enabled on platforms that sup- + port wide characters, zip now stores, in addition to the standard local + path for backward compatibility, the UTF-8 translation of the path. + This provides a common universal character set for storing paths that + allows these paths to be fully extracted on other systems that support + Unicode and to match as close as possible on systems that don't. + + On Win32 systems where paths are internally stored as Unicode but rep- + resented in the local character set, it's possible that some paths will + be skipped during a local character set directory scan. zip with Uni- + code support now can read and store these paths. Note that Win 9x sys- + tems and FAT file systems don't fully support Unicode. + + Be aware that console windows on Win32 and Unix, for example, sometimes + don't accurately show all characters due to how each operating system + switches in character sets for display. However, directory navigation + tools should show the correct paths if the needed fonts are loaded. + + Command line format. This version of zip has updated command line pro- + cessing and support for long options. + + Short options take the form + + -s[-][s[-]...][value][=value][ value] + + where s is a one or two character short option. A short option that + takes a value is last in an argument and anything after it is taken as + the value. If the option can be negated and "-" immediately follows + the option, the option is negated. Short options can also be given as + separate arguments + + -s[-][value][=value][ value] -s[-][value][=value][ value] ... + + Short options in general take values either as part of the same argu- + ment or as the following argument. An optional = is also supported. + So + + -ttmmddyyyy + + and + + -tt=mmddyyyy + + and + + -tt mmddyyyy + + all work. The -x and -i options accept lists of values and use a + slightly different format described below. See the -x and -i options. + + Long options take the form + + --longoption[-][=value][ value] + + where the option starts with --, has a multicharacter name, can include + a trailing dash to negate the option (if the option supports it), and + can have a value (option argument) specified by preceeding it with = + (no spaces). Values can also follow the argument. So + + --before-date=mmddyyyy + + and + + --before-date mmddyyyy + + both work. + + Long option names can be shortened to the shortest unique abbreviation. + See the option descriptions below for which support long options. To + avoid confusion, avoid abbreviating a negatable option with an embedded + dash ("-") at the dash if you plan to negate it (the parser would con- + sider a trailing dash, such as for the option --some-option using + --some- as the option, as part of the name rather than a negating + dash). This may be changed to force the last dash in --some- to be + negating in the future. + +OPTIONS + -a + --ascii + [Systems using EBCDIC] Translate file to ASCII format. + + -A + --adjust-sfx + Adjust 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 "pream- + ble" data. + + Note: self-extracting archives for the Amiga are a special case. At + present, only the Amiga port of zip is capable of adjusting or updating + these without corrupting them. -J can be used to remove the SFX stub if + other updates need to be made. + + -AC + --archive-clear + [WIN32] Once archive is created (and tested if -T is used, + which is recommended), clear the archive bits of files pro- + cessed. WARNING: Once the bits are cleared they are cleared. + You may want to use the -sf show files option to store the list + of files processed in case the archive operation must be + repeated. Also consider using the -MM must match option. Be + sure to check out -DF as a possibly better way to do incremental + backups. + + -AS + --archive-set + [WIN32] Only include files that have the archive bit set. + Directories are not stored when -AS is used, though by default + the paths of entries, including directories, are stored as usual + and can be used by most unzips to recreate directories. + + The archive bit is set by the operating system when a file is + modified and, if used with -AC, -AS can provide an incremental + backup capability. However, other applications can modify the + archive bit and it may not be a reliable indicator of which + files have changed since the last archive operation. Alterna- + tive ways to create incremental backups are using -t to use file + dates, though this won't catch old files copied to directories + being archived, and -DF to create a differential archive. + + -B + --binary + [VM/CMS and MVS] force file to be read binary (default is text). + + -Bn [TANDEM] set Edit/Enscribe formatting options with n defined as + bit 0: Don't add delimiter (Edit/Enscribe) + bit 1: Use LF rather than CR/LF as delimiter (Edit/Enscribe) + bit 2: Space fill record to maximum record length (Enscribe) + bit 3: Trim trailing space (Enscribe) + bit 8: Force 30K (Expand) large read for unstructured files + + -b path + --temp-path path + Use the specified path for the temporary zip archive. For exam- + ple: + + zip -b /tmp stuff * + + will put the temporary zip archive in the directory /tmp, copy- + ing over stuff.zip to the current directory when done. This + option is useful when updating an existing archive and the file + system containing this old archive does not have enough space to + hold both old and new archives at the same time. It may also be + useful when streaming in some cases to avoid the need for data + descriptors. Note that using this option may require zip take + additional time to copy the archive file when done to the desti- + nation file system. + + -c + --entry-comments + Add one-line comments for each file. File operations (adding, + updating) are done first, and the user is then prompted for a + one-line comment for each file. Enter the comment followed by + return, or just return for no comment. + + -C + --preserve-case + [VMS] Preserve case all on VMS. Negating this option (-C-) + downcases. + + -C2 + --preserve-case-2 + [VMS] Preserve case ODS2 on VMS. Negating this option (-C2-) + downcases. + + -C5 + --preserve-case-5 + [VMS] Preserve case ODS5 on VMS. Negating this option (-C5-) + downcases. + + -d + --delete + Remove (delete) entries from a zip archive. For example: + + zip -d foo foo/tom/junk foo/harry/\* \*.o + + will remove the entry foo/tom/junk, all of the files that start + with foo/harry/, and all of the files that end with .o (in any + path). Note that shell pathname expansion has been inhibited + with backslashes, so that zip can see the asterisks, enabling + zip to match on the contents of the zip archive instead of the + contents of the current directory. (The backslashes are not + used on MSDOS-based platforms.) Can also use quotes to escape + the asterisks as in + + zip -d foo foo/tom/junk "foo/harry/*" "*.o" + + Not escaping the asterisks on a system where the shell expands + wildcards could result in the asterisks being converted to a + list of files in the current directory and that list used to + delete entries from the archive. + + Under MSDOS, -d is case sensitive when it matches names in the + zip archive. This requires that file names be entered in upper + case if they were zipped by PKZIP on an MSDOS system. (We con- + sidered making this case insensitive on systems where paths were + case insensitive, but it is possible the archive came from a + system where case does matter and the archive could include both + Bar and bar as separate files in the archive.) But see the new + option -ic to ignore case in the archive. + + -db + --display-bytes + Display running byte counts showing the bytes zipped and the + bytes to go. + + -dc + --display-counts + Display 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 below for setting + dot size. The default is a dot every 10 MB of input file pro- + cessed. The -v option also displays dots (previously at a much + higher rate than this but now -v also defaults to 10 MB) and + this rate is also controlled by -ds. + + -df + --datafork + [MacOS] Include only data-fork of files zipped into the archive. + Good for exporting files to foreign operating-systems. + Resource-forks will be ignored at all. + + -dg + --display-globaldots + Display progress dots for the archive instead of for each file. + The command + + zip -qdgds 10m + + will turn off most output except dots every 10 MB. + + -ds size + --dot-size size + Set amount of input file processed for each dot displayed. See + -dd to enable displaying dots. Setting this option implies -dd. + Size is in the format nm where n is a number and m is a multi- + plier. Currently m can be k (KB), m (MB), g (GB), or t (TB), so + if n is 100 and m is k, size would be 100k which is 100 KB. 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 does not 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. + + -D + --no-dir-entries + Do not create entries in the zip archive for directories. + Directory entries are created by default so that their + attributes can be saved in the zip archive. The environment + variable ZIPOPT can be used to change the default options. For + example under Unix with sh: + + ZIPOPT="-D"; export ZIPOPT + + (The variable ZIPOPT can be used for any option, including -i + and -x using a new option format detailed below, and can include + several options.) The option -D is a shorthand for -x "*/" but + the latter previously could not be set as default in the ZIPOPT + environment variable as the contents of ZIPOPT gets inserted + near the beginning of the command line and the file list had to + end at the end of the line. + + This version of zip does allow -x and -i options in ZIPOPT if + the form + + -x file file ... @ + + is used, where the @ (an argument that is just @) terminates the + list. + + -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. + + For example, if the existing archive was created using + + zip -r foofull . + + from the bar directory, then the command + + zip -r foofull . -DF --out foonew + + also from the bar directory creates the archive foonew with just + the files not in foofull and the files where the size or file + time of the files do not match those in foofull. + + 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. + + -e + --encrypt + Encrypt the contents of the zip archive using a password which + is entered on the terminal in response to a prompt (this will + not be echoed; if standard error is not a tty, zip will exit + with an error). The password prompt is repeated to save the + user from typing errors. + + -E + --longnames + [OS/2] Use the .LONGNAME Extended Attribute (if found) as file- + name. + + -f + --freshen + Replace (freshen) an existing entry in the zip archive only if + it has been modified more recently than the version already in + the zip archive; unlike the update option (-u) this will not add + files that are not already in the zip archive. For example: + + zip -f foo + + This command should be run from the same directory from which + the original zip command was run, since paths stored in zip + archives are always relative. + + Note that the timezone environment variable TZ should be set + according to the local timezone in order for the -f, -u and -o + options to work correctly. + + The reasons behind this are somewhat subtle but have to do with + the differences between the Unix-format file times (always in + GMT) and most of the other operating systems (always local time) + and the necessity to compare the two. A typical TZ value is + ``MET-1MEST'' (Middle European time with automatic adjustment + for ``summertime'' or Daylight Savings Time). + + The format is TTThhDDD, where TTT is the time zone such as MET, + hh is the difference between GMT and local time such as -1 + above, and DDD is the time zone when daylight savings time is in + effect. Leave off the DDD if there is no daylight savings time. + For the US Eastern time zone EST5EDT. + + -F + --fix + -FF + --fixfix + Fix the zip archive. The -F option can be used if some portions + of the archive are missing, but requires a reasonably intact + central directory. The input archive is scanned as usual, but + zip will ignore some problems. The resulting archive should be + valid, but any inconsistent entries will be left out. + + When doubled as in -FF, the archive is scanned from the begin- + ning and zip scans for special signatures to identify the limits + between the archive members. The single -F is more reliable if + the archive is not too much damaged, so try this option first. + + If the archive is too damaged or the end has been truncated, you + must use -FF. This is a change from zip 2.32, where the -F + option is able to read a truncated archive. The -F option now + more reliably fixes archives with minor damage and the -FF + option is needed to fix archives where -F might have been suffi- + cient before. + + Neither option will recover archives that have been incorrectly + transferred in ascii mode instead of binary. After the repair, + the -t option of unzip may show that some files have a bad CRC. + Such files cannot be recovered; you can remove them from the + archive using the -d option of zip. + + Note that -FF may have trouble fixing archives that include an + embedded zip archive that was stored (without compression) in + the archive and, depending on the damage, it may find the + entries in the embedded archive rather than the archive itself. + Try -F first as it does not have this problem. + + The format of the fix commands have changed. For example, to + fix the damaged archive foo.zip, + + zip -F foo --out foofix + + tries to read the entries normally, copying good entries to the + new archive foofix.zip. If this doesn't work, as when the + archive is truncated, or if some entries you know are in the + archive are missed, then try + + zip -FF foo --out foofixfix + + and compare the resulting archive to the archive created by -F. + The -FF option may create an inconsistent archive. Depending on + what is damaged, you can then use the -F option to fix that + archive. + + A split archive with missing split files can be fixed using -F + if you have the last split of the archive (the .zip file). If + this file is missing, you must use -FF to fix the archive, which + will prompt you for the splits you have. + + Currently the fix options can't recover entries that have a bad + checksum or are otherwise damaged. + + -FI + --fifo [Unix] Normally zip skips reading any FIFOs (named pipes) + encountered, as zip can hang if the FIFO is not 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 new + 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 con- + sider 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 pre- + serve 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. + + -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 the zip help information (this also appears if zip is + run with no arguments). + + -h2 + --more-help + Display extended help including more on command line format, + pattern matching, and more obscure options. + + -i files + --include files + Include only the specified files, as in: + + zip -r foo . -i \*.c + + which will include only the files that end in .c in the current + directory and its subdirectories. (Note for PKZIP users: the + equivalent command is + + pkzip -rP foo *.c + + PKZIP does not allow recursion in directories other than the + current one.) The backslash avoids the shell filename substitu- + tion, so that the name matching is performed by zip at all + directory levels. [This is for Unix and other systems where \ + escapes the next character. For other systems where the shell + does not process * do not use \ and the above is + + zip -r foo . -i *.c + + Examples are for Unix unless otherwise specified.] So to + include dir, a directory directly under the current directory, + use + + zip -r foo . -i dir/\* + + or + + zip -r foo . -i "dir/*" + + to match paths such as dir/a and dir/b/file.c [on ports without + wildcard expansion in the shell such as MSDOS and Windows + + zip -r foo . -i dir/* + + is used.] Note that currently the trailing / is needed for + directories (as in + + zip -r foo . -i dir/ + + to include directory dir). + + The long option form of the first example is + + zip -r foo . --include \*.c + + and does the same thing as the short option form. + + Though the command syntax used to require -i at the end of the + command line, this version actually allows -i (or --include) + anywhere. The list of files terminates at the next argument + starting with -, the end of the command line, or the list termi- + nator @ (an argument that is just @). So the above can be given + as + + zip -i \*.c @ -r foo . + + for example. There must be a space between the option and the + first file of a list. For just one file you can use the single + value form + + zip -i\*.c -r foo . + + (no space between option and value) or + + zip --include=\*.c -r foo . + + as additional examples. The single value forms are not recom- + mended because they can be confusing and, in particular, the + -ifile format can cause problems if the first letter of file + combines with i to form a two-letter option starting with i. + Use -sc to see how your command line will be parsed. + + Also possible: + + zip -r foo . -i@include.lst + + which will only include the files in the current directory and + its subdirectories that match the patterns in the file + include.lst. + + Files to -i and -x are patterns matching internal archive paths. + See -R for more on patterns. + + -I + --no-image + [Acorn RISC OS] Don't scan through Image files. When used, zip + will not consider Image files (eg. DOS partitions or Spark + archives when SparkFS is loaded) as directories but will store + them as single files. + + For example, if you have SparkFS loaded, zipping a Spark archive + will result in a zipfile containing a directory (and its con- + tent) while using the 'I' option will result in a zipfile con- + taining a Spark archive. Obviously this second case will also be + obtained (without the 'I' option) if SparkFS isn't loaded. + + -ic + --ignore-case + [VMS, WIN32] Ignore case when matching archive entries. This + option is only available on systems where the case of files is + ignored. On systems with case-insensitive file systems, case is + normally ignored when matching files on the file system but is + not ignored for -f (freshen), -d (delete), -U (copy), and simi- + lar modes when matching against archive entries (currently -f + ignores case on VMS) because archive entries can be from systems + where case does matter and names that are the same except for + case can exist in an archive. The -ic option makes all matching + case insensitive. This can result in multiple archive entries + matching a command line pattern. + + -j + --junk-paths + Store just the name of a saved file (junk the path), and do not + store directory names. By default, zip will store the full path + (relative to the current directory). + + -jj + --absolute-path + [MacOS] record Fullpath (+ Volname). The complete path including + volume will be stored. By default the relative path will be + stored. + + -J + --junk-sfx + Strip any prepended data (e.g. a SFX stub) from the archive. + + -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 + --to-crlf + Translate the Unix end-of-line character LF into the MSDOS con- + vention CR LF. This option should not be used on binary files. + This option can be used on Unix if the zip file is intended for + PKUNZIP under MSDOS. If the input files already contain CR LF, + this option adds an extra CR. This is to ensure that unzip -a on + Unix will get back an exact copy of the original file, to undo + the effect of zip -l. See -ll for how binary files are handled. + + -la + --log-append + Append to existing logfile. 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 the -la option will result + in an existing file being 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. + + -L + --license + Display the zip license. + + -m + --move + Move the specified files into the zip archive; actually, this + deletes the target directories/files after making the specified + zip archive. 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 it is + recommended to use it in combination with -T to test the archive + before removing all input files. + + -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. + + -n suffixes + --suffixes suffixes + Do not attempt to compress files named with the given suffixes. + Such files are simply stored (0% compression) in the output zip + file, so that zip doesn't waste its time trying to compress + them. The suffixes are separated by either colons or semi- + colons. For example: + + zip -rn .Z:.zip:.tiff:.gif:.snd foo foo + + will copy everything from foo into foo.zip, but will store any + files that end in .Z, .zip, .tiff, .gif, or .snd without trying + to compress them (image and sound files often have their own + specialized compression methods). By default, zip does not com- + press files with extensions in the list + .Z:.zip:.zoo:.arc:.lzh:.arj. Such files are stored directly in + the output archive. The environment variable ZIPOPT can be used + to change the default options. For example under Unix with csh: + + setenv ZIPOPT "-n .gif:.zip" + + To attempt compression on all files, use: + + zip -n : foo + + The maximum compression option -9 also attempts compression on + all files regardless of extension. + + On Acorn RISC OS systems the suffixes are actually filetypes (3 + hex digit format). By default, zip does not compress files with + filetypes in the list DDC:D96:68E (i.e. Archives, CFS files and + PackDir files). + + -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 wild- + card substitution is desired. + + -N + --notes + [Amiga, MacOS] Save Amiga or MacOS filenotes as zipfile com- + ments. They can be restored by using the -N option of unzip. If + -c is used also, you are prompted for comments only for those + files that do not have filenotes. + + -o + --latest-time + Set the "last modified" time of the zip archive to the latest + (oldest) "last modified" time found among the entries in the zip + archive. This can be used without any other operations, if + desired. For example: + + zip -o foo + + will change the last modified time of foo.zip to the latest time + of the entries in foo.zip. + + -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, 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. + + -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. + + -P password + --password password + Use password to encrypt zipfile entries (if any). THIS IS INSE- + CURE! Many multi-user operating systems provide ways for any + user to see the current command line of any other user; even on + stand-alone systems there is always the threat of over-the- + shoulder peeking. Storing the plaintext password as part of a + command line in an automated script is even worse. Whenever + possible, use the non-echoing, interactive prompt to enter pass- + words. (And where security is truly important, use strong + encryption such as Pretty Good Privacy instead of the relatively + weak standard encryption provided by zipfile utilities.) + + -q + --quiet + Quiet mode; eliminate informational messages and comment + prompts. (Useful, for example, in shell scripts and background + tasks). + + -Qn + --Q-flag n + [QDOS] store information about the file in the file header with + n defined as + bit 0: Don't add headers for any file + bit 1: Add headers for all files + bit 2: Don't wait for interactive key press on exit + + -r + --recurse-paths + Travel the directory structure recursively; for example: + + zip -r foo.zip foo + + or more concisely + + zip -r foo foo + + In this case, all the files and directories in foo are saved in + a zip archive named foo.zip, including files with names starting + with ".", since the recursion does not use the shell's file-name + substitution mechanism. If you wish to include only a specific + subset of the files in directory foo and its subdirectories, use + the -i option to specify the pattern of files to be included. + You should not use -r with the name ".*", since that matches + ".." which will attempt to zip up the parent directory (proba- + bly not what was intended). + + Multiple source directories are allowed as in + + zip -r foo foo1 foo2 + + which first zips up foo1 and then foo2, going down each direc- + tory. + + Note that while wildcards to -r are typically resolved while + recursing down directories in the file system, any -R, -x, and + -i wildcards are applied to internal archive pathnames once the + directories are scanned. To have wildcards apply to files in + subdirectories when recursing on Unix and similar systems where + the shell does wildcard substitution, either escape all wild- + cards or put all arguments with wildcards in quotes. This lets + zip see the wildcards and match files in subdirectories using + them as it recurses. + + -R + --recurse-patterns + Travel the directory structure recursively starting at the cur- + rent directory; for example: + + zip -R foo "*.c" + + In this case, all the files matching *.c in the tree starting at + the current directory are stored into a zip archive named + foo.zip. Note that *.c will match file.c, a/file.c and a/b/.c. + More than one pattern can be listed as separate arguments. Note + for PKZIP users: the equivalent command is + + pkzip -rP foo *.c + + Patterns are relative file paths as they appear in the archive, + or will after zipping, and can have optional wildcards in them. + For example, given the current directory is foo and under it are + directories foo1 and foo2 and in foo1 is the file bar.c, + + zip -R foo/* + + will zip up foo, foo/foo1, foo/foo1/bar.c, and foo/foo2. + + zip -R */bar.c + + will zip up foo/foo1/bar.c. See the note for -r on escaping + wildcards. + + -RE + --regex + [WIN32] Before zip 3.0, regular expression list matching was + enabled by default on Windows platforms. Because of confusion + resulting from the need to escape "[" and "]" in names, it is + now off by default for Windows so "[" and "]" are just normal + characters in names. This option enables [] matching again. + + -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 64k is the minimum split size, numbers + without multipliers default to megabytes. For example, to cre- + ate 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, the command: + + zip -s 670m -r foo bar + + could be used. + + 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 exit. The + new command parser permutes the arguments, putting all options + and any values associated with them before any non-option argu- + ments. 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 vari- + able. 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, 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 stan- + dard archive see the --out option. + + -su + --show-unicode + As -sf, but also show Unicode version of the path if exists. + + -sU + --show-just-unicode + As -sf, but only show Unicode version of the path if 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. + + -S + --system-hidden + [MSDOS, OS/2, WIN32 and ATARI] Include system and hidden files. + [MacOS] Includes finder invisible files, which are ignored oth- + erwise. + + -t mmddyyyy + --from-date mmddyyyy + Do not operate on files modified prior to the specified date, + where mm is the month (00-12), dd is the day of the month + (01-31), and yyyy is the year. The ISO 8601 date format + yyyy-mm-dd is also accepted. For example: + + zip -rt 12071991 infamy foo + + zip -rt 1991-12-07 infamy foo + + will add all the files in foo and its subdirectories that were + last modified on or after 7 December 1991, to the zip archive + infamy.zip. + + -tt mmddyyyy + --before-date mmddyyyy + Do not operate on files modified after or at the specified date, + where mm is the month (00-12), dd is the day of the month + (01-31), and yyyy is the year. The ISO 8601 date format + yyyy-mm-dd is also accepted. For example: + + zip -rtt 11301995 infamy foo + + zip -rtt 1995-11-30 infamy foo + + will add all the files in foo and its subdirectories that were + last modified before 30 November 1995, to the zip archive + infamy.zip. + + -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, 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). + + -u + --update + Replace (update) an existing entry in the zip archive only if it + has been modified more recently than the version already in the + zip archive. For example: + + zip -u stuff * + + will add any new files in the current directory, and update any + files which have been modified since the zip archive stuff.zip + was last created/modified (note that zip will not try to pack + stuff.zip into itself when you do this). + + Note that the -u option with no input file arguments acts like + the -f (freshen) option. + + -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 out- + archive. The wildcard must be escaped on some systems to pre- + vent 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. zip 3.0, + in addition to the standard file path, now 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, continue with standard path + + i - ignore, 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 Uni- + code 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 sup- + port 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. + + -v + --verbose + Verbose mode or print diagnostic version info. + + Normally, when applied to real operations, this option enables + the display of a progress indicator during compression (see -dd + for more on dots) and requests verbose diagnostic info about + zipfile structure oddities. + + However, when -v is the only command line argument a diagnostic + screen is printed instead. This should now work even if stdout + is redirected to a file, allowing easy saving of the information + for sending with bug reports to Info-ZIP. The version screen + provides the help screen header with program name, version, and + release date, some pointers to the Info-ZIP home and distribu- + tion sites, and shows information about the target environment + (compiler type and version, OS version, compilation date and the + enabled optional features used to create the zip executable). + + -V + --VMS-portable + [VMS] Save VMS file attributes. (Files are truncated at EOF.) + When a -V archive is unpacked on a non-VMS system, some file + types (notably Stream_LF text files and pure binary files + like fixed-512) should be extracted intact. Indexed files and + file types with embedded record sizes (notably variable-length + record types) will probably be seen as corrupt elsewhere. + + -VV + --VMS-specific + [VMS] Save VMS file attributes, and all allocated blocks in a + file, including any data beyond EOF. Useful for moving ill- + formed files among VMS systems. When a -VV archive is + unpacked on a non-VMS system, almost all files will appear cor- + rupt. + + -w + --VMS-versions + [VMS] Append the version number of the files to the name, + including multiple versions of files. Default is to use only + the most recent version of a specified file. + + -ww + --VMS-dot-versions + [VMS] Append the version number of the files to the name, + including multiple versions of files, using the .nnn format. + Default is to use only the most recent version of a specified + file. + + -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 + + /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 files + --exclude files + Explicitly exclude the specified files, as in: + + zip -r foo foo -x \*.o + + which will include the contents of foo in foo.zip while exclud- + ing all the files that end in .o. The backslash avoids the + shell filename substitution, so that the name matching is per- + formed by zip at all directory levels. + + Also possible: + + zip -r foo foo -x@exclude.lst + + which will include the contents of foo in foo.zip while exclud- + ing all the files that match the patterns in the file + exclude.lst. + + The long option forms of the above are + + zip -r foo foo --exclude \*.o + + and + + zip -r foo foo --exclude @exclude.lst + + Multiple patterns can be specified, as in: + + zip -r foo foo -x \*.o \*.c + + If there is no space between -x and the pattern, just one value + is assumed (no list): + + zip -r foo foo -x\*.o + + See -i for more on include and exclude. + + -X + --no-extra + Do not save extra file attributes (Extended Attributes on OS/2, + uid/gid and file times on Unix). The zip format uses extra + fields to include additional information for each entry. Some + extra fields are specific to particular systems while others are + applicable to all systems. Normally when zip reads entries from + an existing archive, it reads the extra fields it knows, strips + the rest, and adds the extra fields applicable to that system. + With -X, zip strips all old fields and only includes the Unicode + and Zip64 extra fields (currently these two extra fields cannot + be disabled). + + Negating this option, -X-, includes all the default extra + fields, but also copies over any unrecognized extra fields. + + -y + --symlinks + For UNIX and VMS (V8.3 and later), store symbolic links as such + in the zip archive, instead of compressing and storing the file + referred to by the link. This can avoid multiple copies of + files being included in the archive as zip recurses the direc- + tory trees and accesses files directly and by links. + + -z + --archive-comment + Prompt for a multi-line comment for the entire zip archive. The + comment is ended by a line containing just a period, or an end + of file condition (^D on Unix, ^Z on MSDOS, OS/2, and VMS). The + comment can be taken from a file: + + zip -z foo < foowhat + + -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 sup- + port 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 compres- + sion: + + zip -Z bzip2 foo bar.c + + The compression method can be abbreviated: + + zip -Zb foo bar.c + + -# + (-0, -1, -2, -3, -4, -5, -6, -7, -8, -9) + Regulate the speed of compression using the specified digit #, + where -0 indicates no compression (store all files), -1 indi- + cates the fastest compression speed (less compression) and -9 + indicates the slowest compression speed (optimal compression, + ignores the suffix list). The default compression level is -6. + + Though still being worked, the intention is this setting will + control compression speed for all compression methods. Cur- + rently only deflation is controlled. + + -! + --use-privileges + [WIN32] Use priviliges (if granted) to obtain all aspects of + WinNT security. + + -@ + --names-stdin + Take the list of input files from standard input. Only one file- + name per line. + + -$ + --volume-label + [MSDOS, OS/2, WIN32] Include the volume label for the drive + holding the first file to be compressed. If you want to include + only the volume label or to force a specific drive, use the + drive name as first file name, as in: + + zip -$ foo a: c:bar + +EXAMPLES + The simplest example: + + zip stuff * + + creates the archive stuff.zip (assuming it does not exist) and puts all + the files in the current directory in it, in compressed form (the .zip + suffix is added automatically, unless the archive name contains a dot + already; this allows the explicit specification of other suffixes). + + Because of the way the shell on Unix does filename substitution, files + starting with "." are not included; to include these as well: + + zip stuff .* * + + Even this will not include any subdirectories from the current direc- + tory. + + To zip up an entire directory, the command: + + zip -r foo foo + + creates the archive foo.zip, containing all the files and directories + in the directory foo that is contained within the current directory. + + You may want to make a zip archive that contains the files in foo, + without recording the directory name, foo. You can use the -j option + to leave off the paths, as in: + + zip -j foo foo/* + + If you are short on disk space, you might not have enough room to hold + both the original directory and the corresponding compressed zip + archive. In this case, you can create the archive in steps using the + -m option. If foo contains the subdirectories tom, dick, and harry, + you can: + + zip -rm foo foo/tom + zip -rm foo foo/dick + zip -rm foo foo/harry + + where the first command creates foo.zip, and the next two add to it. + At the completion of each zip command, the last created archive is + deleted, making room for the next zip command to function. + + Use -s to set the split size and create a split archive. The size is + given as a number followed optionally by one of k (kB), m (MB), g (GB), + or t (TB). The command + + zip -s 2g -r split.zip foo + + creates a split archive of the directory foo with splits no bigger than + 2 GB each. If foo contained 5 GB of contents and the contents were + stored in the split archive without compression (to make this example + simple), this would create three splits, split.z01 at 2 GB, split.z02 + at 2 GB, and split.zip at a little over 1 GB. + + The -sp option can be used to pause zip between splits to allow chang- + ing removable media, for example, but read the descriptions and warn- + ings for both -s and -sp below. + + Though zip does not update split archives, zip provides the new option + -O (--output-file) to allow split archives to be updated and saved in a + new archive. For example, + + zip inarchive.zip foo.c bar.c --out outarchive.zip + + reads archive inarchive.zip, even if split, adds the files foo.c and + bar.c, and writes the resulting archive to outarchive.zip. If inar- + chive.zip is split then outarchive.zip defaults to the same split size. + Be aware that outarchive.zip and any split files that are created with + it are always overwritten without warning. This may be changed in the + future. + +PATTERN MATCHING + This section applies only to Unix. Watch this space for details on + MSDOS and VMS operation. However, the special wildcard characters * + and [] below apply to at least MSDOS also. + + The Unix shells (sh, csh, bash, and others) normally do filename sub- + stitution (also called "globbing") on command arguments. Generally the + special characters are: + + ? match any single character + + * match any number of characters (including none) + + [] match any character in the range indicated within the brackets + (example: [a-f], [0-9]). This form of wildcard matching allows + a user to specify a list of characters between square brackets + and if any of the characters match the expression matches. For + example: + + zip archive "*.[hc]" + + would archive all files in the current directory that end in .h + or .c. + + Ranges of characters are supported: + + zip archive "[a-f]*" + + would add to the archive all files starting with "a" through + "f". + + Negation is also supported, where any character in that position + not in the list matches. Negation is supported by adding ! or ^ + to the beginning of the list: + + zip archive "*.[!o]" + + matches files that don't end in ".o". + + On WIN32, [] matching needs to be turned on with the -RE option + to avoid the confusion that names with [ or ] have caused. + + When these characters are encountered (without being escaped with a + backslash or quotes), the shell will look for files relative to the + current path that match the pattern, and replace the argument with a + list of the names that matched. + + The zip program can do the same matching on names that are in the zip + archive being modified or, in the case of the -x (exclude) or -i + (include) options, on the list of files to be operated on, by using + backslashes or quotes to tell the shell not to do the name expansion. + In general, when zip encounters a name in the list of files to do, it + first looks for the name in the file system. If it finds it, it then + adds it to the list of files to do. If it does not find it, it looks + for the name in the zip archive being modified (if it exists), using + the pattern matching characters described above, if present. For each + match, it will add that name to the list of files to be processed, + unless this name matches one given with the -x option, or does not + match any name given with the -i option. + + The pattern matching includes the path, and so patterns like \*.o match + names that end in ".o", no matter what the path prefix is. Note that + the backslash must precede every special character (i.e. ?*[]), or the + entire argument must be enclosed in double quotes (""). + + In general, use backslashes or double quotes for paths that have wild- + cards to make zip do the pattern matching for file paths, and always + for paths and strings that have spaces or wildcards for -i, -x, -R, -d, + and -U and anywhere zip needs to process the wildcards. + +ENVIRONMENT + The following environment variables are read and used by zip as + described. + + ZIPOPT + contains default options that will be used when running zip. + The contents of this environment variable will get added to the + command line just after the zip command. + + ZIP + [Not on RISC OS and VMS] see ZIPOPT + + Zip$Options + [RISC OS] see ZIPOPT + + Zip$Exts + [RISC OS] contains extensions separated by a : that will cause + native filenames with one of the specified extensions to be + added to the zip file with basename and extension swapped. + + ZIP_OPTS + [VMS] see ZIPOPT + +SEE ALSO + compress(1), shar(1L), tar(1), unzip(1L), gzip(1L) + +DIAGNOSTICS + The exit status (or error level) approximates the exit codes defined by + PKWARE and takes on the following values, except under VMS: + + 0 normal; no errors or warnings detected. + + 2 unexpected end of zip file. + + 3 a generic error in the zipfile format was detected. Pro- + cessing may have completed successfully anyway; some bro- + ken zipfiles created by other archivers have simple work- + arounds. + + 4 zip was unable to allocate memory for one or more buffers + during program initialization. + + 5 a severe error in the zipfile format was detected. Pro- + cessing probably failed immediately. + + 6 entry too large to be processed (such as input files + larger than 2 GB when not using Zip64 or trying to read + an existing archive that is too large) or entry too large + to be split with zipsplit + + 7 invalid comment format + + 8 zip -T failed or out of memory + + 9 the user aborted zip prematurely with control-C (or simi- + lar) + + 10 zip encountered an error while using a temp file + + 11 read or seek error + + 12 zip has nothing to do + + 13 missing or empty zip file + + 14 error writing to a file + + 15 zip was unable to create a file to write to + + 16 bad command line parameters + + 18 zip could not open a specified file to read + + 19 zip was compiled with options not supported on this sys- + tem + + VMS interprets standard Unix (or PC) return values as other, scarier- + looking things, so zip instead maps them into VMS-style status codes. + In general, zip sets VMS Facility = 1955 (0x07A3), Code = 2* Unix_sta- + tus, and an appropriate Severity (as specified in ziperr.h). More + details are included in the VMS-specific documentation. See + [.vms]NOTES.TXT and [.vms]vms_msg_gen.c. + +BUGS + zip 3.0 is not compatible with PKUNZIP 1.10. Use zip 1.1 to produce zip + files which can be extracted by PKUNZIP 1.10. + + zip files produced by zip 3.0 must not be updated by zip 1.1 or PKZIP + 1.10, if they contain encrypted members or if they have been produced + in a pipe or on a non-seekable device. The old versions of zip or PKZIP + would create an archive with an incorrect format. The old versions can + list the contents of the zip file but cannot extract it anyway (because + of the new compression algorithm). If you do not use encryption and + use regular disk files, you do not have to care about this problem. + + Under VMS, not all of the odd file formats are treated properly. Only + stream-LF format zip files are expected to work with zip. Others can + be converted using Rahul Dhesi's BILF program. This version of zip + handles some of the conversion internally. When using Kermit to trans- + fer zip files from VMS to MSDOS, type "set file type block" on VMS. + When transfering from MSDOS to VMS, type "set file type fixed" on VMS. + In both cases, type "set file type binary" on MSDOS. + + Under some older VMS versions, zip may hang for file specifications + that use DECnet syntax foo::*.*. + + On OS/2, zip cannot match some names, such as those including an excla- + mation mark or a hash sign. This is a bug in OS/2 itself: the 32-bit + DosFindFirst/Next don't find such names. Other programs such as GNU + tar are also affected by this bug. + + Under OS/2, the amount of Extended Attributes displayed by DIR is (for + compatibility) the amount returned by the 16-bit version of DosQuery- + PathInfo(). Otherwise OS/2 1.3 and 2.0 would report different EA sizes + when DIRing a file. However, the structure layout returned by the + 32-bit DosQueryPathInfo() is a bit different, it uses extra padding + bytes and link pointers (it's a linked list) to have all fields on + 4-byte boundaries for portability to future RISC OS/2 versions. There- + fore the value reported by zip (which uses this 32-bit-mode size) dif- + fers from that reported by DIR. zip stores the 32-bit format for + portability, even the 16-bit MS-C-compiled version running on OS/2 1.3, + so even this one shows the 32-bit-mode size. + +AUTHORS + Copyright (C) 1997-2008 Info-ZIP. + + Currently distributed under the Info-ZIP license. + + Copyright (C) 1990-1997 Mark Adler, Richard B. Wales, Jean-loup Gailly, + Onno van der Linden, Kai Uwe Rommel, Igor Mandrichenko, John Bush and + Paul Kienitz. + + Original copyright: + + Permission is granted to any individual or institution to use, copy, or + redistribute this software so long as all of the original files are + included, that it is not sold for profit, and that this copyright + notice is retained. + + LIKE ANYTHING ELSE THAT'S FREE, ZIP AND ITS ASSOCIATED UTILITIES ARE + PROVIDED AS IS AND COME WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED + OR IMPLIED. IN NO EVENT WILL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY + DAMAGES RESULTING FROM THE USE OF THIS SOFTWARE. + + Please send bug reports and comments using the web page at: www.info- + zip.org. For bug reports, please include the version of zip (see + zip -h), the make options used to compile it (see zip -v), the machine + and operating system in use, and as much additional information as pos- + sible. + +ACKNOWLEDGEMENTS + Thanks to R. P. Byrne for his Shrink.Pas program, which inspired this + project, and from which the shrink algorithm was stolen; to Phil Katz + for placing in the public domain the zip file format, compression for- + mat, and .ZIP filename extension, and for accepting minor changes to + the file format; to Steve Burg for clarifications on the deflate for- + mat; to Haruhiko Okumura and Leonid Broukhis for providing some useful + ideas for the compression algorithm; to Keith Petersen, Rich Wales, + Hunter Goatley and Mark Adler for providing a mailing list and ftp site + for the Info-ZIP group to use; and most importantly, to the Info-ZIP + group itself (listed in the file infozip.who) without whose tireless + testing and bug-fixing efforts a portable zip would not have been pos- + sible. Finally we should thank (blame) the first Info-ZIP moderator, + David Kirschbaum, for getting us into this mess in the first place. + The manual page was rewritten for Unix by R. P. C. Rodgers and updated + by E. Gordon for zip 3.0. + +Info-ZIP 16 June 2008 (v3.0) ZIP(1L) |