vfs: check userland buffers before reading them.
[haiku.git] / src / bin / unzip / unzip.txt
bloba2570eec6424c06ecff268e7e79c4e232495a827
2 UNZIP(1L)                                               UNZIP(1L)
4 NAME
5        unzip  -  list, test and extract compressed files in a ZIP
6        archive
8 SYNOPSIS
9        unzip   [-Z]    [-cflptuvz[abjnoqsCLMVX$/:]]    file[.zip]
10        [file(s) ...]  [-x xfile(s) ...] [-d exdir]
12 DESCRIPTION
13        unzip  will  list,  test,  or  extract  files  from  a ZIP
14        archive, commonly found on MS-DOS  systems.   The  default
15        behavior  (with no options) is to extract into the current
16        directory (and subdirectories below it) all files from the
17        specified ZIP archive.  A companion program, zip(1L), cre-
18        ates ZIP  archives;  both  programs  are  compatible  with
19        archives created by PKWARE's PKZIP and PKUNZIP for MS-DOS,
20        but in many cases the program options or default behaviors
21        differ.
23 ARGUMENTS
24        file[.zip]
25               Path of the ZIP archive(s).  If the file specifica-
26               tion is a wildcard, each matching file is processed
27               in  an order determined by the operating system (or
28               file system).  Only the filename can be a wildcard;
29               the  path  itself cannot.  Wildcard expressions are
30               similar to those supported in  commonly  used  Unix
31               shells (sh, ksh, csh) and may contain:
33               *      matches a sequence of 0 or more characters
35               ?      matches exactly 1 character
37               [...]  matches  any  single  character found inside
38                      the brackets;  ranges  are  specified  by  a
39                      beginning character, a hyphen, and an ending
40                      character.  If an  exclamation  point  or  a
41                      caret (`!' or `^') follows the left bracket,
42                      then the  range  of  characters  within  the
43                      brackets  is complemented (that is, anything
44                      except the characters inside the brackets is
45                      considered a match).
47               (Be  sure  to quote any character that might other-
48               wise be interpreted or modified  by  the  operating
49               system,  particularly  under  Unix and VMS.)  If no
50               matches are found, the specification is assumed  to
51               be  a literal filename; and if that also fails, the
52               suffix .zip is appended.  Note that self-extracting
53               ZIP  files  are  supported,  as  with any other ZIP
54               archive; just specify  the  .exe  suffix  (if  any)
55               explicitly.
57 Info-ZIP             17 February 2002 (v5.5)                    1
59 UNZIP(1L)                                               UNZIP(1L)
61        [file(s)]
62               An  optional  list  of  archive  members to be pro-
63               cessed, separated by spaces.   (VMS  versions  com-
64               piled  with  VMSCLI defined must delimit files with
65               commas instead.  See -v in OPTIONS below.)  Regular
66               expressions (wildcards) may be used to match multi-
67               ple members; see above.  Again, be  sure  to  quote
68               expressions  that  would  otherwise  be expanded or
69               modified by the operating system.
71        [-x xfile(s)]
72               An optional list of archive members to be  excluded
73               from  processing.   Since wildcard characters match
74               directory separators (`/'), this option may be used
75               to  exclude  any  files that are in subdirectories.
76               For example, ``unzip  foo  *.[ch]  -x  */*''  would
77               extract  all  C source files in the main directory,
78               but none in any  subdirectories.   Without  the  -x
79               option,  all  C  source  files  in  all directories
80               within the zipfile would be extracted.
82        [-d exdir]
83               An optional directory to which  to  extract  files.
84               By default, all files and subdirectories are recre-
85               ated in the current directory; the -d option allows
86               extraction in an arbitrary directory (always assum-
87               ing one has permission to write to the  directory).
88               This  option need not appear at the end of the com-
89               mand line; it is also accepted before  the  zipfile
90               specification  (with  the  normal options), immedi-
91               ately after the zipfile specification,  or  between
92               the  file(s)  and  the  -x  option.  The option and
93               directory may be  concatenated  without  any  white
94               space  between  them,  but note that this may cause
95               normal shell behavior to be suppressed.  In partic-
96               ular, ``-d ~'' (tilde) is expanded by Unix C shells
97               into the name of the  user's  home  directory,  but
98               ``-d~''  is treated as a literal subdirectory ``~''
99               of the current directory.
101 OPTIONS
102        Note that,  in  order  to  support  obsolescent  hardware,
103        unzip's  usage  screen  is  limited  to 22 or 23 lines and
104        should therefore be considered  only  a  reminder  of  the
105        basic  unzip  syntax rather than an exhaustive list of all
106        possible flags.  The exhaustive list follows:
108        -Z     zipinfo(1L) mode.  If the first option on the  com-
109               mand line is -Z, the remaining options are taken to
110               be zipinfo(1L) options.  See the appropriate manual
111               page for a description of these options.
113        -A     [OS/2,  Unix DLL] print extended help for the DLL's
114               programming interface (API).
116 Info-ZIP             17 February 2002 (v5.5)                    2
118 UNZIP(1L)                                               UNZIP(1L)
120        -c     extract files  to  stdout/screen  (``CRT'').   This
121               option  is similar to the -p option except that the
122               name of each file is printed as  it  is  extracted,
123               the  -a option is allowed, and ASCII-EBCDIC conver-
124               sion is  automatically  performed  if  appropriate.
125               This  option  is  not  listed  in  the  unzip usage
126               screen.
128        -f     freshen existing files, i.e.,  extract  only  those
129               files that already exist on disk and that are newer
130               than the disk copies.   By  default  unzip  queries
131               before  overwriting,  but the -o option may be used
132               to suppress the  queries.   Note  that  under  many
133               operating  systems,  the  TZ (timezone) environment
134               variable must be set correctly in order for -f  and
135               -u  to  work  properly  (under Unix the variable is
136               usually set automatically).  The reasons  for  this
137               are somewhat subtle but have to do with the differ-
138               ences between DOS-format file times  (always  local
139               time) and Unix-format times (always in GMT/UTC) and
140               the necessity to compare the  two.   A  typical  TZ
141               value  is  ``PST8PDT''  (US Pacific time with auto-
142               matic  adjustment  for  Daylight  Savings  Time  or
143               ``summer time'').
145        -l     list  archive  files  (short  format).   The names,
146               uncompressed file sizes and modification dates  and
147               times  of  the  specified  files are printed, along
148               with totals for all files specified.  If UnZip  was
149               compiled  with  OS2_EAS defined, the -l option also
150               lists columns for the sizes of stored OS/2 extended
151               attributes  (EAs)  and  OS/2  access  control lists
152               (ACLs).  In addition, the zipfile comment and indi-
153               vidual  file comments (if any) are displayed.  If a
154               file was archived from a  single-case  file  system
155               (for  example,  the old MS-DOS FAT file system) and
156               the -L option was given, the filename is  converted
157               to lowercase and is prefixed with a caret (^).
159        -p     extract  files  to  pipe (stdout).  Nothing but the
160               file data is sent to  stdout,  and  the  files  are
161               always extracted in binary format, just as they are
162               stored (no conversions).
164        -t     test archive  files.   This  option  extracts  each
165               specified  file  in  memory  and  compares  the CRC
166               (cyclic redundancy check, an enhanced checksum)  of
167               the  expanded  file with the original file's stored
168               CRC value.
170        -T     [most OSes] set the timestamp on the archive(s)  to
171               that  of  the newest file in each one.  This corre-
172               sponds to zip's -go option except that  it  can  be
173               used   on   wildcard  zipfiles  (e.g.,  ``unzip  -T
175 Info-ZIP             17 February 2002 (v5.5)                    3
177 UNZIP(1L)                                               UNZIP(1L)
179               \*.zip'') and is much faster.
181        -u     update  existing  files  and  create  new  ones  if
182               needed.   This option performs the same function as
183               the -f option, extracting (with query)  files  that
184               are  newer  than  those with the same name on disk,
185               and in addition it extracts those files that do not
186               already  exist  on disk.  See -f above for informa-
187               tion on setting the timezone properly.
189        -v     be verbose or print diagnostic version info.   This
190               option  has  evolved  and  now  behaves  as both an
191               option and a modifier.  As an  option  it  has  two
192               purposes:   when  a  zipfile  is  specified with no
193               other options, -v lists  archive  files  verbosely,
194               adding to the basic -l info the compression method,
195               compressed size, compression ratio and 32-bit  CRC.
196               When no zipfile is specified (that is, the complete
197               command  is  simply  ``unzip  -v''),  a  diagnostic
198               screen  is  printed.   In  addition  to  the normal
199               header with release date and version,  unzip  lists
200               the home Info-ZIP ftp site and where to find a list
201               of other ftp and non-ftp sites; the target  operat-
202               ing  system  for  which it was compiled, as well as
203               (possibly) the hardware on which it  was  compiled,
204               the  compiler and version used, and the compilation
205               date; any special compilation  options  that  might
206               affect the program's operation (see also DECRYPTION
207               below); and any options stored in environment vari-
208               ables  that  might  do  the  same  (see ENVIRONMENT
209               OPTIONS below).  As a modifier it works in conjunc-
210               tion  with other options (e.g., -t) to produce more
211               verbose or debugging output; this is not yet  fully
212               implemented but will be in future releases.
214        -z     display only the archive comment.
216 MODIFIERS
217        -a     convert  text  files.   Ordinarily  all  files  are
218               extracted exactly as they are stored (as ``binary''
219               files).   The  -a option causes files identified by
220               zip as text files (those with the `t' label in zip-
221               info listings, rather than `b') to be automatically
222               extracted as such, converting line endings, end-of-
223               file  characters  and  the  character set itself as
224               necessary.  (For example, Unix files use line feeds
225               (LFs) for end-of-line (EOL) and have no end-of-file
226               (EOF)  marker;  Macintoshes  use  carriage  returns
227               (CRs)  for  EOLs; and most PC operating systems use
228               CR+LF for EOLs and control-Z for EOF.  In addition,
229               IBM mainframes and the Michigan Terminal System use
230               EBCDIC rather than the more common ASCII  character
231               set,  and  NT  supports  Unicode.)  Note that zip's
232               identification  of  text  files  is  by  no   means
234 Info-ZIP             17 February 2002 (v5.5)                    4
236 UNZIP(1L)                                               UNZIP(1L)
238               perfect; some ``text'' files may actually be binary
239               and vice versa.  unzip therefore prints  ``[text]''
240               or  ``[binary]'' as a visual check for each file it
241               extracts when using the -a option.  The -aa  option
242               forces  all  files to be extracted as text, regard-
243               less of the supposed file type.
245        -b     [general] treat all files as binary (no  text  con-
246               versions).  This is a shortcut for ---a.
248        -b     [Tandem]  force  the  creation  files with filecode
249               type 180 ('C') when extracting Zip  entries  marked
250               as  "text".  (On  Tandem, -a is enabled by default,
251               see above).
253        -b     [VMS] auto-convert binary files (see -a  above)  to
254               fixed-length, 512-byte record format.  Doubling the
255               option (-bb) forces all files to  be  extracted  in
256               this format. When extracting to standard output (-c
257               or -p option in effect), the default conversion  of
258               text  record delimiters is disabled for binary (-b)
259               resp. all (-bb) files.
261        -B     [Unix only, and only if  compiled  with  UNIXBACKUP
262               defined]  save  a  backup  copy of each overwritten
263               file with a tilde appended (e.g., the old  copy  of
264               ``foo''  is  renamed to ``foo~'').  This is similar
265               to the default behavior of emacs(1) in  many  loca-
266               tions.
268        -C     match  filenames  case-insensitively.  unzip's phi-
269               losophy is ``you get what you ask  for''  (this  is
270               also responsible for the -L/-U change; see the rel-
271               evant options below).  Because  some  file  systems
272               are  fully  case-sensitive (notably those under the
273               Unix  operating  system)  and  because   both   ZIP
274               archives and unzip itself are portable across plat-
275               forms, unzip's default behavior is  to  match  both
276               wildcard  and  literal  filenames case-sensitively.
277               That is, specifying  ``makefile''  on  the  command
278               line  will  only match ``makefile'' in the archive,
279               not ``Makefile'' or ``MAKEFILE'' (and similarly for
280               wildcard specifications).  Since this does not cor-
281               respond to  the  behavior  of  many  other  operat-
282               ing/file  systems  (for  example,  OS/2 HPFS, which
283               preserves mixed case but is not sensitive  to  it),
284               the  -C  option  may  be used to force all filename
285               matches to be  case-insensitive.   In  the  example
286               above,  all  three  files  would then match ``make-
287               file'' (or ``make*'', or similar).  The  -C  option
288               affects  files in both the normal file list and the
289               excluded-file list (xlist).
291        -E     [MacOS only] display contents of MacOS extra  field
293 Info-ZIP             17 February 2002 (v5.5)                    5
295 UNZIP(1L)                                               UNZIP(1L)
297               during restore operation.
299        -F     [Acorn  only]  suppress  removal  of  NFS  filetype
300               extension from stored filenames.
302        -F     [non-Acorn systems supporting long  filenames  with
303               embedded   commas,   and   only  if  compiled  with
304               ACORN_FTYPE_NFS defined] translate filetype  infor-
305               mation from ACORN RISC OS extra field blocks into a
306               NFS filetype extension and append it to  the  names
307               of  the extracted files.  (When the stored filename
308               appears to already have an  appended  NFS  filetype
309               extension,  it  is  replaced  by  the info from the
310               extra field.)
312        -i     [MacOS only] ignore filenames stored in MacOS extra
313               fields.   Instead,  the  most  compatible  filename
314               stored in the generic part of the entry's header is
315               used.
317        -j     junk  paths.   The archive's directory structure is
318               not recreated;  all  files  are  deposited  in  the
319               extraction directory (by default, the current one).
321        -J     [BeOS only] junk file attributes.  The file's  BeOS
322               file  attributes  are not restored, just the file's
323               data.
325        -J     [MacOS only] ignore MacOS extra fields.  All Macin-
326               tosh   specific  info  is  skipped.  Data-fork  and
327               resource-fork are restored as separate files.
329        -L     convert to lowercase any filename originating on an
330               uppercase-only  operating  system  or  file system.
331               (This was  unzip's  default  behavior  in  releases
332               prior  to 5.11; the new default behavior is identi-
333               cal to the old behavior with the -U  option,  which
334               is  now  obsolete  and  will be removed in a future
335               release.)   Depending  on   the   archiver,   files
336               archived  under  single-case file systems (VMS, old
337               MS-DOS FAT, etc.) may be  stored  as  all-uppercase
338               names;  this  can  be  ugly  or  inconvenient  when
339               extracting to a case-preserving file system such as
340               OS/2  HPFS  or  a  case-sensitive one such as under
341               Unix.  By default unzip  lists  and  extracts  such
342               filenames  exactly  as  they're  stored  (excepting
343               truncation, conversion of  unsupported  characters,
344               etc.);  this  option  causes the names of all files
345               from certain systems to be converted to  lowercase.
346               The  -LL option forces conversion of every filename
347               to lowercase, regardless of  the  originating  file
348               system.
350        -M     pipe  all  output through an internal pager similar
352 Info-ZIP             17 February 2002 (v5.5)                    6
354 UNZIP(1L)                                               UNZIP(1L)
356               to the Unix more(1)  command.   At  the  end  of  a
357               screenful   of   output,   unzip   pauses   with  a
358               ``--More--'' prompt;  the  next  screenful  may  be
359               viewed  by  pressing  the Enter (Return) key or the
360               space bar.  unzip can be terminated by pressing the
361               ``q''  key  and,  on some systems, the Enter/Return
362               key.  Unlike Unix more(1),  there  is  no  forward-
363               searching   or  editing  capability.   Also,  unzip
364               doesn't notice if long lines wrap at  the  edge  of
365               the  screen,  effectively resulting in the printing
366               of two or more lines and the likelihood  that  some
367               text  will  scroll off the top of the screen before
368               being viewed.  On some systems the number of avail-
369               able  lines on the screen is not detected, in which
370               case unzip assumes the height is 24 lines.
372        -n     never overwrite existing files.  If a file  already
373               exists,  skip  the  extraction of that file without
374               prompting.   By  default   unzip   queries   before
375               extracting  any  file that already exists; the user
376               may choose to  overwrite  only  the  current  file,
377               overwrite all files, skip extraction of the current
378               file, skip extraction of  all  existing  files,  or
379               rename the current file.
381        -N     [Amiga]  extract  file comments as Amiga filenotes.
382               File comments are created with  the  -c  option  of
383               zip(1L), or with the -N option of the Amiga port of
384               zip(1L), which stores filenotes as comments.
386        -o     overwrite existing files without  prompting.   This
387               is a dangerous option, so use it with care.  (It is
388               often used with -f, however, and is the only way to
389               overwrite directory EAs under OS/2.)
391        -P password
392               use  password  to decrypt encrypted zipfile entries
393               (if any).  THIS IS INSECURE!  Many multi-user oper-
394               ating  systems provide ways for any user to see the
395               current command line of any  other  user;  even  on
396               stand-alone  systems  there is always the threat of
397               over-the-shoulder peeking.  Storing  the  plaintext
398               password  as part of a command line in an automated
399               script is even worse.  Whenever possible,  use  the
400               non-echoing, interactive prompt to enter passwords.
401               (And where security is truly important, use  strong
402               encryption  such  as Pretty Good Privacy instead of
403               the relatively weak encryption provided by standard
404               zipfile utilities.)
406        -q     perform  operations  quietly  (-qq = even quieter).
407               Ordinarily unzip prints the names of the files it's
408               extracting  or testing, the extraction methods, any
409               file or zipfile comments that may be stored in  the
411 Info-ZIP             17 February 2002 (v5.5)                    7
413 UNZIP(1L)                                               UNZIP(1L)
415               archive,  and possibly a summary when finished with
416               each  archive.   The  -q[q]  options  suppress  the
417               printing of some or all of these messages.
419        -s     [OS/2,  NT,  MS-DOS] convert spaces in filenames to
420               underscores.  Since all PC operating systems  allow
421               spaces  in  filenames,  unzip  by  default extracts
422               filenames     with     spaces     intact     (e.g.,
423               ``EA DATA. SF'').   This  can  be awkward, however,
424               since MS-DOS in particular does not gracefully sup-
425               port  spaces in filenames.  Conversion of spaces to
426               underscores can eliminate the awkwardness  in  some
427               cases.
429        -U     (obsolete; to be removed in a future release) leave
430               filenames uppercase if created under  MS-DOS,  VMS,
431               etc.  See -L above.
433        -V     retain  (VMS)  file version numbers.  VMS files can
434               be stored with a  version  number,  in  the  format
435               file.ext;##.   By  default the ``;##'' version num-
436               bers are stripped, but this option allows  them  to
437               be retained.  (On file systems that limit filenames
438               to particularly short lengths, the version  numbers
439               may  be  truncated  or  stripped regardless of this
440               option.)
442        -X     [VMS, Unix, OS/2, NT] restore owner/protection info
443               (UICs)  under VMS, or user and group info (UID/GID)
444               under Unix, or access control  lists  (ACLs)  under
445               certain  network-enabled  versions  of  OS/2  (Warp
446               Server with IBM LAN Server/Requester  3.0  to  5.0;
447               Warp  Connect  with IBM Peer 1.0), or security ACLs
448               under Windows NT.  In most cases this will  require
449               special  system privileges, and doubling the option
450               (-XX) under NT instructs unzip  to  use  privileges
451               for extraction; but under Unix, for example, a user
452               who belongs to several  groups  can  restore  files
453               owned  by  any of those groups, as long as the user
454               IDs match his or her own.  Note that ordinary  file
455               attributes are always restored--this option applies
456               only to optional, extra ownership info available on
457               some operating systems.  [NT's access control lists
458               do not appear  to  be  especially  compatible  with
459               OS/2's,  so  no  attempt  is made at cross-platform
460               portability of access privileges.  It is not  clear
461               under  what  conditions  this  would ever be useful
462               anyway.]
464        -$     [MS-DOS, OS/2, NT] restore the volume label if  the
465               extraction  medium is removable (e.g., a diskette).
466               Doubling the option (-$$) allows fixed media  (hard
467               disks)  to be labelled as well.  By default, volume
468               labels are ignored.
470 Info-ZIP             17 February 2002 (v5.5)                    8
472 UNZIP(1L)                                               UNZIP(1L)
474        -/ extensions
475               [Acorn only] overrides the extension list  supplied
476               by  Unzip$Ext  environment variable. During extrac-
477               tion, filename extensions that  match  one  of  the
478               items  in  this extension list are swapped in front
479               of the base name of the extracted file.
481        -:     [all but Acorn,  VM/CMS,  MVS,  Tandem]  allows  to
482               extract  archive  members into locations outside of
483               the current `` extraction root folder''. For  secu-
484               rity reasons, unzip normally removes ``parent dir''
485               path  components  (``../'')  from  the   names   of
486               extracted  file.  This safety feature (new for ver-
487               sion 5.50) prevents unzip from accidentally writing
488               files  to  ``sensitive''  areas  outside the active
489               extraction folder tree head.  The  -:  option  lets
490               unzip  switch  back  to  its previous, more liberal
491               behaviour, to allow  exact  extraction  of  (older)
492               archives  that  used  ``../''  components to create
493               multiple directory trees at the level of  the  cur-
494               rent extraction folder.
496 ENVIRONMENT OPTIONS
497        unzip's  default  behavior  may  be  modified  via options
498        placed in an environment variable.  This can be done  with
499        any  option,  but  it is probably most useful with the -a,
500        -L, -C, -q, -o, or -n modifiers:  make unzip  auto-convert
501        text  files  by  default,  make  it convert filenames from
502        uppercase systems to lowercase, make it match names  case-
503        insensitively,  make  it  quieter, or make it always over-
504        write or never overwrite files as it extracts  them.   For
505        example,  to  make  unzip act as quietly as possible, only
506        reporting errors, one would use one of the following  com-
507        mands:
509          Unix Bourne shell:
510               UNZIP=-qq; export UNZIP
512          Unix C shell:
513               setenv UNZIP -qq
515          OS/2 or MS-DOS:
516               set UNZIP=-qq
518          VMS (quotes for lowercase):
519               define UNZIP_OPTS ""-qq""
521        Environment  options are, in effect, considered to be just
522        like any other command-line options, except that they  are
523        effectively  the  first  options  on the command line.  To
524        override an environment option, one may  use  the  ``minus
525        operator'' to remove it.  For instance, to override one of
526        the quiet-flags in the example above, use the command
528 Info-ZIP             17 February 2002 (v5.5)                    9
530 UNZIP(1L)                                               UNZIP(1L)
532            unzip --q[other options] zipfile
534        The first hyphen is the normal switch character,  and  the
535        second  is a minus sign, acting on the q option.  Thus the
536        effect here is to cancel one  quantum  of  quietness.   To
537        cancel  both  quiet  flags,  two  (or more) minuses may be
538        used:
540            unzip -t--q zipfile
541            unzip ---qt zipfile
543        (the two are equivalent).  This may seem awkward  or  con-
544        fusing,  but  it is reasonably intuitive:  just ignore the
545        first hyphen and go from there.   It  is  also  consistent
546        with the behavior of Unix nice(1).
548        As  suggested  by the examples above, the default variable
549        names are UNZIP_OPTS for VMS (where  the  symbol  used  to
550        install unzip as a foreign command would otherwise be con-
551        fused with the environment variable), and  UNZIP  for  all
552        other  operating systems.  For compatibility with zip(1L),
553        UNZIPOPT is also accepted (don't ask).  If both UNZIP  and
554        UNZIPOPT  are  defined,  however,  UNZIP takes precedence.
555        unzip's diagnostic option (-v with no zipfile name) can be
556        used  to  check  the values of all four possible unzip and
557        zipinfo environment variables.
559        The timezone variable (TZ) should be set according to  the
560        local  timezone in order for the -f and -u to operate cor-
561        rectly.  See the description  of  -f  above  for  details.
562        This  variable  may  also be necessary in order for times-
563        tamps on extracted files to be set correctly.  Under  Win-
564        dows  95/NT unzip should know the correct timezone even if
565        TZ is unset, assuming the timezone is correctly set in the
566        Control Panel.
568 DECRYPTION
569        Encrypted  archives  are fully supported by Info-ZIP soft-
570        ware,  but  due  to  United  States  export  restrictions,
571        de-/encryption  support might be disabled in your compiled
572        binary.  However, since spring 2000,  US  export  restric-
573        tions  have been liberated, and our source archives do now
574        include full crypt code.  In case you need binary  distri-
575        butions with crypt support enabled, see the file ``WHERE''
576        in any Info-ZIP source or binary  distribution  for  loca-
577        tions both inside and outside the US.
579        Some  compiled  versions  of unzip may not support decryp-
580        tion.  To  check  a  version  for  crypt  support,  either
581        attempt  to  test or extract an encrypted archive, or else
582        check unzip's diagnostic screen (see the -v option  above)
583        for  ``[decryption]''  as  one  of the special compilation
584        options.
586 Info-ZIP             17 February 2002 (v5.5)                   10
588 UNZIP(1L)                                               UNZIP(1L)
590        As noted above, the -P option may  be  used  to  supply  a
591        password  on  the command line, but at a cost in security.
592        The preferred decryption method is simply to extract  nor-
593        mally; if a zipfile member is encrypted, unzip will prompt
594        for the password without echoing  what  is  typed.   unzip
595        continues  to  use the same password as long as it appears
596        to be valid, by testing a 12-byte  header  on  each  file.
597        The  correct  password  will  always check out against the
598        header, but there is a 1-in-256 chance that  an  incorrect
599        password will as well.  (This is a security feature of the
600        PKWARE  zipfile  format;  it  helps  prevent   brute-force
601        attacks  that might otherwise gain a large speed advantage
602        by testing only the header.)  In the case that  an  incor-
603        rect  password is given but it passes the header test any-
604        way, either an incorrect CRC will  be  generated  for  the
605        extracted  data or else unzip will fail during the extrac-
606        tion because the ``decrypted'' bytes do not  constitute  a
607        valid compressed data stream.
609        If the first password fails the header check on some file,
610        unzip will prompt for another password, and  so  on  until
611        all  files  are  extracted.   If  a password is not known,
612        entering a null password (that is, just a carriage  return
613        or  ``Enter'')  is  taken  as a signal to skip all further
614        prompting.  Only unencrypted files in the archive(s)  will
615        thereafter be extracted.  (In fact, that's not quite true;
616        older versions of zip(1L) and  zipcloak(1L)  allowed  null
617        passwords,  so  unzip checks each encrypted file to see if
618        the null password works.  This may result in ``false posi-
619        tives'' and extraction errors, as noted above.)
621        Archives  encrypted  with  8-bit  passwords  (for example,
622        passwords with accented European characters)  may  not  be
623        portable  across  systems  and/or  other  archivers.  This
624        problem stems from the use of  multiple  encoding  methods
625        for  such  characters,  including Latin-1 (ISO 8859-1) and
626        OEM code page 850.  DOS PKZIP  2.04g  uses  the  OEM  code
627        page;  Windows  PKZIP  2.50 uses Latin-1 (and is therefore
628        incompatible with DOS PKZIP); Info-ZIP uses the  OEM  code
629        page  on DOS, OS/2 and Win3.x ports but Latin-1 everywhere
630        else; and Nico Mak's WinZip 6.x does not allow 8-bit pass-
631        words  at  all.   UnZip 5.3 (or newer) attempts to use the
632        default character set first (e.g., Latin-1),  followed  by
633        the alternate one (e.g., OEM code page) to test passwords.
634        On EBCDIC systems, if both of these fail, EBCDIC  encoding
635        will be tested as a last resort.  (EBCDIC is not tested on
636        non-EBCDIC systems, because there are no  known  archivers
637        that encrypt using EBCDIC encoding.)  ISO character encod-
638        ings other than Latin-1 are not supported.
640 EXAMPLES
641        To use unzip to extract all members of  the  archive  let-
642        ters.zip  into  the  current  directory and subdirectories
643        below it, creating any subdirectories as necessary:
645 Info-ZIP             17 February 2002 (v5.5)                   11
647 UNZIP(1L)                                               UNZIP(1L)
649            unzip letters
651        To extract all members of  letters.zip  into  the  current
652        directory only:
654            unzip -j letters
656        To test letters.zip, printing only a summary message indi-
657        cating whether the archive is OK or not:
659            unzip -tq letters
661        To test all zipfiles in the  current  directory,  printing
662        only the summaries:
664            unzip -tq \*.zip
666        (The backslash before the asterisk is only required if the
667        shell expands wildcards, as in Unix; double  quotes  could
668        have   been  used  instead,  as  in  the  source  examples
669        below.)  To extract to standard output all members of let-
670        ters.zip  whose  names end in .tex, auto-converting to the
671        local end-of-line convention and piping  the  output  into
672        more(1):
674            unzip -ca letters \*.tex | more
676        To  extract  the binary file paper1.dvi to standard output
677        and pipe it to a printing program:
679            unzip -p articles paper1.dvi | dvips
681        To extract all FORTRAN and C source files--*.f, *.c,  *.h,
682        and Makefile--into the /tmp directory:
684            unzip source.zip "*.[fch]" Makefile -d /tmp
686        (the  double quotes are necessary only in Unix and only if
687        globbing is turned on).  To  extract  all  FORTRAN  and  C
688        source  files, regardless of case (e.g., both *.c and *.C,
689        and any makefile, Makefile, MAKEFILE or similar):
691            unzip -C source.zip "*.[fch]" makefile -d /tmp
693        To extract any such files but convert any uppercase MS-DOS
694        or  VMS names to lowercase and convert the line-endings of
695        all of the files to the local standard (without respect to
696        any files that might be marked ``binary''):
698            unzip -aaCL source.zip "*.[fch]" makefile -d /tmp
700        To extract only newer versions of the files already in the
701        current directory, without querying (NOTE:  be careful  of
702        unzipping   in   one   timezone   a   zipfile  created  in
704 Info-ZIP             17 February 2002 (v5.5)                   12
706 UNZIP(1L)                                               UNZIP(1L)
708        another--ZIP archives other than those created by Zip  2.1
709        or  later contain no timezone information, and a ``newer''
710        file from an eastern timezone may, in fact, be older):
712            unzip -fo sources
714        To extract newer versions of the files already in the cur-
715        rent  directory  and to create any files not already there
716        (same caveat as previous example):
718            unzip -uo sources
720        To display a diagnostic screen  showing  which  unzip  and
721        zipinfo  options  are  stored  in  environment  variables,
722        whether decryption support was compiled in,  the  compiler
723        with which unzip was compiled, etc.:
725            unzip -v
727        In the last five examples, assume that UNZIP or UNZIP_OPTS
728        is set to -q.  To do a singly quiet listing:
730            unzip -l file.zip
732        To do a doubly quiet listing:
734            unzip -ql file.zip
736        (Note that the ``.zip'' is generally not  necessary.)   To
737        do a standard listing:
739            unzip --ql file.zip
740        or
741            unzip -l-q file.zip
742        or
743            unzip -l--q file.zip
744        (Extra minuses in options don't hurt.)
746 TIPS
747        The  current  maintainer, being a lazy sort, finds it very
748        useful to define a pair of aliases:  tt for ``unzip  -tq''
749        and  ii  for  ``unzip -Z'' (or ``zipinfo'').  One may then
750        simply type ``tt zipfile'' to test an  archive,  something
751        that  is  worth  making a habit of doing.  With luck unzip
752        will report ``No errors detected  in  compressed  data  of
753        zipfile.zip,''  after  which  one  may  breathe  a sigh of
754        relief.
756        The maintainer also finds it useful to set the UNZIP envi-
757        ronment  variable  to ``-aL'' and is tempted to add ``-C''
758        as well.  His ZIPINFO variable is set to ``-z''.
760 DIAGNOSTICS
761        The exit status (or error  level)  approximates  the  exit
763 Info-ZIP             17 February 2002 (v5.5)                   13
765 UNZIP(1L)                                               UNZIP(1L)
767        codes defined by PKWARE and takes on the following values,
768        except under VMS:
770               0      normal; no errors or warnings detected.
772               1      one or more warning errors were encountered,
773                      but  processing  completed successfully any-
774                      way.  This includes zipfiles  where  one  or
775                      more  files  was  skipped due to unsupported
776                      compression method  or  encryption  with  an
777                      unknown password.
779               2      a  generic  error  in the zipfile format was
780                      detected.   Processing  may  have  completed
781                      successfully  anyway;  some  broken zipfiles
782                      created by other archivers have simple work-
783                      arounds.
785               3      a  severe  error  in  the zipfile format was
786                      detected.  Processing probably failed  imme-
787                      diately.
789               4      unzip  was unable to allocate memory for one
790                      or more buffers during  program  initializa-
791                      tion.
793               5      unzip  was  unable  to  allocate  memory  or
794                      unable to obtain a tty to read  the  decryp-
795                      tion password(s).
797               6      unzip  was  unable to allocate memory during
798                      decompression to disk.
800               7      unzip was unable to allocate  memory  during
801                      in-memory decompression.
803               8      [currently not used]
805               9      the specified zipfiles were not found.
807               10     invalid  options  were specified on the com-
808                      mand line.
810               11     no matching files were found.
812               50     the disk is (or was) full during extraction.
814               51     the  end  of the ZIP archive was encountered
815                      prematurely.
817               80     the user aborted unzip prematurely with con-
818                      trol-C (or similar)
820               81     testing  or  extraction of one or more files
822 Info-ZIP             17 February 2002 (v5.5)                   14
824 UNZIP(1L)                                               UNZIP(1L)
826                      failed due to unsupported compression  meth-
827                      ods or unsupported decryption.
829               82     no  files  were  found due to bad decryption
830                      password(s).  (If even one file is  success-
831                      fully processed, however, the exit status is
832                      1.)
834        VMS interprets standard Unix  (or  PC)  return  values  as
835        other,  scarier-looking things, so unzip instead maps them
836        into VMS-style status codes.  The current  mapping  is  as
837        follows:    1  (success)  for  normal exit, 0x7fff0001 for
838        warning    errors,    and    (0x7fff000?     +     16*nor-
839        mal_unzip_exit_status) for all other errors, where the `?'
840        is 2 (error) for unzip values 2, 9-11  and  80-82,  and  4
841        (fatal  error)  for  the remaining ones (3-8, 50, 51).  In
842        addition, there is a compilation  option  to  expand  upon
843        this  behavior:  defining RETURN_CODES results in a human-
844        readable explanation of what the error status means.
846 BUGS
847        Multi-part archives are not yet supported, except in  con-
848        junction  with  zip.   (All  parts  must  be  concatenated
849        together in order, and then ``zip -F'' must  be  performed
850        on the concatenated archive in order to ``fix'' it.)  This
851        will definitely be corrected in the next major release.
853        Archives read from standard input are not  yet  supported,
854        except  with funzip (and then only the first member of the
855        archive can be extracted).
857        Archives encrypted with 8-bit passwords  (e.g.,  passwords
858        with  accented  European  characters)  may not be portable
859        across systems and/or other archivers.  See the discussion
860        in DECRYPTION above.
862        unzip's  -M  (``more'') option is overly simplistic in its
863        handling of screen output; as noted  above,  it  fails  to
864        detect  the  wrapping  of long lines and may thereby cause
865        lines at the top of the screen to be scrolled  off  before
866        being read.  unzip should detect and treat each occurrence
867        of  line-wrap  as  one  additional  line  printed.    This
868        requires  knowledge  of  the screen's width as well as its
869        height.  In addition, unzip should detect the true  screen
870        geometry on all systems.
872        Dates, times and permissions of stored directories are not
873        restored except under Unix.
875        [MS-DOS] When extracting or testing files from an  archive
876        on  a defective floppy diskette, if the ``Fail'' option is
877        chosen from DOS's ``Abort, Retry, Fail?''  message,  older
878        versions of unzip may hang the system, requiring a reboot.
879        This problem  appears  to  be  fixed,  but  control-C  (or
881 Info-ZIP             17 February 2002 (v5.5)                   15
883 UNZIP(1L)                                               UNZIP(1L)
885        control-Break) can still be used to terminate unzip.
887        Under  DEC Ultrix, unzip would sometimes fail on long zip-
888        files (bad CRC, not always reproducible).  This was appar-
889        ently  due  either  to a hardware bug (cache memory) or an
890        operating system bug (improper handling of page  faults?).
891        Since  Ultrix  has been abandoned in favor of Digital Unix
892        (OSF/1), this may not be an issue anymore.
894        [Unix] Unix special files  such  as  FIFO  buffers  (named
895        pipes),  block  devices  and  character  devices  are  not
896        restored even if they are somehow represented in the  zip-
897        file,  nor  are hard-linked files relinked.  Basically the
898        only file types  restored  by  unzip  are  regular  files,
899        directories and symbolic (soft) links.
901        [OS/2]  Extended  attributes  for existing directories are
902        only updated if  the  -o  (``overwrite  all'')  option  is
903        given.   This  is  a  limitation  of the operating system;
904        because directories only have a creation  time  associated
905        with  them,  unzip  has  no  way  to determine whether the
906        stored attributes are newer or older than those  on  disk.
907        In practice this may mean a two-pass approach is required:
908        first unpack the archive normally (with or without  fresh-
909        ening/updating  existing  files),  then overwrite just the
910        directory entries (e.g., ``unzip -o foo */'').
912        [VMS] When  extracting  to  another  directory,  only  the
913        [.foo]  syntax  is  accepted for the -d option; the simple
914        Unix foo syntax is silently ignored (as is the less common
915        VMS foo.dir syntax).
917        [VMS]  When  the  file  being  extracted  already  exists,
918        unzip's query only allows skipping, overwriting or  renam-
919        ing;  there should additionally be a choice for creating a
920        new version of  the  file.   In  fact,  the  ``overwrite''
921        choice  does  create a new version; the old version is not
922        overwritten or deleted.
924 SEE ALSO
925        funzip(1L),  zip(1L),  zipcloak(1L),   zipgrep(1L),   zip-
926        info(1L), zipnote(1L), zipsplit(1L)
929        The Info-ZIP home page is currently at
930            http://www.info-zip.org/pub/infozip/
931        or
932            ftp://ftp.info-zip.org/pub/infozip/ .
934 AUTHORS
935        The  primary Info-ZIP authors (current semi-active members
936        of  the  Zip-Bugs  workgroup)  are:   Greg  ``Cave  Newt''
937        Roelofs  (UnZip);  Onno  van  der  Linden (Zip); Jean-loup
938        Gailly (compression); Mark Adler (decompression,  fUnZip);
940 Info-ZIP             17 February 2002 (v5.5)                   16
942 UNZIP(1L)                                               UNZIP(1L)
944        Christian  Spieler (UnZip maintance coordination, VMS, MS-
945        DOS, Windows 95, NT, shared code, general  Zip  and  UnZip
946        integration  and  optimization);  Mike White (Windows GUI,
947        Windows DLLs); Kai Uwe Rommel (OS/2); Paul Kienitz (Amiga,
948        Windows  95);  Chris Herborth (BeOS, QNX, Atari); Jonathan
949        Hudson (SMS/QDOS); Sergio Monesi (Acorn RISC  OS);  Harald
950        Denker  (Atari,  MVS);  John Bush (Solaris, Amiga); Hunter
951        Goatley (VMS); Steve Salisbury  (Windows  95,  NT);  Steve
952        Miller  (Windows  CE GUI), Johnny Lee (MS-DOS, Windows 95,
953        NT); and Dave Smith (Tandem NSK).  The author of the orig-
954        inal  unzip code upon which Info-ZIP's was based is Samuel
955        H. Smith; Carl Mascott did the first Unix port; and  David
956        P.   Kirschbaum  organized  and  led Info-ZIP in its early
957        days with Keith Petersen hosting the original mailing list
958        at  WSMR-SimTel20.  The full list of contributors to UnZip
959        has grown quite large; please refer to the  CONTRIBS  file
960        in the UnZip source distribution for a relatively complete
961        version.
963 VERSIONS
964        v1.2   15 Mar 89   Samuel H. Smith
965        v2.0    9 Sep 89   Samuel H. Smith
966        v2.x   fall 1989   many Usenet contributors
967        v3.0    1 May 90   Info-ZIP (DPK, consolidator)
968        v3.1   15 Aug 90   Info-ZIP (DPK, consolidator)
969        v4.0    1 Dec 90   Info-ZIP (GRR, maintainer)
970        v4.1   12 May 91   Info-ZIP
971        v4.2   20 Mar 92   Info-ZIP (Zip-Bugs subgroup, GRR)
972        v5.0   21 Aug 92   Info-ZIP (Zip-Bugs subgroup, GRR)
973        v5.01  15 Jan 93   Info-ZIP (Zip-Bugs subgroup, GRR)
974        v5.1    7 Feb 94   Info-ZIP (Zip-Bugs subgroup, GRR)
975        v5.11   2 Aug 94   Info-ZIP (Zip-Bugs subgroup, GRR)
976        v5.12  28 Aug 94   Info-ZIP (Zip-Bugs subgroup, GRR)
977        v5.2   30 Apr 96   Info-ZIP (Zip-Bugs subgroup, GRR)
978        v5.3   22 Apr 97   Info-ZIP (Zip-Bugs subgroup, GRR)
979        v5.31  31 May 97   Info-ZIP (Zip-Bugs subgroup, GRR)
980        v5.32   3 Nov 97   Info-ZIP (Zip-Bugs subgroup, GRR)
981        v5.4   28 Nov 98   Info-ZIP (Zip-Bugs subgroup, SPC)
982        v5.41  16 Apr 00   Info-ZIP (Zip-Bugs subgroup, SPC)
983        v5.42  14 Jan 01   Info-ZIP (Zip-Bugs subgroup, SPC)
984        v5.5   17 Feb 02   Info-ZIP (Zip-Bugs subgroup, SPC)
986 Info-ZIP             17 February 2002 (v5.5)                   17