On Unix-like operating systems, the unzip command lists, extracts, and tests compressed files in a ZIP archive.

This page covers the Linux version of unzip.

Description

unzip lists, tests, or extracts files from archives of the zip format, which are most commonly found on MS-DOS and Windows systems. The default behavior (with no options) is to extract into the current directory (and possibly the subdirectories below it) all files from the specified zip archive. A companion program, zip, creates zip archives. Both zip and unzip are compatible with archives created by PKWARE’s PKZIP and PKUNZIP programs for MS-DOS.

  • Description
  • Syntax
  • Environment options
  • Decryption
  • Examples
  • Related commands
  • Linux commands help

Syntax

unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s) …] [-x xfile(s) …] [-d exdir]

Arguments

unzip accepts the following arguments:

Options

Additionally, unzip accepts the following options:

Modifiers

Environment options

unzip’s default behavior may be modified via options placed in an environment 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 possible, only reporting errors, one would use one of the following commands:

  • .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”

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 below.

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.

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, UNZIPOPT is also accepted. 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 timezone for the -f and -u to operate correctly. See the description 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 disabled in your particular compiled binary. However, since the spring of 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 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 generated 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 and zipcloak 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 tries decryption with the native UTF-8 encoded password; the built-in attempts to check the password in translated encoding have not yet been adapted for UTF-8 support and will consequently fail.

Examples

unzip hope.zip

Unzip the hope.zip archive into the current directory, creating subdirectories as needed to match the archive’s file hierarchy.

unzip -j hope.zip

Extract the files from archive hope.zip into the current directory only, regardless of the archive’s internal directory structure.

unzip -tq hope.zip

Test hope.zip for errors, but do not extract anything. The q indicates “quiet” mode, which instructs unzip to return only a summary message, rather than a more detailed one.

unzip -ca hope.zip *.txt

Display the contents of all files with the extension .txt contained in the archive hope.zip to the standard output.

unzip hope.zip “*.[ch]” Makefile -d /tmp

Extract from the hope.zip archive any C source files with the extensions .c and .h, and any files named Makefile, into the directory /tmp.

unzip -C hope.zip “*.[ch]” Makefile -d /tmp

Same as the above command, but case-insensitive; it will also extract any files with the extensions .C or .H, any files named MAKEFILE, any files named MakeFile, etc.

unzip -fo hope.zip

Extract files from the archive hope.zip, but only if they are newer versions than the files that already exist.

unzip -l hope.zip

Display a listing of the contents of hope.zip without extracting anything.

gzip — Create, modify, list the contents of, and extract files from GNU zip archives.zip — A compression and archiving utility.zipinfo — Display technical information about a zip file.