|
|
1.1 root 1: .\" Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
2: .\" Kai Uwe Rommel and Igor Mandrichenko.
3: .\" Permission is granted to any individual or institution to use, copy, or
4: .\" redistribute this software so long as all of the original files are included
5: .\" unmodified, that it is not sold for profit, and that this copyright notice
6: .\" is retained.
7: .\"
8: .\" zip.1 by Mark Adler.
9: .\"
10: .TH ZIP 1
11: .SH NAME
12: zip, zipcloak, zipnote, zipsplit \- package and compress (archive) files
13: .SH SYNOPSIS
14: .B zip
15: [
16: .B \-cdeEfghjklmoqruwyz@
17: ] [
18: .B \-b
19: temppath ] [
20: .B \-n
21: suffixes ] [
22: .B \-t
23: mmddyy ] [ zipfile list ] [
24: .B \-x
25: list ]
26: .PP
27: .B zipcloak
28: [
29: .B \-d
30: ] [
31: .BI -b " path"
32: ]
33: .I zipfile
34: .PP
35: .B zipnote
36: [
37: .B -w
38: ] [
39: .BI \-b " path"
40: ]
41: .I zipfile
42: .PP
43: .B zipsplit
44: [
45: .B \-ti
46: ] [
47: .BI \-n " size"
48: ] [
49: .BI \-b " path"
50: ]
51: .I zipfile
52: .br
53: .SH DESCRIPTION
54: .I zip
55: is a compression and file packaging utility for Unix, VMS, MSDOS,
56: OS/2, Windows NT, Minix, Atari and Macintosh. It is analogous to a
57: combination of tar and compress and is compatible with PKZIP (Phil
58: Katz ZIP) for MSDOS systems.
59: .PP
60: There is a companion to
61: .I zip
62: called
63: .I unzip
64: (of course) which you should be able
65: to find the same place you got
66: .I zip. zip
67: and
68: .I unzip
69: can work with files
70: produced by PKZIP under MSDOS, and PKZIP and PKUNZIP can work with files
71: produced by
72: .I zip.
73: .PP
74: .I zip
75: version 1.9 is compatible with pkzip 1.93a.
76: Note that pkunzip 1.10 cannot extract files produced by pkzip 1.93a
77: or zip 1.9. You must use pkunzip 1.93a or unzip 5.0 to extract them.
78: .PP
79: For a brief help on
80: .I zip
81: and
82: .I unzip,
83: run each without specifying any parameters on the command line.
84: .PP
85: .I zip
86: puts one or more compressed files into a single "zip file" along with
87: information about the files, including the name, path if requested, date
88: and time last modified, protection, and check information to verify the
89: fidelity of each entry.
90: .I zip
91: can also be used as a filter, compressing standard input to standard output.
92: .I zip
93: can pack an entire directory structure in a
94: zip file with a single command. Compression ratios of 2:1 to 3:1 are
95: common for text files.
96: .I zip
97: has one compression method (deflation) and can also store files without
98: compression. It automatically chooses the better of the two for each file
99: to be compressed.
100: .PP
101: .I zip
102: is useful for packaging a set of files to send to someone or for distribution;
103: for archiving or backing up files; and for saving disk space by temporarily
104: compressing unused files or directories.
105: .SH "HOW TO USE ZIP"
106: The simplest use of
107: .I zip
108: is as follows:
109: .PP
110: .ti +5n
111: zip stuff *
112: .PP
113: This will create the file "stuff.zip" (assuming it does not exist) and put
114: all the files in the current directory in stuff.zip in a compressed form.
115: The .zip suffix is added automatically, unless that file name given contains
116: a dot already. This allows specifying suffixes other than ".zip".
117: .PP
118: Because of the way the shell does filename substitution, files that start
119: with a "." are not included. To include those as well, you can:
120: .PP
121: .ti +5n
122: zip stuff .* *
123: .PP
124: Even this will not include any subdirectories that are in the current
125: directory. To zip up an entire directory, the command:
126: .PP
127: .ti +5n
128: zip -r foo foo
129: .PP
130: will create the file "foo.zip" containing all the files and directories in
131: the directory "foo" that is in the current directory. (The first "foo" denotes
132: the zip file, the second one denotes the directory.) The "r" option means
133: recurse through the directory structure. In this case, all the
134: files and directories in foo are zipped, including the ones that start with
135: a ".", since the recursion does not use the shell's file-name substitution.
136: You should not use -r with the name ".*", since that matches ".." which will
137: attempt to zip up the parent directory--probably not what was intended.
138: .PP
139: You may want to make a zip file that contains the files in foo, but not record
140: the directory name, foo. You can use the -j (junk path) option to leave off
141: the path:
142: .PP
143: .ti +5n
144: zip -j foo foo/*
145: .PP
146: The -y option (only under Unix) will store symbolic links as such in the
147: zip file, instead of compressing and storing the file referred to in the link.
148: .PP
149: You might be zipping to save disk space, in which case you could:
150: .PP
151: .ti +5n
152: zip -rm foo foo
153: .PP
154: where the "m" option means "move". This will delete foo and its contents
155: after making foo.zip. No deletions will be done until the zip has completed
156: with no errors. This option is obviously more dangerous and should be
157: used with care.
158: .PP
159: If the zip file already exists, these commands will replace existing or add
160: new entries to the zip file. For example, if you were really short on disk
161: space, you might not have enough room simultaneously to hold the directory
162: foo and the compressed foo.zip. In this case, you could do it in steps. If
163: foo contained the subdirectories tom, dick, and harry, then you could:
164: .PP
165: .ti +5n
166: zip -rm foo foo/tom
167: .ti +5n
168: zip -rm foo foo/dick
169: .ti +5n
170: zip -rm foo foo/harry
171: .PP
172: where the first command would create foo.zip, and the next two would add to
173: it. At the completion of each zip command, the directory just zipped would
174: be deleted, making room in which the next
175: .I zip
176: command could work.
177: .PP
178: .I zip
179: will also accept a single dash ("-") as the zip file name, in which case it
180: will write the zip file to stdout, allowing the output to be piped to another
181: program. For example:
182: .PP
183: .ti +5n
184: zip -r - . | dd of=/dev/nrst0 obs=16k
185: .PP
186: would write the zip output directly to a tape with the specified block size
187: for the purpose of backing up the current directory.
188: .PP
189: .I zip
190: also accepts a single dash ("-") as the name of a file to be compressed, in
191: which case it will read the zip file from stdin, allowing zip to take
192: input from another program. For example:
193: .PP
194: .ti +5n
195: tar cf - . | zip backup -
196: .PP
197: would compress the output of the tar command for the purpose of backing up
198: the current directory. This generally produces better compression than
199: the previous example using the -r option, because
200: .I zip
201: can take advantage of redundancy between files. The backup can be restored
202: using the command
203: .PP
204: .ti +5n
205: unzip -p backup | tar xf -
206: .PP
207: When no zip file name is given and stdout is not a terminal,
208: .I zip
209: acts as a filter, compressing standard input to standard output.
210: For example,
211: .PP
212: .ti +5n
213: tar cf - . | zip | dd of=/dev/nrst0
214: .PP
215: is equivalent to
216: .PP
217: .ti +5n
218: tar cf - . | zip - - | dd of=/dev/nrst0
219: .PP
220: Zip archives created in this manner can be extracted with the program
221: .I funzip
222: which is provided in the
223: .I unzip
224: package. For example,
225: .PP
226: .ti +5n
227: dd if=/dev/nrst0 | funzip | tar xvf -
228: .SH "MODIFYING EXISTING ZIP FILES"
229: When given the name of an existing zip file with the above commands,
230: .I zip
231: will replace identically named entries in the
232: .I zip
233: file or add entries for
234: new names. For example, if foo.zip exists and contains foo/file1 and
235: foo/file2, and the directory foo contains the files foo/file1 and foo/file3,
236: then:
237: .PP
238: .ti +5n
239: zip -r foo foo
240: .PP
241: will replace foo/file1 in foo.zip and add foo/file3 to foo.zip. After
242: this, foo.zip contains foo/file1, foo/file2, and foo/file3, with foo/file2
243: unchanged from before.
244: .PP
245: When changing an existing zip file,
246: .I zip
247: will write a temporary file with
248: the new contents, and only replace the old one when the zip has completed
249: with no errors. You can use
250: the -b option to specify a different path (usually a different device) to
251: put the temporary file in. For example:
252: .PP
253: .ti +5n
254: zip -b /tmp stuff *
255: .PP
256: will put the temporary zip file and the temporary compression files in the
257: directory "/tmp", copying over stuff.zip in the current directory when
258: done.
259: .PP
260: If you are only adding entries to a zip file, not replacing, and the
261: -g option is given, then
262: .I zip
263: grows (appends to) the file instead of copying it. The danger of this is that
264: if the operation fails, the original zip file is corrupted and lost.
265: .PP
266: There are two other ways to change or add entries in a zip file that are
267: restrictions of simple addition or replacement. The first is -u (update)
268: which will add new entries to the zip file as before but will replace
269: existing entries only if the modified date of the file is more recent than
270: the date recorded for that name in the zip file. For example:
271: .PP
272: .ti +5n
273: zip -u stuff *
274: .PP
275: will add any new files in the current directory, and update any changed files
276: in the zip file stuff.zip. Note that
277: .I zip
278: will not try to pack stuff.zip into
279: itself when you do this.
280: .I zip
281: will always exclude the zip file from the files on which to be operated.
282: .PP
283: The second restriction is -f (freshen) which, like update, will only replace
284: entries with newer files; unlike update, will not add files that are not
285: already in the zip file. For this option, you may want to simply freshen all
286: of the files that are in the specified zip file. To do this you would simply:
287: .PP
288: .ti +5n
289: zip -f foo
290: .PP
291: Note that the -f option with no arguments freshens all the entries in the
292: zip file. The same is true of -u, and hence "zip -u foo" and "zip -f foo"
293: both do the same thing.
294: .PP
295: This command should
296: be run from the same directory from which the original zip command was run,
297: since paths stored in zip files are always relative.
298: .PP
299: Another restriction that can be used with adding, updating, or freshening is
300: -t (time), which will not operate on files modified earlier than the specified
301: date. For example:
302: .PP
303: .ti +5n
304: zip -rt 120791 infamy foo
305: .PP
306: will add all the files in foo and its subdirectories that were last modified
307: on December 7, 1991, or later to the zip file infamy.zip.
308: .PP
309: Also, files can be explicitly excluded using the -x option:
310: .PP
311: .ti +5n
312: zip -r foo foo -x \\*.o
313: .PP
314: which will zip up the contents of foo into foo.zip but exclude all the
315: files that end in ".o". Here the backslash causes
316: .I zip
317: to match file names
318: that were found when foo was searched.
319: .PP
320: The last operation is -d (delete) which will remove entries from a zip file.
321: An example might be:
322: .PP
323: .ti +5n
324: zip -d foo foo/tom/junk foo/harry/\\* \\*.o
325: .PP
326: which will remove the entry foo/tom/junk, all of the files that start with
327: "foo/harry/", and all of the files that end with ".o" (in any path). Note
328: that once again, the shell expansion has been inhibited with backslashes, so
329: that
330: .I zip
331: can see the asterisks.
332: .I zip
333: can then match on the contents of the zip
334: file instead of the contents of the current directory.
335: .PP
336: Under MSDOS, -d is case sensitive when it matches names in the zip file.
337: This allows deleting names that were zipped on other systems, but requires
338: that the names be entered in upper case if they were zipped on an MSDOS
339: system, so that the names can be found in the zip file and deleted.
340: .SH "MORE OPTIONS"
341: As mentioned before,
342: .I zip
343: will use the best of two methods: deflate or store.
344: .PP
345: The option -0 will force
346: .I zip
347: to use store on all files. For example:
348: .PP
349: .ti +5n
350: zip -r0 foo foo
351: .PP
352: will zip up the directory foo into foo.zip using only store.
353: .PP
354: The speed of deflation can also be controlled with options -1 (fastest
355: method but less compression) to -9 (best compression but slower). The
356: default value is -5. For example:
357: .PP
358: .ti +5n
359: zip -r8 foo foo
360: .PP
361: In nearly all cases, a file that is already compressed cannot be compressed
362: further by
363: .I zip,
364: or if it can, the effect is minimal. The -n option prevents
365: .I zip
366: from trying to compress files that have the given suffixes.
367: Such files are simply stored (0% compression) in the output zip file,
368: so that
369: .I zip
370: doesn't waste its time trying to compress them.
371: The suffixes are separated by
372: either colons or semicolons. For example:
373: .PP
374: .ti +5n
375: zip -rn ".Z:.zip:.tiff:.gif:.snd" foo foo
376: .PP
377: will put everything in foo into foo.zip, but will store any files that end
378: in .Z, .zip, .tiff, .gif, or .snd without trying to compress them. (Image
379: and sound files often have their own specialized compression methods.)
380: The default suffix list is ".Z:.zip;.zoo:.arc:.lzh:.arj".
381: The environment variable ZIPOPT can be used to change this default. For
382: example under Unix with csh:
383: .PP
384: .ti +5n
385: setenv ZIPOPT "-n .gif:.zip"
386: .PP
387: The variable ZIPOPT can be used for any option and can include several
388: options.
389: .PP
390: Under Unix and under OS/2 (if files from an HPFS are stored),
391: .I zip
392: will store the full path (relative to the current path) and name of the
393: file (or just the name if -j is specified) in the zip file along with the
394: Unix attributes, and it will mark
395: the entry as made under Unix. If the zip file is intended for PKUNZIP under
396: MSDOS, then the -k (Katz) option should be used to attempt to convert the
397: names and paths to conform to MSDOS, store only the MSDOS attribute (just
398: the user write attribute from Unix), and mark the entry as made under MSDOS
399: (even though it wasn't).
400: .PP
401: The -o (older) option will set the "last modified" time of the zip file to
402: the latest "last modified" time of the entries in the zip file. This can
403: be used without any other operations, if desired. For example:
404: .PP
405: .ti +5n
406: zip -o foo
407: .PP
408: will change the last modified time of foo.zip to the latest time of the
409: entries in foo.zip.
410: .PP
411: The -e and -c options operate on all files updated or added to the zip file.
412: Encryption (-e) will prompt for a password on the terminal and will
413: not echo the password as it is typed (if stderr is not a TTY, zip will exit
414: with an error). New zip entries will be encrypted using that password. For
415: added peace of mind, you can use -ee, which will prompt for the password
416: twice, checking that the two are the same before using it. The encryption
417: code is distributed separately, so the -e option may not be available
418: in your version.
419: .PP
420: One-line comments can be added for each file with the -c option. The zip
421: file operations (adding or updating) will be done first, and you will then be
422: prompted for a one-line comment for each file. You can then enter the comment
423: followed by return, or just return for no comment.
424: .PP
425: The -z option will prompt you for a multi-line comment for the entire zip
426: file. This option can be used by itself, or in combination with other
427: options. The comment is ended by a line containing just a period, or an end
428: of file condition (^D on Unix, ^Z on MSDOS, OS/2, and VAX/VMS).
429: Since -z reads the
430: lines from stdin, you can simply take the comment from a file:
431: .PP
432: .ti +5n
433: zip -z foo < foowhat
434: .PP
435: The -q (quiet) option eliminates the informational messages and comment prompts
436: while
437: .I zip
438: is operating. This might be used in shell scripts, for example, or if the
439: zip operation is being performed as a background task ("zip -q foo *.c &").
440: .PP
441: .I zip
442: can take a list of file names to operate on from stdin using the -@ option.
443: In Unix, this option can be used with the find command to extend greatly
444: the functionality of
445: .I zip.
446: For example, to zip up all the C source files in the current directory and
447: its subdirectories, you can:
448: .PP
449: .ti +5n
450: find . -type f -name "*.[ch]" -print | zip source -@
451: .PP
452: Note that the pattern must be quoted to keep the shell from expanding it.
453: .PP
454: Under VMS only, the -w option will append the version number of the files to
455: the name and zip up multiple versions of files. Without -w,
456: .I zip
457: will only use the most recent version of the specified file(s).
458: .PP
459: The -l option translates the Unix end-of-line character LF into the
460: MSDOS convention CR LF. This option should not be used on binary files.
461: This option can be used on Unix if the zip file is intended for PKUNZIP
462: under MSDOS. If the input files already contain CR LF, this option adds
463: an extra CR. This ensure that "unzip -a" on Unix will get back an exact
464: copy of the original file, to undo the effect of "zip -l".
465: .PP
466: If
467: .I zip
468: is run with the -h option, or with no arguments and standard output is
469: a terminal, the license and the command-argument and option help is shown.
470: The -L option just shows the license.
471: .SH "ABOUT PATTERN MATCHING"
472: (Note: this section applies to Unix. Watch this space for details on MSDOS
473: and VMS operation.)
474: .PP
475: The Unix shell (sh or csh) does filename substitution on command arguments.
476: The special characters are ?, which matches any single character; * which
477: matches any number of characters (including none); and [] which matches any
478: character in the range inside the brackets (like [a\-f] or [0\-9]). When
479: these characters are encountered (and not escaped with a backslash or
480: quotes), the
481: shell will look for files relative to the current path that match the
482: pattern, and replace the argument with a list of the names that matched.
483: .PP
484: .I zip
485: can do the same matching on names that are in the zip file being
486: modified or, in the case of the -x (exclude) option, on the list of
487: files to be operated on, by using backslashes or quotes
488: to tell the shell not to do the name expansion. In general, when
489: .I zip
490: encounters a name in the list
491: of files to do, it first looks for the name in the file system. If it
492: finds it, it then adds it to the list of files to do. If it does not
493: find it, it will look for the name in the zip file being modified (if it
494: exists), using the pattern matching characters above, if any. For each
495: match, it will add that name to the list of files to do. After -x
496: (exclude), the names are removed from the to-do list instead of added.
497: .PP
498: The pattern matching includes the path, and so patterns like \\*.o match
499: names that end in ".o", no matter what the path prefix is. Note that the
500: backslash must precede every special character (i.e. ?*[]), or the entire
501: argument must be enclosed in double quotes ("").
502: .PP
503: In general, using backslash to make
504: .I zip
505: do the pattern matching is used
506: with the -f (freshen) and -d (delete) options, and sometimes after the
507: -x (exclude) option when used with any operation (add, -u, -f, or -d).
508: .I zip
509: will never use pattern matching to search the file system. If
510: .I zip
511: has recursed into a directory, all files (and all directories) in there
512: are fair game.
513: .SH COPYRIGHT
514: Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
515: Kai Uwe Rommel and Igor Mandrichenko.
516: Permission is granted to any individual or institution to use, copy, or
517: redistribute this software so long as all of the original files are included
518: unmodified, that it is not sold for profit, and that this copyright notice
519: is retained.
520: .SH ACKNOWLEDGEMENTS
521: Thanks to R. P. Byrne for his Shrink.Pas program which inspired this project;
522: to Phil Katz for making the zip
523: file format, compression format, and .zip filename extension all public domain;
524: to Steve Burg and Phil Katz for help on unclear points of the deflate format;
525: to Keith Petersen and Rich Wales for providing a mailing list and ftp site for
526: the INFO-ZIP group to use; and most importantly, to the INFO-ZIP group itself
527: (listed in the file infozip.who) without whose tireless testing and bug-fixing
528: efforts a portable
529: .I zip
530: would not have been possible. Finally we should thank (blame) the INFO-ZIP
531: moderator, David Kirschbaum for getting us into this mess in the first place.
532: .SH "SEE ALSO"
533: unzip(1), tar(1), compress(1)
534: .SH BUGS
535: WARNING: zip files produced by zip 1.9 must not be
536: *updated* by zip 1.0 or pkzip 1.10 or pkzip 1.93a, if they contain
537: encrypted members, or if they have been produced in a pipe or on a non
538: seekable device. The old versions of zip or pkzip would destroy the
539: zip structure. The old versions can list the contents of the zip file
540: but cannot extract it anyway (because of the new compression algorithm).
541: If you do not use encryption and use regular disk files, you do
542: not have to care about this problem.
543: .PP
544: zip 1.9 is compatible with pkzip 1.93a, except when two features
545: are used: encryption or zip file created in a pipe or on a non
546: seekable device. pkzip versions above 2.0 will support such files, and
547: unzip 5.0 already supports them.
548: .PP
549: Without -y, when zip must compress a symbolic link to an non existing file,
550: it only displays a warning "name not matched". A better warnign should be
551: given.
552: .PP
553: The option -e also forces -o (make zipfile as old as latest entry). This
554: is used to make brute force attacks on the password harder.
555: .PP
556: Under VMS, not all of the odd file formats are treated properly. Only
557: zip files of format stream-LF and fixed length 512 are expected to work
558: with zip. Others can be converted using Rahul Dhesi's BILF program.
559: This version of zip does handle some of the conversion internally.
560: When using Kermit to transfer zip files from Vax to MSDOS, type "set
561: file type block" on the Vax. When transfering from MSDOS to Vax, type
562: "set file type fixed" on the Vax. In both cases, type "set file type
563: binary" on MSDOS.
564: .PP
565: Under VMS, zip hangs for file specification that uses DECnet syntax (foo::*.*).
566: .PP
567: Under OS/2, the amount of External Attributes displayed by DIR is (for
568: compatibility) the amount returned by the 16-bit version of
569: DosQueryPathInfo(). Otherwise OS/2 1.3 and 2.0 would report different
570: EA sizes when DIRing a file.
571: However, the structure layout returned by the 32-bit DosQueryPathInfo()
572: is a bit different, it uses extra padding bytes and link pointers (it's
573: a linked list) to have all fields on 4-byte boundaries for portability
574: to future RISC OS/2 versions. Therefore the value reported by ZIP
575: (which uses this 32-bit-mode size) differs from that reported by DIR.
576: ZIP stores the 32-bit format for portability, even the 16-bit
577: MS-C-compiled version running on OS/2 1.3, so even this one shows the
578: 32-bit-mode size.
579: .PP
580: LIKE ANYTHING ELSE THAT'S FREE, ZIP AND ITS ASSOCIATED UTILITIES ARE
581: PROVIDED AS IS AND COME WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR
582: IMPLIED. IN NO EVENT WILL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY DAMAGES
583: RESULTING FROM THE USE OF THIS SOFTWARE.
584: .PP
585: That having been said, please send any problems or comments via email to
586: the Internet address
587: zip\[email protected]. For bug reports, please include the
588: version of zip, the make options you used to compile it, the machine and
589: operating system you are using, and as much additional information as
590: possible. Thank you for your support.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.