ZIP(1)                   USER COMMANDS                     ZIP(1)

NAME
     zip, zipcloak, zipnote,  zipsplit  -  package  and  compress
     (archive) files

SYNOPSIS
     zip [ -cdeEfghjklmoqruwyz@ ] [ -b temppath ] [ -n suffixes ]
     [ -t mmddyy ] [ zipfile list ] [ -x list ]

     zipcloak [ -d ] [ -b path ] zipfile

     zipnote [ -w ] [ -b path ] zipfile

     zipsplit [ -ti ] [ -n size ] [ -b path ] zipfile

DESCRIPTION
     zip is a compression and file packaging  utility  for  Unix,
     VMS,  MSDOS,  OS/2,  Windows NT, Minix, Atari and Macintosh.
     It is analogous to a combination of tar and compress and  is
     compatible with PKZIP (Phil Katz ZIP) for MSDOS systems.

     There is a companion to zip called unzip (of  course)  which
     you  should  be able to find the same place you got zip. zip
     and unzip can work with files produced by PKZIP under MSDOS,
     and PKZIP and PKUNZIP can work with files produced by zip.

     zip version 1.9 is compatible with pkzip 1.93a.   Note  that
     pkunzip 1.10 cannot extract files produced by pkzip 1.93a or
     zip 1.9. You must use pkunzip 1.93a or unzip 5.0 to  extract
     them.

     For a brief help on zip and unzip, run each without specify-
     ing any parameters on the command line.

     zip puts one or more compressed files  into  a  single  "zip
     file"  along with information about the files, including the
     name, path if requested, date and time last  modified,  pro-
     tection,  and  check  information  to verify the fidelity of
     each entry.  zip can also be used as a  filter,  compressing
     standard  input  to standard output.  zip can pack an entire
     directory structure in a zip file  with  a  single  command.
     Compression  ratios of 2:1 to 3:1 are common for text files.
     zip has one compression  method  (deflation)  and  can  also
     store  files  without  compression. It automatically chooses
     the better of the two for each file to be compressed.

     zip is useful for packaging a set of files to send to  some-
     one  or for distribution; for archiving or backing up files;
     and for saving disk space by temporarily compressing  unused
     files or directories.

HOW TO USE ZIP
     The simplest use of zip is as follows:

          zip stuff *

     This will create the file "stuff.zip" (assuming it does  not
     exist)  and  put  all  the files in the current directory in
     stuff.zip in a compressed form.  The .zip  suffix  is  added
     automatically,  unless  that  file name given contains a dot
     already.  This allows specifying suffixes other than ".zip".

     Because of the way the  shell  does  filename  substitution,
     files  that  start  with a "." are not included.  To include
     those as well, you can:

          zip stuff .* *

     Even this will not include any subdirectories  that  are  in
     the  current  directory.  To zip up an entire directory, the
     command:

          zip -r foo foo

     will create the file "foo.zip" containing all the files  and
     directories  in  the  directory "foo" that is in the current
     directory. (The first "foo" denotes the zip file, the second
     one  denotes  the  directory.)  The "r" option means recurse
     through the directory structure.   In  this  case,  all  the
     files  and directories in foo are zipped, including the ones
     that start with a ".", since the recursion does not use  the
     shell's  file-name substitution.  You should not use -r with
     the name ".*", since that matches ".." which will attempt to
     zip up the parent directory--probably not what was intended.

     You may want to make a zip file that contains the  files  in
     foo,  but  not  record the directory name, foo.  You can use
     the -j (junk path) option to leave off the path:

          zip -j foo foo/*

     The -y option (only under Unix) will store symbolic links as
     such in the zip file, instead of compressing and storing the
     file referred to in the link.

     You might be zipping to save disk space, in which  case  you
     could:

          zip -rm foo foo

     where the "m" option means "move".  This will delete foo and
     its  contents  after  making  foo.zip.  No deletions will be
     done until the zip  has  completed  with  no  errors.   This
     option  is  obviously more dangerous and should be used with
     care.

     If the zip file already exists, these commands will  replace
     existing  or  add new entries to the zip file.  For example,
     if you were really short on disk space, you might  not  have
     enough room simultaneously to hold the directory foo and the
     compressed foo.zip.  In this case, you could do it in steps.
     If  foo  contained  the subdirectories tom, dick, and harry,
     then you could:

          zip -rm foo foo/tom
          zip -rm foo foo/dick
          zip -rm foo foo/harry

     where the first command would create foo.zip, and  the  next
     two would add to it.  At the completion of each zip command,
     the directory just zipped would be deleted, making  room  in
     which the next zip command could work.

     zip will also accept a single dash ("-")  as  the  zip  file
     name,  in  which  case it will write the zip file to stdout,
     allowing the output to be  piped  to  another  program.  For
     example:

          zip -r - . | dd of=/dev/nrst0 obs=16k

     would write the zip output  directly  to  a  tape  with  the
     specified  block  size  for  the  purpose  of backing up the
     current directory.

     zip also accepts a single dash ("-") as the name of  a  file
     to  be  compressed,  in which case it will read the zip file
     from stdin, allowing zip to take input from another program.
     For example:

          tar cf - . | zip backup -

     would compress the output of the tar command for the purpose
     of backing up the current directory. This generally produces
     better compression than the previous example  using  the  -r
     option, because zip can take advantage of redundancy between
     files. The backup can be restored using the command

          unzip -p backup | tar xf -

     When no zip file name is given and stdout is not a terminal,
     zip acts as a filter, compressing standard input to standard
     output.  For example,

          tar cf - . | zip | dd of=/dev/nrst0

     is equivalent to

          tar cf - . | zip - - | dd of=/dev/nrst0

     Zip archives created in this manner can  be  extracted  with
     the  program  funzip which is provided in the unzip package.
     For example,

             dd if=/dev/nrst0 | funzip | tar xvf -

MODIFYING EXISTING ZIP FILES
     When given the name of an existing zip file with  the  above
     commands,  zip will replace identically named entries in the
     zip file or add entries for  new  names.   For  example,  if
     foo.zip exists and contains foo/file1 and foo/file2, and the
     directory foo contains the files  foo/file1  and  foo/file3,
     then:

          zip -r foo foo

     will replace foo/file1  in  foo.zip  and  add  foo/file3  to
     foo.zip.  After this, foo.zip contains foo/file1, foo/file2,
     and foo/file3, with foo/file2 unchanged from before.

     When changing an existing zip file, zip will  write  a  tem-
     porary  file with the new contents, and only replace the old
     one when the zip has completed with no errors. You  can  use
     the  -b  option  to specify a different path (usually a dif-
     ferent device) to put the temporary file in.  For example:

          zip -b /tmp stuff *

     will put the temporary zip file and the  temporary  compres-
     sion  files  in the directory "/tmp", copying over stuff.zip
     in the current directory when done.

     If you are only adding entries to a zip file, not replacing,
     and  the -g option is given, then zip grows (appends to) the
     file instead of copying it.  The danger of this is  that  if
     the  operation fails, the original zip file is corrupted and
     lost.

     There are two other ways to change or add entries in  a  zip
     file  that  are  restrictions of simple addition or replace-
     ment.  The first is -u (update) which will add  new  entries
     to  the zip file as before but will replace existing entries
     only if the modified date of the file is  more  recent  than
     the  date recorded for that name in the zip file.  For exam-
     ple:

          zip -u stuff *

     will add any new files in the current directory, and  update
     any  changed files in the zip file stuff.zip.  Note that zip
     will not try to pack stuff.zip into itself when you do this.
     zip will always exclude the zip file from the files on which
     to be operated.

     The second restriction is -f (freshen) which,  like  update,
     will  only  replace entries with newer files; unlike update,
     will not add files that are not already  in  the  zip  file.
     For  this  option, you may want to simply freshen all of the
     files that are in the specified zip file.  To  do  this  you
     would simply:

          zip -f foo

     Note that the -f option with no arguments freshens  all  the
     entries  in the zip file.  The same is true of -u, and hence
     "zip -u foo" and "zip -f foo" both do the same thing.

     This command should be run  from  the  same  directory  from
     which  the  original zip command was run, since paths stored
     in zip files are always relative.

     Another restriction that can be used with adding,  updating,
     or  freshening is -t (time), which will not operate on files
     modified earlier than the specified date.  For example:

          zip -rt 120791 infamy foo

     will add all the files in foo and  its  subdirectories  that
     were  last modified on December 7, 1991, or later to the zip
     file infamy.zip.

     Also, files can be explicitly excluded using the -x option:

          zip -r foo foo -x \*.o

     which will zip up the  contents  of  foo  into  foo.zip  but
     exclude  all the files that end in ".o".  Here the backslash
     causes zip to match file names that were found when foo  was
     searched.

     The last operation is -d (delete) which will remove  entries
     from a zip file.  An example might be:

          zip -d foo foo/tom/junk foo/harry/\* \*.o

     which will remove the entry foo/tom/junk, all of  the  files
     that  start with "foo/harry/", and all of the files that end
     with ".o" (in any path).  Note that once  again,  the  shell
     expansion  has  been inhibited with backslashes, so that zip
     can see the asterisks. zip can then match on the contents of
     the  zip  file instead of the contents of the current direc-
     tory.

     Under MSDOS, -d is case sensitive when it matches  names  in
     the  zip  file.  This allows deleting names that were zipped
     on other systems, but requires that the names be entered  in
     upper  case  if they were zipped on an MSDOS system, so that
     the names can be found in the zip file and deleted.

MORE OPTIONS
     As mentioned before, zip will use the best of  two  methods:
     deflate or store.

     The option -0 will force zip to use store on all files.  For
     example:

          zip -r0 foo foo

     will zip up the directory foo into foo.zip using only store.

     The speed of deflation can also be controlled  with  options
     -1  (fastest  method  but  less  compression)  to  -9  (best
     compression but slower). The default value is -5. For  exam-
     ple:

          zip -r8 foo foo

     In nearly all cases, a file that is already compressed  can-
     not  be  compressed further by zip, or if it can, the effect
     is minimal.  The -n  option  prevents  zip  from  trying  to
     compress files that have the given suffixes.  Such files are
     simply stored (0% compression) in the output  zip  file,  so
     that  zip  doesn't  waste  its time trying to compress them.
     The suffixes are separated by either colons  or  semicolons.
     For example:

          zip -rn ".Z:.zip:.tiff:.gif:.snd"  foo foo

     will put everything in foo into foo.zip, but will store  any
     files  that  end  in  .Z, .zip, .tiff, .gif, or .snd without
     trying to compress them.  (Image and sound files often  have
     their own specialized compression methods.) The default suf-
     fix list is ".Z:.zip;.zoo:.arc:.lzh:.arj".  The  environment
     variable  ZIPOPT  can  be  used  to change this default. For
     example under Unix with csh:

          setenv ZIPOPT "-n .gif:.zip"

     The variable ZIPOPT can be  used  for  any  option  and  can
     include several options.

     Under Unix and  under  OS/2  (if  files  from  an  HPFS  are
     stored),  zip  will  store  the  full  path (relative to the
     current path) and name of the file (or just the name  if  -j
     is   specified)   in  the  zip  file  along  with  the  Unix
     attributes, and it will mark the entry as made  under  Unix.
     If  the  zip  file is intended for PKUNZIP under MSDOS, then
     the -k (Katz) option should be used to  attempt  to  convert
     the  names  and  paths  to  conform to MSDOS, store only the
     MSDOS attribute (just the user write attribute  from  Unix),
     and  mark  the  entry  as  made  under MSDOS (even though it
     wasn't).

     The -o (older) option will set the "last modified"  time  of
     the  zip  file  to  the  latest  "last modified" time of the
     entries in the zip file.  This can be used without any other
     operations, if desired.  For example:

          zip -o foo

     will change the last modified time of foo.zip to the  latest
     time of the entries in foo.zip.

     The -e and -c options operate on all files updated or  added
     to the zip file.  Encryption (-e) will prompt for a password
     on the terminal and will not echo  the  password  as  it  is
     typed (if stderr is not a TTY, zip will exit with an error).
     New zip entries will be encrypted using that password.   For
     added  peace of mind, you can use -ee, which will prompt for
     the password twice, checking  that  the  two  are  the  same
     before   using   it.  The  encryption  code  is  distributed
     separately, so the -e option may not be  available  in  your
     version.

     One-line comments can be added for each  file  with  the  -c
     option.   The  zip file operations (adding or updating) will
     be done first, and you will then be prompted for a  one-line
     comment  for each file.  You can then enter the comment fol-
     lowed by return, or just return for no comment.

     The -z option will prompt you for a multi-line  comment  for
     the  entire zip file.  This option can be used by itself, or
     in combination with other options.  The comment is ended  by
     a line containing just a period, or an end of file condition
     (^D on Unix, ^Z on MSDOS,  OS/2,  and  VAX/VMS).   Since  -z
     reads  the lines from stdin, you can simply take the comment
     from a file:

          zip -z foo < foowhat

     The -q (quiet) option eliminates the informational  messages
     and  comment  prompts while zip is operating.  This might be
     used in shell scripts, for example, or if the zip  operation
     is  being  performed  as  a background task ("zip -q foo *.c
     &").

     zip can take a list of file names to operate on  from  stdin
     using  the -@ option.  In Unix, this option can be used with
     the find command to extend greatly the functionality of zip.
     For example, to zip up all the C source files in the current
     directory and its subdirectories, you can:

          find . -type f -name "*.[ch]" -print | zip source -@

     Note that the pattern must be quoted to keep the shell  from
     expanding it.

     Under VMS only, the -w option will append the version number
     of  the  files  to  the name and zip up multiple versions of
     files.  Without -w, zip will only use the most  recent  ver-
     sion of the specified file(s).

     The -l option translates the Unix end-of-line  character  LF
     into  the  MSDOS convention CR LF. This option should not be
     used on binary files.  This option can be used  on  Unix  if
     the  zip  file  is  intended for PKUNZIP under MSDOS. If the
     input files already contain CR LF, this option adds an extra
     CR.  This  ensure  that  "unzip -a" on Unix will get back an
     exact copy of the original file, to undo the effect of  "zip
     -l".

     If zip is run with the -h option, or with no  arguments  and
     standard  output is a terminal, the license and the command-
     argument and option help is shown.  The -L option just shows
     the license.

ABOUT PATTERN MATCHING
     (Note: this section applies to Unix.  Watch this  space  for
     details on MSDOS and VMS operation.)

     The Unix shell (sh or csh)  does  filename  substitution  on
     command  arguments.   The  special  characters  are ?, which
     matches any single character; * which matches any number  of
     characters  (including none); and [] which matches any char-
     acter in the  range  inside  the  brackets  (like  [a-f]  or
     [0-9]).   When  these  characters  are  encountered (and not
     escaped with a backslash or quotes), the shell will look for
     files  relative  to the current path that match the pattern,
     and replace the argument with  a  list  of  the  names  that
     matched.

     zip can do the same matching on names that are  in  the  zip
     file  being  modified  or,  in  the case of the -x (exclude)
     option, on the list of files to be  operated  on,  by  using
     backslashes  or  quotes to tell the shell not to do the name
     expansion.  In general, when zip encounters a  name  in  the
     list of files to do, it first looks for the name in the file
     system.  If it finds it, it then adds  it  to  the  list  of
     files  to  do.  If it does not find it, it will look for the
     name in the zip file being modified (if  it  exists),  using
     the  pattern  matching  characters  above, if any.  For each
     match, it will add that name to the list  of  files  to  do.
     After  -x  (exclude),  the  names are removed from the to-do
     list instead of added.

     The pattern matching includes the path, and so patterns like
     \*.o  match  names that end in ".o", no matter what the path
     prefix is.  Note that the backslash must precede every  spe-
     cial  character  (i.e. ?*[]), or the entire argument must be
     enclosed in double quotes ("").

     In general, using backslash  to  make  zip  do  the  pattern
     matching  is  used  with  the  -f  (freshen) and -d (delete)
     options, and sometimes after the -x  (exclude)  option  when
     used  with  any  operation  (add,  -u, -f, or -d).  zip will
     never use pattern matching to search the  file  system.   If
     zip has recursed into a directory, all files (and all direc-
     tories) in there are fair game.

COPYRIGHT
     Copyright (C) 1990-1992 Mark Adler, Richard B. Wales,  Jean-
     loup  Gailly, Kai Uwe Rommel and Igor Mandrichenko.  Permis-
     sion is granted to any individual  or  institution  to  use,
     copy,  or  redistribute  this software so long as all of the
     original files are included unmodified, that it is not  sold
     for profit, and that this copyright notice is retained.

ACKNOWLEDGEMENTS
     Thanks to R. P.  Byrne  for  his  Shrink.Pas  program  which
     inspired  this project; to Phil Katz for making the zip file
     format, compression format, and .zip filename extension  all
     public  domain;  to  Steve  Burg  and  Phil Katz for help on
     unclear points of the deflate format; to Keith Petersen  and
     Rich Wales for providing a mailing list and ftp site for the
     INFO-ZIP group to use; and most importantly, to the INFO-ZIP
     group  itself (listed in the file infozip.who) without whose
     tireless testing and bug-fixing efforts a portable zip would
     not have been possible.  Finally we should thank (blame) the
     INFO-ZIP moderator, David Kirschbaum  for  getting  us  into
     this mess in the first place.

SEE ALSO
     unzip(1), tar(1), compress(1)

BUGS
     WARNING: zip files produced by zip 1.9 must not be *updated*
     by  zip  1.0  or  pkzip 1.10 or pkzip 1.93a, if they contain
     encrypted members, or if they have been produced in  a  pipe
     or  on  a  non  seekable  device. The old versions of zip or
     pkzip would destroy the zip structure. The old versions  can
     list the contents of the zip file but cannot extract it any-
     way (because of the new compression algorithm).  If  you  do
     not  use  encryption  and use regular disk files, you do not
     have to care about this problem.

     zip 1.9 is compatible with  pkzip  1.93a,  except  when  two
     features  are used: encryption or zip file created in a pipe
     or on a non seekable device. pkzip versions above  2.0  will
     support such files, and unzip 5.0 already supports them.

     Without -y, when zip must compress a symbolic link to an non
     existing   file,  it  only  displays  a  warning  "name  not
     matched". A better warnign should be given.

     The option -e also forces -o (make zipfile as old as  latest
     entry).  This  is  used  to  make brute force attacks on the
     password harder.

     Under VMS, not all of the odd file formats are treated prop-
     erly.   Only  zip files of format stream-LF and fixed length
     512 are expected to work with zip.  Others can be  converted
     using  Rahul Dhesi's BILF program.  This version of zip does
     handle some of the conversion internally.  When using Kermit
     to transfer zip files from Vax to MSDOS, type "set file type
     block" on the Vax.  When transfering from MSDOS to Vax, type
     "set  file type fixed" on the Vax.  In both cases, type "set
     file type binary" on MSDOS.

     Under VMS, zip hangs for file specification that uses DECnet
     syntax (foo::*.*).

     Under OS/2, the amount of External Attributes  displayed  by
     DIR is (for compatibility) the amount returned by the 16-bit
     version of DosQueryPathInfo(). Otherwise OS/2  1.3  and  2.0
     would  report  different  EA sizes when DIRing a file.  How-
     ever,  the  structure  layout   returned   by   the   32-bit
     DosQueryPathInfo() is a bit different, it uses extra padding
     bytes and link pointers (it's a linked  list)  to  have  all
     fields  on  4-byte boundaries for portability to future RISC
     OS/2 versions. Therefore the value reported  by  ZIP  (which
     uses  this  32-bit-mode  size) differs from that reported by
     DIR.  ZIP stores the 32-bit format for portability, even the
     16-bit  MS-C-compiled  version  running on OS/2 1.3, so even
     this one shows the 32-bit-mode size.

     LIKE ANYTHING ELSE THAT'S FREE, ZIP AND ITS ASSOCIATED UTIL-
     ITIES  ARE  PROVIDED  AS IS AND COME WITH NO WARRANTY OF ANY
     KIND, EITHER EXPRESSED OR IMPLIED.  IN  NO  EVENT  WILL  THE
     COPYRIGHT  HOLDERS  BE LIABLE FOR ANY DAMAGES RESULTING FROM
     THE USE OF THIS SOFTWARE.

     That having been said, please send any problems or  comments
     via email to the Internet address zip-bugs@cs.ucla.edu.  For
     bug reports, please include the version  of  zip,  the  make
     options  you  used  to compile it, the machine and operating
     system you are using, and as much additional information  as
     possible.  Thank you for your support.