123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956 |
- UNZIP(1L) UNZIP(1L)
- NAME
- unzip - list, test and extract compressed files in a ZIP archive
- SYNOPSIS
- unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) ...]
- [-x xfile(s) ...] [-d exdir]
- DESCRIPTION
- unzip will list, test, or extract files from a ZIP archive, commonly
- found on MS-DOS systems. The default behavior (with no options) is to
- extract into the current directory (and subdirectories below it) all
- files from the specified ZIP archive. A companion program, zip(1L),
- creates ZIP archives; both programs are compatible with archives cre-
- ated by PKWARE's PKZIP and PKUNZIP for MS-DOS, but in many cases the
- program options or default behaviors differ.
- ARGUMENTS
- file[.zip]
- Path of the ZIP archive(s). If the file specification is a
- wildcard, each matching file is processed in an order determined
- by the operating system (or file system). Only the filename can
- be a wildcard; the path itself cannot. Wildcard expressions are
- similar to those supported in commonly used Unix shells (sh,
- ksh, csh) and may contain:
- * matches a sequence of 0 or more characters
- ? matches exactly 1 character
- [...] matches any single character found inside the brackets;
- ranges are specified by a beginning character, a hyphen,
- and an ending character. If an exclamation point or a
- caret (`!' or `^') follows the left bracket, then the
- range of characters within the brackets is complemented
- (that is, anything except the characters inside the
- brackets is considered a match). To specify a verbatim
- left bracket, the three-character sequence ``[[]'' has to
- be used.
- (Be sure to quote any character that might otherwise be inter-
- preted or modified by the operating system, particularly under
- Unix and VMS.) If no matches are found, the specification is
- assumed to be a literal filename; and if that also fails, the
- suffix .zip is appended. Note that self-extracting ZIP files
- are supported, as with any other ZIP archive; just specify the
- .exe suffix (if any) explicitly.
- [file(s)]
- An optional list of archive members to be processed, separated
- by spaces. (VMS versions compiled with VMSCLI defined must
- delimit files with commas instead. See -v in OPTIONS below.)
- Regular expressions (wildcards) may be used to match multiple
- members; see above. Again, be sure to quote expressions that
- would otherwise be expanded or modified by the operating system.
- [-x xfile(s)]
- An optional list of archive members to be excluded from process-
- ing. Since wildcard characters normally match (`/') directory
- separators (for exceptions see the option -W), this option may
- be used to exclude any files that are in subdirectories. For
- example, ``unzip foo *.[ch] -x */*'' would extract all C source
- files in the main directory, but none in any subdirectories.
- Without the -x option, all C source files in all directories
- within the zipfile would be extracted.
- [-d exdir]
- An optional directory to which to extract files. By default,
- all files and subdirectories are recreated in the current direc-
- tory; the -d option allows extraction in an arbitrary directory
- (always assuming one has permission to write to the directory).
- This option need not appear at the end of the command line; it
- is also accepted before the zipfile specification (with the nor-
- mal options), immediately after the zipfile specification, or
- between the file(s) and the -x option. The option and directory
- may be concatenated without any white space between them, but
- note that this may cause normal shell behavior to be suppressed.
- In particular, ``-d ~'' (tilde) is expanded by Unix C shells
- into the name of the user's home directory, but ``-d~'' is
- treated as a literal subdirectory ``~'' of the current direc-
- tory.
- OPTIONS
- Note that, in order to support obsolescent hardware, unzip's usage
- screen is limited to 22 or 23 lines and should therefore be considered
- only a reminder of the basic unzip syntax rather than an exhaustive
- list of all possible flags. The exhaustive list follows:
- -Z zipinfo(1L) mode. If the first option on the command line is
- -Z, the remaining options are taken to be zipinfo(1L) options.
- See the appropriate manual page for a description of these
- options.
- -A [OS/2, Unix DLL] print extended help for the DLL's programming
- interface (API).
- -c extract files to stdout/screen (``CRT''). This option is simi-
- lar to the -p option except that the name of each file is
- printed as it is extracted, the -a option is allowed, and ASCII-
- EBCDIC conversion is automatically performed if appropriate.
- This option is not listed in the unzip usage screen.
- -f freshen existing files, i.e., extract only those files that
- already exist on disk and that are newer than the disk copies.
- By default unzip queries before overwriting, but the -o option
- may be used to suppress the queries. Note that under many oper-
- ating systems, the TZ (timezone) environment variable must be
- set correctly in order for -f and -u to work properly (under
- Unix the variable is usually set automatically). The reasons
- for this are somewhat subtle but have to do with the differences
- between DOS-format file times (always local time) and Unix-for-
- mat times (always in GMT/UTC) and the necessity to compare the
- two. A typical TZ value is ``PST8PDT'' (US Pacific time with
- automatic adjustment for Daylight Savings Time or ``summer
- time'').
- -l list archive files (short format). The names, uncompressed file
- sizes and modification dates and times of the specified files
- are printed, along with totals for all files specified. If
- UnZip was compiled with OS2_EAS defined, the -l option also
- lists columns for the sizes of stored OS/2 extended attributes
- (EAs) and OS/2 access control lists (ACLs). In addition, the
- zipfile comment and individual file comments (if any) are dis-
- played. If a file was archived from a single-case file system
- (for example, the old MS-DOS FAT file system) and the -L option
- was given, the filename is converted to lowercase and is pre-
- fixed with a caret (^).
- -p extract files to pipe (stdout). Nothing but the file data is
- sent to stdout, and the files are always extracted in binary
- format, just as they are stored (no conversions).
- -t test archive files. This option extracts each specified file in
- memory and compares the CRC (cyclic redundancy check, an
- enhanced checksum) of the expanded file with the original file's
- stored CRC value.
- -T [most OSes] set the timestamp on the archive(s) to that of the
- newest file in each one. This corresponds to zip's -go option
- except that it can be used on wildcard zipfiles (e.g., ``unzip
- -T \*.zip'') and is much faster.
- -u update existing files and create new ones if needed. This
- option performs the same function as the -f option, extracting
- (with query) files that are newer than those with the same name
- on disk, and in addition it extracts those files that do not
- already exist on disk. See -f above for information on setting
- the timezone properly.
- -v list archive files (verbose format) or show diagnostic version
- info. This option has evolved and now behaves as both an option
- and a modifier. As an option it has two purposes: when a zip-
- file is specified with no other options, -v lists archive files
- verbosely, adding to the basic -l info the compression method,
- compressed size, compression ratio and 32-bit CRC. In contrast
- to most of the competing utilities, unzip removes the 12 addi-
- tional header bytes of encrypted entries from the compressed
- size numbers. Therefore, compressed size and compression ratio
- figures are independent of the entry's encryption status and
- show the correct compression performance. (The complete size of
- the encrypted compressed data stream for zipfile entries is
- reported by the more verbose zipinfo(1L) reports, see the sepa-
- rate manual.) When no zipfile is specified (that is, the com-
- plete command is simply ``unzip -v''), a diagnostic screen is
- printed. In addition to the normal header with release date and
- version, unzip lists the home Info-ZIP ftp site and where to
- find a list of other ftp and non-ftp sites; the target operating
- system for which it was compiled, as well as (possibly) the
- hardware on which it was compiled, the compiler and version
- used, and the compilation date; any special compilation options
- that might affect the program's operation (see also DECRYPTION
- below); and any options stored in environment variables that
- might do the same (see ENVIRONMENT OPTIONS below). As a modi-
- fier it works in conjunction with other options (e.g., -t) to
- produce more verbose or debugging output; this is not yet fully
- implemented but will be in future releases.
- -z display only the archive comment.
- MODIFIERS
- -a convert text files. Ordinarily all files are extracted exactly
- as they are stored (as ``binary'' files). The -a option causes
- files identified by zip as text files (those with the `t' label
- in zipinfo listings, rather than `b') to be automatically
- extracted as such, converting line endings, end-of-file charac-
- ters and the character set itself as necessary. (For example,
- Unix files use line feeds (LFs) for end-of-line (EOL) and have
- no end-of-file (EOF) marker; Macintoshes use carriage returns
- (CRs) for EOLs; and most PC operating systems use CR+LF for EOLs
- and control-Z for EOF. In addition, IBM mainframes and the
- Michigan Terminal System use EBCDIC rather than the more common
- ASCII character set, and NT supports Unicode.) Note that zip's
- identification of text files is by no means perfect; some
- ``text'' files may actually be binary and vice versa. unzip
- therefore prints ``[text]'' or ``[binary]'' as a visual check
- for each file it extracts when using the -a option. The -aa
- option forces all files to be extracted as text, regardless of
- the supposed file type. On VMS, see also -S.
- -b [general] treat all files as binary (no text conversions). This
- is a shortcut for ---a.
- -b [Tandem] force the creation files with filecode type 180 ('C')
- when extracting Zip entries marked as "text". (On Tandem, -a is
- enabled by default, see above).
- -b [VMS] auto-convert binary files (see -a above) to fixed-length,
- 512-byte record format. Doubling the option (-bb) forces all
- files to be extracted in this format. When extracting to stan-
- dard output (-c or -p option in effect), the default conversion
- of text record delimiters is disabled for binary (-b) resp. all
- (-bb) files.
- -B [when compiled with UNIXBACKUP defined] save a backup copy of
- each overwritten file. The backup file is gets the name of the
- target file with a tilde and optionally a unique sequence number
- (up to 5 digits) appended. The sequence number is applied when-
- ever another file with the original name plus tilde already
- exists. When used together with the "overwrite all" option -o,
- numbered backup files are never created. In this case, all
- backup files are named as the original file with an appended
- tilde, existing backup files are deleted without notice. This
- feature works similarly to the default behavior of emacs(1) in
- many locations.
- Example: the old copy of ``foo'' is renamed to ``foo~''.
- Warning: Users should be aware that the -B option does not pre-
- vent loss of existing data under all circumstances. For exam-
- ple, when unzip is run in overwrite-all mode, an existing
- ``foo~'' file is deleted before unzip attempts to rename ``foo''
- to ``foo~''. When this rename attempt fails (because of a file
- locks, insufficient privileges, or ...), the extraction of
- ``foo~'' gets cancelled, but the old backup file is already
- lost. A similar scenario takes place when the sequence number
- range for numbered backup files gets exhausted (99999, or 65535
- for 16-bit systems). In this case, the backup file with the
- maximum sequence number is deleted and replaced by the new
- backup version without notice.
- -C use case-insensitive matching for the selection of archive
- entries from the command-line list of extract selection pat-
- terns. unzip's philosophy is ``you get what you ask for'' (this
- is also responsible for the -L/-U change; see the relevant
- options below). Because some file systems are fully case-sensi-
- tive (notably those under the Unix operating system) and because
- both ZIP archives and unzip itself are portable across plat-
- forms, unzip's default behavior is to match both wildcard and
- literal filenames case-sensitively. That is, specifying ``make-
- file'' on the command line will only match ``makefile'' in the
- archive, not ``Makefile'' or ``MAKEFILE'' (and similarly for
- wildcard specifications). Since this does not correspond to the
- behavior of many other operating/file systems (for example, OS/2
- HPFS, which preserves mixed case but is not sensitive to it),
- the -C option may be used to force all filename matches to be
- case-insensitive. In the example above, all three files would
- then match ``makefile'' (or ``make*'', or similar). The -C
- option affects file specs in both the normal file list and the
- excluded-file list (xlist).
- Please note that the -C option does neither affect the search
- for the zipfile(s) nor the matching of archive entries to exist-
- ing files on the extraction path. On a case-sensitive file sys-
- tem, unzip will never try to overwrite a file ``FOO'' when
- extracting an entry ``foo''!
- -D skip restoration of timestamps for extracted items. Normally,
- unzip tries to restore all meta-information for extracted items
- that are supplied in the Zip archive (and do not require privi-
- leges or impose a security risk). By specifying -D, unzip is
- told to suppress restoration of timestamps for directories
- explicitly created from Zip archive entries. This option only
- applies to ports that support setting timestamps for directories
- (currently ATheOS, BeOS, MacOS, OS/2, Unix, VMS, Win32, for
- other unzip ports, -D has no effect). The duplicated option -DD
- forces suppression of timestamp restoration for all extracted
- entries (files and directories). This option results in setting
- the timestamps for all extracted entries to the current time.
- On VMS, the default setting for this option is -D for consis-
- tency with the behaviour of BACKUP: file timestamps are
- restored, timestamps of extracted directories are left at the
- current time. To enable restoration of directory timestamps,
- the negated option --D should be specified. On VMS, the option
- -D disables timestamp restoration for all extracted Zip archive
- items. (Here, a single -D on the command line combines with the
- default -D to do what an explicit -DD does on other systems.)
- -E [MacOS only] display contents of MacOS extra field during
- restore operation.
- -F [Acorn only] suppress removal of NFS filetype extension from
- stored filenames.
- -F [non-Acorn systems supporting long filenames with embedded com-
- mas, and only if compiled with ACORN_FTYPE_NFS defined] trans-
- late filetype information from ACORN RISC OS extra field blocks
- into a NFS filetype extension and append it to the names of the
- extracted files. (When the stored filename appears to already
- have an appended NFS filetype extension, it is replaced by the
- info from the extra field.)
- -i [MacOS only] ignore filenames stored in MacOS extra fields.
- Instead, the most compatible filename stored in the generic part
- of the entry's header is used.
- -j junk paths. The archive's directory structure is not recreated;
- all files are deposited in the extraction directory (by default,
- the current one).
- -J [BeOS only] junk file attributes. The file's BeOS file
- attributes are not restored, just the file's data.
- -J [MacOS only] ignore MacOS extra fields. All Macintosh specific
- info is skipped. Data-fork and resource-fork are restored as
- separate files.
- -K [AtheOS, BeOS, Unix only] retain SUID/SGID/Tacky file
- attributes. Without this flag, these attribute bits are cleared
- for security reasons.
- -L convert to lowercase any filename originating on an uppercase-
- only operating system or file system. (This was unzip's default
- behavior in releases prior to 5.11; the new default behavior is
- identical to the old behavior with the -U option, which is now
- obsolete and will be removed in a future release.) Depending on
- the archiver, files archived under single-case file systems
- (VMS, old MS-DOS FAT, etc.) may be stored as all-uppercase
- names; this can be ugly or inconvenient when extracting to a
- case-preserving file system such as OS/2 HPFS or a case-sensi-
- tive one such as under Unix. By default unzip lists and
- extracts such filenames exactly as they're stored (excepting
- truncation, conversion of unsupported characters, etc.); this
- option causes the names of all files from certain systems to be
- converted to lowercase. The -LL option forces conversion of
- every filename to lowercase, regardless of the originating file
- system.
- -M pipe all output through an internal pager similar to the Unix
- more(1) command. At the end of a screenful of output, unzip
- pauses with a ``--More--'' prompt; the next screenful may be
- viewed by pressing the Enter (Return) key or the space bar.
- unzip can be terminated by pressing the ``q'' key and, on some
- systems, the Enter/Return key. Unlike Unix more(1), there is no
- forward-searching or editing capability. Also, unzip doesn't
- notice if long lines wrap at the edge of the screen, effectively
- resulting in the printing of two or more lines and the likeli-
- hood that some text will scroll off the top of the screen before
- being viewed. On some systems the number of available lines on
- the screen is not detected, in which case unzip assumes the
- height is 24 lines.
- -n never overwrite existing files. If a file already exists, skip
- the extraction of that file without prompting. By default unzip
- queries before extracting any file that already exists; the user
- may choose to overwrite only the current file, overwrite all
- files, skip extraction of the current file, skip extraction of
- all existing files, or rename the current file.
- -N [Amiga] extract file comments as Amiga filenotes. File comments
- are created with the -c option of zip(1L), or with the -N option
- of the Amiga port of zip(1L), which stores filenotes as com-
- ments.
- -o overwrite existing files without prompting. This is a dangerous
- option, so use it with care. (It is often used with -f, how-
- ever, and is the only way to overwrite directory EAs under
- OS/2.)
- -P password
- use password to decrypt encrypted zipfile entries (if any).
- THIS IS INSECURE! 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 passwords. (And where security is truly important, use
- strong encryption such as Pretty Good Privacy instead of the
- relatively weak encryption provided by standard zipfile utili-
- ties.)
- -q perform operations quietly (-qq = even quieter). Ordinarily
- unzip prints the names of the files it's extracting or testing,
- the extraction methods, any file or zipfile comments that may be
- stored in the archive, and possibly a summary when finished with
- each archive. The -q[q] options suppress the printing of some
- or all of these messages.
- -s [OS/2, NT, MS-DOS] convert spaces in filenames to underscores.
- Since all PC operating systems allow spaces in filenames, unzip
- by default extracts filenames with spaces intact (e.g.,
- ``EA DATA. SF''). This can be awkward, however, since MS-DOS in
- particular does not gracefully support spaces in filenames.
- Conversion of spaces to underscores can eliminate the awkward-
- ness in some cases.
- -S [VMS] convert text files (-a, -aa) into Stream_LF record format,
- instead of the text-file default, variable-length record format.
- (Stream_LF is the default record format of VMS unzip. It is
- applied unless conversion (-a, -aa and/or -b, -bb) is requested
- or a VMS-specific entry is processed.)
- -U [UNICODE_SUPPORT only] modify or disable UTF-8 handling. When
- UNICODE_SUPPORT is available, the option -U forces unzip to
- escape all non-ASCII characters from UTF-8 coded filenames as
- ``#Uxxxx'' (for UCS-2 characters, or ``#Lxxxxxx'' for unicode
- codepoints needing 3 octets). This option is mainly provided
- for debugging purpose when the fairly new UTF-8 support is sus-
- pected to mangle up extracted filenames.
- The option -UU allows to entirely disable the recognition of
- UTF-8 encoded filenames. The handling of filename codings
- within unzip falls back to the behaviour of previous versions.
- [old, obsolete usage] leave filenames uppercase if created under
- MS-DOS, VMS, etc. See -L above.
- -V retain (VMS) file version numbers. VMS files can be stored with
- a version number, in the format file.ext;##. By default the
- ``;##'' version numbers are stripped, but this option allows
- them to be retained. (On file systems that limit filenames to
- particularly short lengths, the version numbers may be truncated
- or stripped regardless of this option.)
- -W [only when WILD_STOP_AT_DIR compile-time option enabled] modi-
- fies the pattern matching routine so that both `?' (single-char
- wildcard) and `*' (multi-char wildcard) do not match the direc-
- tory separator character `/'. (The two-character sequence
- ``**'' acts as a multi-char wildcard that includes the directory
- separator in its matched characters.) Examples:
- "*.c" matches "foo.c" but not "mydir/foo.c"
- "**.c" matches both "foo.c" and "mydir/foo.c"
- "*/*.c" matches "bar/foo.c" but not "baz/bar/foo.c"
- "??*/*" matches "ab/foo" and "abc/foo"
- but not "a/foo" or "a/b/foo"
- This modified behaviour is equivalent to the pattern matching
- style used by the shells of some of UnZip's supported target OSs
- (one example is Acorn RISC OS). This option may not be avail-
- able on systems where the Zip archive's internal directory sepa-
- rator character `/' is allowed as regular character in native
- operating system filenames. (Currently, UnZip uses the same
- pattern matching rules for both wildcard zipfile specifications
- and zip entry selection patterns in most ports. For systems
- allowing `/' as regular filename character, the -W option would
- not work as expected on a wildcard zipfile specification.)
- -X [VMS, Unix, OS/2, NT, Tandem] restore owner/protection info
- (UICs and ACL entries) under VMS, or user and group info
- (UID/GID) under Unix, or access control lists (ACLs) under cer-
- tain network-enabled versions of OS/2 (Warp Server with IBM LAN
- Server/Requester 3.0 to 5.0; Warp Connect with IBM Peer 1.0), or
- security ACLs under Windows NT. In most cases this will require
- special system privileges, and doubling the option (-XX) under
- NT instructs unzip to use privileges for extraction; but under
- Unix, for example, a user who belongs to several groups can
- restore files owned by any of those groups, as long as the user
- IDs match his or her own. Note that ordinary file attributes
- are always restored--this option applies only to optional, extra
- ownership info available on some operating systems. [NT's
- access control lists do not appear to be especially compatible
- with OS/2's, so no attempt is made at cross-platform portability
- of access privileges. It is not clear under what conditions
- this would ever be useful anyway.]
- -Y [VMS] treat archived file name endings of ``.nnn'' (where
- ``nnn'' is a decimal number) as if they were VMS version num-
- bers (``;nnn''). (The default is to treat them as file types.)
- Example:
- "a.b.3" -> "a.b;3".
- -$ [MS-DOS, OS/2, NT] restore the volume label if the extraction
- medium is removable (e.g., a diskette). Doubling the option
- (-$$) allows fixed media (hard disks) to be labelled as well.
- By default, volume labels are ignored.
- -/ extensions
- [Acorn only] overrides the extension list supplied by Unzip$Ext
- environment variable. During extraction, filename extensions
- that match one of the items in this extension list are swapped
- in front of the base name of the extracted file.
- -: [all but Acorn, VM/CMS, MVS, Tandem] allows to extract archive
- members into locations outside of the current `` extraction root
- folder''. For security reasons, unzip normally removes ``parent
- dir'' path components (``../'') from the names of extracted
- file. This safety feature (new for version 5.50) prevents unzip
- from accidentally writing files to ``sensitive'' areas outside
- the active extraction folder tree head. The -: option lets
- unzip switch back to its previous, more liberal behaviour, to
- allow exact extraction of (older) archives that used ``../''
- components to create multiple directory trees at the level of
- the current extraction folder. This option does not enable
- writing explicitly to the root directory (``/''). To achieve
- this, it is necessary to set the extraction target folder to
- root (e.g. -d / ). However, when the -: option is specified, it
- is still possible to implicitly write to the root directory by
- specifying enough ``../'' path components within the zip
- archive. Use this option with extreme caution.
- -^ [Unix only] allow control characters in names of extracted ZIP
- archive entries. On Unix, a file name may contain any (8-bit)
- character code with the two exception '/' (directory delimiter)
- and NUL (0x00, the C string termination indicator), unless the
- specific file system has more restrictive conventions. Gener-
- ally, this allows to embed ASCII control characters (or even
- sophisticated control sequences) in file names, at least on
- 'native' Unix file systems. However, it may be highly suspi-
- cious to make use of this Unix "feature". Embedded control
- characters in file names might have nasty side effects when dis-
- played on screen by some listing code without sufficient filter-
- ing. And, for ordinary users, it may be difficult to handle
- such file names (e.g. when trying to specify it for open, copy,
- move, or delete operations). Therefore, unzip applies a filter
- by default that removes potentially dangerous control characters
- from the extracted file names. The -^ option allows to override
- this filter in the rare case that embedded filename control
- characters are to be intentionally restored.
- -2 [VMS] force unconditionally conversion of file names to
- ODS2-compatible names. The default is to exploit the destina-
- tion file system, preserving case and extended file name charac-
- ters on an ODS5 destination file system; and applying the
- ODS2-compatibility file name filtering on an ODS2 destination
- file system.
- ENVIRONMENT OPTIONS
- unzip's default behavior may be modified via options placed in an envi-
- ronment variable. This can be done with any option, but it is probably
- most useful with the -a, -L, -C, -q, -o, or -n modifiers: make unzip
- auto-convert text files by default, make it convert filenames from
- uppercase systems to lowercase, make it match names case-insensitively,
- make it quieter, or make it always overwrite or never overwrite files
- as it extracts them. For example, to make unzip act as quietly as pos-
- sible, only reporting errors, one would use one of the following com-
- mands:
- Unix Bourne shell:
- UNZIP=-qq; export UNZIP
- Unix C shell:
- setenv UNZIP -qq
- OS/2 or MS-DOS:
- set UNZIP=-qq
- VMS (quotes for lowercase):
- define UNZIP_OPTS "-qq"
- Environment options are, in effect, considered to be just like any
- other command-line options, except that they are effectively the first
- options on the command line. To override an environment option, one
- may use the ``minus operator'' to remove it. For instance, to override
- one of the quiet-flags in the example above, use the command
- unzip --q[other options] zipfile
- The first hyphen is the normal switch character, and the second is a
- minus sign, acting on the q option. Thus the effect here is to cancel
- one quantum of quietness. To cancel both quiet flags, two (or more)
- minuses may be used:
- unzip -t--q zipfile
- unzip ---qt zipfile
- (the two are equivalent). This may seem awkward or confusing, but it
- is reasonably intuitive: just ignore the first hyphen and go from
- there. It is also consistent with the behavior of Unix nice(1).
- As suggested by the examples above, the default variable names are
- UNZIP_OPTS for VMS (where the symbol used to install unzip as a foreign
- command would otherwise be confused with the environment variable), and
- UNZIP for all other operating systems. For compatibility with zip(1L),
- UNZIPOPT is also accepted (don't ask). If both UNZIP and UNZIPOPT are
- defined, however, UNZIP takes precedence. unzip's diagnostic option
- (-v with no zipfile name) can be used to check the values of all four
- possible unzip and zipinfo environment variables.
- The timezone variable (TZ) should be set according to the local time-
- zone in order for the -f and -u to operate correctly. See the descrip-
- tion of -f above for details. This variable may also be necessary to
- get timestamps of extracted files to be set correctly. The WIN32
- (Win9x/ME/NT4/2K/XP/2K3) port of unzip gets the timezone configuration
- from the registry, assuming it is correctly set in the Control Panel.
- The TZ variable is ignored for this port.
- DECRYPTION
- Encrypted archives are fully supported by Info-ZIP software, but due to
- United States export restrictions, de-/encryption support might be dis-
- abled in your compiled binary. However, since spring 2000, US export
- restrictions have been liberated, and our source archives do now
- include full crypt code. In case you need binary distributions with
- crypt support enabled, see the file ``WHERE'' in any Info-ZIP source or
- binary distribution for locations both inside and outside the US.
- Some compiled versions of unzip may not support decryption. To check a
- version for crypt support, either attempt to test or extract an
- encrypted archive, or else check unzip's diagnostic screen (see the -v
- option above) for ``[decryption]'' as one of the special compilation
- options.
- As noted above, the -P option may be used to supply a password on the
- command line, but at a cost in security. The preferred decryption
- method is simply to extract normally; if a zipfile member is encrypted,
- unzip will prompt for the password without echoing what is typed.
- unzip continues to use the same password as long as it appears to be
- valid, by testing a 12-byte header on each file. The correct password
- will always check out against the header, but there is a 1-in-256
- chance that an incorrect password will as well. (This is a security
- feature of the PKWARE zipfile format; it helps prevent brute-force
- attacks that might otherwise gain a large speed advantage by testing
- only the header.) In the case that an incorrect password is given but
- it passes the header test anyway, either an incorrect CRC will be gen-
- erated for the extracted data or else unzip will fail during the
- extraction because the ``decrypted'' bytes do not constitute a valid
- compressed data stream.
- If the first password fails the header check on some file, unzip will
- prompt for another password, and so on until all files are extracted.
- If a password is not known, entering a null password (that is, just a
- carriage return or ``Enter'') is taken as a signal to skip all further
- prompting. Only unencrypted files in the archive(s) will thereafter be
- extracted. (In fact, that's not quite true; older versions of zip(1L)
- and zipcloak(1L) allowed null passwords, so unzip checks each encrypted
- file to see if the null password works. This may result in ``false
- positives'' and extraction errors, as noted above.)
- Archives encrypted with 8-bit passwords (for example, passwords with
- accented European characters) may not be portable across systems and/or
- other archivers. This problem stems from the use of multiple encoding
- methods for such characters, including Latin-1 (ISO 8859-1) and OEM
- code page 850. DOS PKZIP 2.04g uses the OEM code page; Windows PKZIP
- 2.50 uses Latin-1 (and is therefore incompatible with DOS PKZIP); Info-
- ZIP uses the OEM code page on DOS, OS/2 and Win3.x ports but ISO coding
- (Latin-1 etc.) everywhere else; and Nico Mak's WinZip 6.x does not
- allow 8-bit passwords at all. UnZip 5.3 (or newer) attempts to use the
- default character set first (e.g., Latin-1), followed by the alternate
- one (e.g., OEM code page) to test passwords. On EBCDIC systems, if
- both of these fail, EBCDIC encoding will be tested as a last resort.
- (EBCDIC is not tested on non-EBCDIC systems, because there are no known
- archivers that encrypt using EBCDIC encoding.) ISO character encodings
- other than Latin-1 are not supported. The new addition of (partially)
- Unicode (resp. UTF-8) support in UnZip 6.0 has not yet been adapted to
- the encryption password handling in unzip. On systems that use UTF-8
- as native character encoding, unzip simply tries decryption with the
- native UTF-8 encoded password; the built-in attempts to check the pass-
- word in translated encoding have not yet been adapted for UTF-8 support
- and will consequently fail.
- EXAMPLES
- To use unzip to extract all members of the archive letters.zip into the
- current directory and subdirectories below it, creating any subdirecto-
- ries as necessary:
- unzip letters
- To extract all members of letters.zip into the current directory only:
- unzip -j letters
- To test letters.zip, printing only a summary message indicating whether
- the archive is OK or not:
- unzip -tq letters
- To test all zipfiles in the current directory, printing only the sum-
- maries:
- unzip -tq \*.zip
- (The backslash before the asterisk is only required if the shell
- expands wildcards, as in Unix; double quotes could have been used
- instead, as in the source examples below.) To extract to standard out-
- put all members of letters.zip whose names end in .tex, auto-converting
- to the local end-of-line convention and piping the output into more(1):
- unzip -ca letters \*.tex | more
- To extract the binary file paper1.dvi to standard output and pipe it to
- a printing program:
- unzip -p articles paper1.dvi | dvips
- To extract all FORTRAN and C source files--*.f, *.c, *.h, and Make-
- file--into the /tmp directory:
- unzip source.zip "*.[fch]" Makefile -d /tmp
- (the double quotes are necessary only in Unix and only if globbing is
- turned on). To extract all FORTRAN and C source files, regardless of
- case (e.g., both *.c and *.C, and any makefile, Makefile, MAKEFILE or
- similar):
- unzip -C source.zip "*.[fch]" makefile -d /tmp
- To extract any such files but convert any uppercase MS-DOS or VMS names
- to lowercase and convert the line-endings of all of the files to the
- local standard (without respect to any files that might be marked
- ``binary''):
- unzip -aaCL source.zip "*.[fch]" makefile -d /tmp
- To extract only newer versions of the files already in the current
- directory, without querying (NOTE: be careful of unzipping in one
- timezone a zipfile created in another--ZIP archives other than those
- created by Zip 2.1 or later contain no timezone information, and a
- ``newer'' file from an eastern timezone may, in fact, be older):
- unzip -fo sources
- To extract newer versions of the files already in the current directory
- and to create any files not already there (same caveat as previous
- example):
- unzip -uo sources
- To display a diagnostic screen showing which unzip and zipinfo options
- are stored in environment variables, whether decryption support was
- compiled in, the compiler with which unzip was compiled, etc.:
- unzip -v
- In the last five examples, assume that UNZIP or UNZIP_OPTS is set to
- -q. To do a singly quiet listing:
- unzip -l file.zip
- To do a doubly quiet listing:
- unzip -ql file.zip
- (Note that the ``.zip'' is generally not necessary.) To do a standard
- listing:
- unzip --ql file.zip
- or
- unzip -l-q file.zip
- or
- unzip -l--q file.zip
- (Extra minuses in options don't hurt.)
- TIPS
- The current maintainer, being a lazy sort, finds it very useful to
- define a pair of aliases: tt for ``unzip -tq'' and ii for ``unzip -Z''
- (or ``zipinfo''). One may then simply type ``tt zipfile'' to test an
- archive, something that is worth making a habit of doing. With luck
- unzip will report ``No errors detected in compressed data of zip-
- file.zip,'' after which one may breathe a sigh of relief.
- The maintainer also finds it useful to set the UNZIP environment vari-
- able to ``-aL'' and is tempted to add ``-C'' as well. His ZIPINFO
- variable is set to ``-z''.
- 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.
- 1 one or more warning errors were encountered, but process-
- ing completed successfully anyway. This includes zip-
- files where one or more files was skipped due to unsup-
- ported compression method or encryption with an unknown
- password.
- 2 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.
- 3 a severe error in the zipfile format was detected. Pro-
- cessing probably failed immediately.
- 4 unzip was unable to allocate memory for one or more
- buffers during program initialization.
- 5 unzip was unable to allocate memory or unable to obtain a
- tty to read the decryption password(s).
- 6 unzip was unable to allocate memory during decompression
- to disk.
- 7 unzip was unable to allocate memory during in-memory
- decompression.
- 8 [currently not used]
- 9 the specified zipfiles were not found.
- 10 invalid options were specified on the command line.
- 11 no matching files were found.
- 50 the disk is (or was) full during extraction.
- 51 the end of the ZIP archive was encountered prematurely.
- 80 the user aborted unzip prematurely with control-C (or
- similar)
- 81 testing or extraction of one or more files failed due to
- unsupported compression methods or unsupported decryp-
- tion.
- 82 no files were found due to bad decryption password(s).
- (If even one file is successfully processed, however, the
- exit status is 1.)
- VMS interprets standard Unix (or PC) return values as other, scarier-
- looking things, so unzip instead maps them into VMS-style status codes.
- The current mapping is as follows: 1 (success) for normal exit,
- 0x7fff0001 for warning errors, and (0x7fff000? + 16*nor-
- mal_unzip_exit_status) for all other errors, where the `?' is 2 (error)
- for unzip values 2, 9-11 and 80-82, and 4 (fatal error) for the remain-
- ing ones (3-8, 50, 51). In addition, there is a compilation option to
- expand upon this behavior: defining RETURN_CODES results in a human-
- readable explanation of what the error status means.
- BUGS
- Multi-part archives are not yet supported, except in conjunction with
- zip. (All parts must be concatenated together in order, and then ``zip
- -F'' (for zip 2.x) or ``zip -FF'' (for zip 3.x) must be performed on
- the concatenated archive in order to ``fix'' it. Also, zip 3.0 and
- later can combine multi-part (split) archives into a combined single-
- file archive using ``zip -s- inarchive -O outarchive''. See the zip 3
- manual page for more information.) This will definitely be corrected
- in the next major release.
- Archives read from standard input are not yet supported, except with
- funzip (and then only the first member of the archive can be
- extracted).
- Archives encrypted with 8-bit passwords (e.g., passwords with accented
- European characters) may not be portable across systems and/or other
- archivers. See the discussion in DECRYPTION above.
- unzip's -M (``more'') option tries to take into account automatic wrap-
- ping of long lines. However, the code may fail to detect the correct
- wrapping locations. First, TAB characters (and similar control
- sequences) are not taken into account, they are handled as ordinary
- printable characters. Second, depending on the actual system / OS
- port, unzip may not detect the true screen geometry but rather rely on
- "commonly used" default dimensions. The correct handling of tabs would
- require the implementation of a query for the actual tabulator setup on
- the output console.
- Dates, times and permissions of stored directories are not restored
- except under Unix. (On Windows NT and successors, timestamps are now
- restored.)
- [MS-DOS] When extracting or testing files from an archive on a defec-
- tive floppy diskette, if the ``Fail'' option is chosen from DOS's
- ``Abort, Retry, Fail?'' message, older versions of unzip may hang the
- system, requiring a reboot. This problem appears to be fixed, but con-
- trol-C (or control-Break) can still be used to terminate unzip.
- Under DEC Ultrix, unzip would sometimes fail on long zipfiles (bad CRC,
- not always reproducible). This was apparently due either to a hardware
- bug (cache memory) or an operating system bug (improper handling of
- page faults?). Since Ultrix has been abandoned in favor of Digital
- Unix (OSF/1), this may not be an issue anymore.
- [Unix] Unix special files such as FIFO buffers (named pipes), block
- devices and character devices are not restored even if they are somehow
- represented in the zipfile, nor are hard-linked files relinked. Basi-
- cally the only file types restored by unzip are regular files, directo-
- ries and symbolic (soft) links.
- [OS/2] Extended attributes for existing directories are only updated if
- the -o (``overwrite all'') option is given. This is a limitation of
- the operating system; because directories only have a creation time
- associated with them, unzip has no way to determine whether the stored
- attributes are newer or older than those on disk. In practice this may
- mean a two-pass approach is required: first unpack the archive nor-
- mally (with or without freshening/updating existing files), then
- overwrite just the directory entries (e.g., ``unzip -o foo */'').
- [VMS] When extracting to another directory, only the [.foo] syntax is
- accepted for the -d option; the simple Unix foo syntax is silently
- ignored (as is the less common VMS foo.dir syntax).
- [VMS] When the file being extracted already exists, unzip's query only
- allows skipping, overwriting or renaming; there should additionally be
- a choice for creating a new version of the file. In fact, the ``over-
- write'' choice does create a new version; the old version is not over-
- written or deleted.
- SEE ALSO
- funzip(1L), zip(1L), zipcloak(1L), zipgrep(1L), zipinfo(1L), zip-
- note(1L), zipsplit(1L)
- URL
- The Info-ZIP home page is currently at
- http://www.info-zip.org/pub/infozip/
- or
- ftp://ftp.info-zip.org/pub/infozip/ .
- AUTHORS
- The primary Info-ZIP authors (current semi-active members of the Zip-
- Bugs workgroup) are: Ed Gordon (Zip, general maintenance, shared code,
- Zip64, Win32, Unix, Unicode); Christian Spieler (UnZip maintenance
- coordination, VMS, MS-DOS, Win32, shared code, general Zip and UnZip
- integration and optimization); Onno van der Linden (Zip); Mike White
- (Win32, Windows GUI, Windows DLLs); Kai Uwe Rommel (OS/2, Win32);
- Steven M. Schweda (VMS, Unix, support of new features); Paul Kienitz
- (Amiga, Win32, Unicode); Chris Herborth (BeOS, QNX, Atari); Jonathan
- Hudson (SMS/QDOS); Sergio Monesi (Acorn RISC OS); Harald Denker (Atari,
- MVS); John Bush (Solaris, Amiga); Hunter Goatley (VMS, Info-ZIP Site
- maintenance); Steve Salisbury (Win32); Steve Miller (Windows CE GUI),
- Johnny Lee (MS-DOS, Win32, Zip64); and Dave Smith (Tandem NSK).
- The following people were former members of the Info-ZIP development
- group and provided major contributions to key parts of the current
- code: Greg ``Cave Newt'' Roelofs (UnZip, unshrink decompression); Jean-
- loup Gailly (deflate compression); Mark Adler (inflate decompression,
- fUnZip).
- The author of the original unzip code upon which Info-ZIP's was based
- is Samuel H. Smith; Carl Mascott did the first Unix port; and David P.
- Kirschbaum organized and led Info-ZIP in its early days with Keith
- Petersen hosting the original mailing list at WSMR-SimTel20. The full
- list of contributors to UnZip has grown quite large; please refer to
- the CONTRIBS file in the UnZip source distribution for a relatively
- complete version.
- VERSIONS
- v1.2 15 Mar 89 Samuel H. Smith
- v2.0 9 Sep 89 Samuel H. Smith
- v2.x fall 1989 many Usenet contributors
- v3.0 1 May 90 Info-ZIP (DPK, consolidator)
- v3.1 15 Aug 90 Info-ZIP (DPK, consolidator)
- v4.0 1 Dec 90 Info-ZIP (GRR, maintainer)
- v4.1 12 May 91 Info-ZIP
- v4.2 20 Mar 92 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.0 21 Aug 92 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.01 15 Jan 93 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.1 7 Feb 94 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.11 2 Aug 94 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.12 28 Aug 94 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.2 30 Apr 96 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.3 22 Apr 97 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.31 31 May 97 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.32 3 Nov 97 Info-ZIP (Zip-Bugs subgroup, GRR)
- v5.4 28 Nov 98 Info-ZIP (Zip-Bugs subgroup, SPC)
- v5.41 16 Apr 00 Info-ZIP (Zip-Bugs subgroup, SPC)
- v5.42 14 Jan 01 Info-ZIP (Zip-Bugs subgroup, SPC)
- v5.5 17 Feb 02 Info-ZIP (Zip-Bugs subgroup, SPC)
- v5.51 22 May 04 Info-ZIP (Zip-Bugs subgroup, SPC)
- v5.52 28 Feb 05 Info-ZIP (Zip-Bugs subgroup, SPC)
- v6.0 20 Apr 09 Info-ZIP (Zip-Bugs subgroup, SPC)
- Info-ZIP 20 April 2009 (v6.0) UNZIP(1L)
|