mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
1468 lines
65 KiB
Plaintext
1468 lines
65 KiB
Plaintext
.!
|
|
.! File: ZIP.RNH
|
|
.!
|
|
.! Author: Hunter Goatley
|
|
.!
|
|
.! Date: October 22, 1991
|
|
.!
|
|
.! Description:
|
|
.!
|
|
.! RUNOFF source file for portable ZIP on-line help for VMS.
|
|
.! Adapted from MANUAL, distributed with ZIP.
|
|
.!
|
|
.! To build: $ RUNOFF ZIP.RNH
|
|
.! $ LIBR/HELP/INSERT libr ZIP
|
|
.!
|
|
.! Modification history:
|
|
.!
|
|
.! Hunter Goatley 22-OCT-1991 20:45
|
|
.! Genesis.
|
|
.! Jean-loup Gailly 25 March 92
|
|
.! Adaptation to zip 1.6.
|
|
.! Igor Mandrichenko 9-JUN-1992
|
|
.! Added explanation of -V option.
|
|
.! Jean-loup Gailly 14 June 92
|
|
.! Adaptation to zip 1.8.
|
|
.! Jean-loup Gailly 20 Aug 92
|
|
.! Adaptation to zip 1.9.
|
|
.! Jean-loup Gailly 31 Aug 93
|
|
.! Adaptation to zip 2.0.
|
|
.! Christian Spieler 20 Sep 93
|
|
.! Adaptation to zip 2.0 and OpenVMS completed.
|
|
.! Christian Spieler 05 Dec 95
|
|
.! Adaptation to zip 2.1, new options.
|
|
.! Christian Spieler 20 Jan 96
|
|
.! Changed -L and -v descriptions.
|
|
.! Christian Spieler 11 Feb 96
|
|
.! Added -X option.
|
|
.! Onno van der Linden,
|
|
.! Christian Spieler 13 Mar 96
|
|
.! Removed -ee option.
|
|
.! Christian Spieler 09 Feb 96
|
|
.! Updated copyright notice, Zip version.
|
|
.! Christian Spieler 21 Jul 97
|
|
.! Added -P, -R, -i@, -x@ and -tt options, modified for Zip 2.2.
|
|
.! Christian Spieler 14 Oct 97
|
|
.! unified spelling of "Info-ZIP", final cleanups for 2.2.
|
|
.! Steven Schweda 10 May 2007
|
|
.! General update for version 3.0.
|
|
.! Ed Gordon 12 May 2007
|
|
.! Minor updates for version 3.0.
|
|
.!
|
|
.noflags
|
|
.lm4 .rm72
|
|
.indent -4
|
|
1 ZIP
|
|
.br
|
|
Zip is a compression and file packaging utility for several operating
|
|
systems, including UNIX, VMS, MSDOS, OS/2, Windows 9x/NT/XP, Minix, Atari,
|
|
Macintosh, Amiga, and Acorn RISC OS. It is analogous to a combination of
|
|
tar and compress and is compatible with PKZIP (Phil Katz's ZIP) for
|
|
MSDOS systems.
|
|
.sk
|
|
Zip is useful for packaging a set of files for distribution, for
|
|
archiving files, and for saving disk space by temporarily compressing
|
|
unused files or directories. A companion program, UnZip, unpacks Zip
|
|
archives.
|
|
.sk
|
|
For brief help on Zip or UnZip, run the program without specifying any
|
|
parameters on the command line.
|
|
.sk
|
|
This description covers the Zip program which uses a UNIX-style command
|
|
line. A separate program is available which provides a VMS-style CLI
|
|
command line, and it has its own documentation. Refer to the Zip
|
|
installation instructions for details.
|
|
.sk
|
|
Format
|
|
.sk;.lm+2;.literal
|
|
ZIP [-options] archive inpath inpath ...
|
|
.end literal;.lm-2
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Basic_Usage
|
|
.br
|
|
Format
|
|
.sk;.lm+2;.literal
|
|
ZIP [-options] archive inpath inpath ...
|
|
.end literal;.lm-2
|
|
.sk
|
|
The default action of Zip is to add or replace entries in "archive" from
|
|
the list of "inpath" file specifications, which can include directories
|
|
and file names with VMS-style wildcards, or the special name -@ to read
|
|
file specifications from SYS$INPUT (stdin).
|
|
.sk
|
|
With SET PROCESS /PARSE_STYLE = EXTENDED (available on recent non-VAX
|
|
systems), Zip preserves the case of the command line. Otherwise, mixed-
|
|
or upper-case options and arguments must be quoted. For example,
|
|
"-V". Examples in this document generally do not show this quotation,
|
|
so VAX and /PARSE_STYLE = TRADITIONAL users (that is, troglodytes) will
|
|
need to add quotation where needed when working with these examples.
|
|
.sk
|
|
General
|
|
.sk
|
|
Zip reads one or more files, compresses the data (normally), and stores
|
|
the compressed information into a single Zip archive file, along with
|
|
information about each file (name, path, date and time of last
|
|
modification, protection, and check information to verify file
|
|
integrity). On a VMS system, Zip can also save VMS/RMS file attributes,
|
|
allowing UnZip to restore the files without loss of important file
|
|
attributes. Zip can pack an entire directory structure into a Zip
|
|
archive with a single command.
|
|
.sk
|
|
Compression
|
|
.sk
|
|
Compression ratios of 2:1 to 3:1 are common for text files. Zip has one
|
|
standard compression method ("deflate") and can also store files without
|
|
compression. Zip (and UnZip) may be built with optional support for the
|
|
bzip2 compression method. Then, the user may select bzip2 compression
|
|
instead of the default "deflate" method. Zip automatically chooses
|
|
simple storage over compression for a file, if the specified compression
|
|
method does not actually compress the data in that file.
|
|
.sk
|
|
Compatibility
|
|
.sk
|
|
Zip and UnZip can work with archives produced by PKZIP (supporting most
|
|
PKZIP features up to PKZIP version 4.6), and PKZIP and PKUNZIP can work
|
|
with archives produced by Zip (with some exceptions, notably streamed
|
|
archives, but recent changes in the .ZIP file standard may facilitate
|
|
better compatibility). Zip version 3.0 is compatible with PKZIP 2.04
|
|
and also supports the Zip64 extensions of PKZIP 4.5 which allows
|
|
archives as well as files to exceed the previous 2 GB limit (4 GB in
|
|
some cases). Zip also supports bzip2 compression if the bzip2 library
|
|
is included when Zip is built. Note that PKUNZIP 1.10 cannot extract
|
|
files produced by PKZIP 2.04 or Zip 3.0. You must use PKUNZIP 2.04g or
|
|
UnZip 5.0p1 (or later versions) to extract them.
|
|
.sk
|
|
Large Archives and Zip64
|
|
.sk
|
|
Where the operating system and C run-time support allow, Zip 3.0 and
|
|
UnZip 6.0 (and later versions) support large files (input and archive),
|
|
using the Zip64 extensions to the original .ZIP file format. On VMS,
|
|
this genarally means non-VAX systems with VMS V7.2 or later (perhaps
|
|
requiring a C RTL ECO before VMS V7.3-2).
|
|
.sk
|
|
Zip automatically uses the Zip64 extensions when a file larger than 2 GB
|
|
is added to an archive, an archive containing a Zip64 entry is updated
|
|
(if the resulting archive still needs Zip64), the size of the archive
|
|
will exceed 4 GB, or when the number of entries in the archive will
|
|
exceed about 64K. Zip64 is also used for archives streamed to a
|
|
non-seekable output device. You must use a 4.5 compatible UnZip to
|
|
extract files using the Zip64 extensions such as UnZip 6.0 or later.
|
|
.sk
|
|
In addition, streamed archives, entries encrypted with standard
|
|
encryption, or split archives created with the pause option may not be
|
|
compatible with PKZIP as data descriptors are used, and PKZIP at the
|
|
time of this writing does not support data descriptors (but recent
|
|
changes in the PKWare published .ZIP file standard now include some
|
|
support for the data descriptor format Zip uses).
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 More_Usage
|
|
.br
|
|
Here is a very simple example of Zip use:
|
|
.sk;.indent 10;
|
|
$ zip stuff.zip *.*
|
|
.sk
|
|
This will create the Zip archive "stuff.zip" (assuming it does not
|
|
already exist) and put all the (non-directory) files (";0") from the
|
|
current default directory into "stuff.zip" in a compressed form. The
|
|
archive is opened using a default file specification of
|
|
"SYS$DISK:[].zip", so specifying "stuff" as the archive name would also
|
|
create (or use an existing) "stuff.zip", but specifying "stuff.other"
|
|
would give you that name. In general, Zip doesn't care about the type
|
|
in the file specification, but for split archives (archives split over
|
|
multiple files), the user should normally specify a type-less name,
|
|
because Zip will normally generate sequentially numbered types ".z01",
|
|
".z02", and so on for the early splits, and then the required ".zip" for
|
|
the last split. These file types are required by the Zip standard for
|
|
split archives.
|
|
.sk
|
|
Standard VMS wildcard expansion ($SEARCH) is used to interpret the
|
|
"inpath" file and directory specifications, like the "*.*" in this
|
|
example.
|
|
.sk
|
|
On VMS, the most natural way to archive an entire directory tree is to
|
|
use a directory-depth wildcard ("[...]"). For example:
|
|
.sk;.indent 10
|
|
zip foo [...]*.*
|
|
.sk
|
|
This will create the file "foo.zip" containing all the files (";0") and
|
|
directories in and below the current default directory. A more
|
|
UNIX-like way to do this would be to use the -r (--recurse-paths)
|
|
option:
|
|
.sk;.indent 10
|
|
$ zip -r foo *.*
|
|
.sk
|
|
Zip avoids including its own output files when selecting files to
|
|
include in the archive, so it should be safe, as in this case, to create
|
|
the archive in the same drectory as the input files.
|
|
.sk
|
|
One or more specific files, directories, or subdirectories may also be
|
|
specified:
|
|
.lm +10;.literal
|
|
zip foo.zip readme.txt [www...]*.* [.ftp...]*.* -
|
|
[.src]*.h [.src]*.c
|
|
.end literal;.lm -10
|
|
.sk
|
|
For security reasons, paths in Zip archives are always stored as
|
|
relative paths, so some care is needed when creating an archive so that
|
|
it will create the intended directory structure when UnZip is used to
|
|
unpack it.
|
|
.sk
|
|
To use -r with a specific directory, the name of the directory file
|
|
itself must be specified:
|
|
.sk;.indent 10
|
|
zip -r foo.zip [000000]www.dir ftp.dir
|
|
.sk
|
|
You may want to make an archive 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:
|
|
.sk;.indent 10
|
|
$ zip -j foo [.foo]*.*
|
|
.sk
|
|
If you are short on disk space, you might not have enough room to hold
|
|
both the original directory and the corresponding compressed Zip
|
|
archive. In this case, you can create the archive in steps, and use the
|
|
-m option. For example, if [.foo] contains the subdirectories [.tom],
|
|
[.dick], and [.harry], you could:
|
|
.sk
|
|
.lm +10;.literal
|
|
zip -m foo [.foo.tom...]*.*
|
|
zip -m foo [.foo.dick...]*.*
|
|
zip -m foo [.foo.harry...]*.*
|
|
.end literal;.lm -10
|
|
.sk
|
|
The first command would create foo.zip, and the next two would add to
|
|
it. The -m option means "move", and it will cause Zip to delete all
|
|
files added to the archive after making or updating foo.zip. No
|
|
deletions will be done until the Zip operation has completed with no
|
|
errors. This option is obviously dangerous and should be used with
|
|
care, but it does reduce the need for free disk space. When -m is
|
|
used, the -T option is recommended and will test the resulting archive
|
|
before deleting the input files.
|
|
.sk
|
|
If a file specification list is too long to fit conveniently on the Zip
|
|
command line, the -@ option can be used to cause Zip to read a list of
|
|
file specifications from SYS$INPUT (stdin). If a DCL command procedure
|
|
is used, the names can be specified in the procedure:
|
|
.sk;
|
|
.lm +10;.literal
|
|
$ zip foo -@
|
|
$ deck
|
|
file_spec_1
|
|
file_spec_2
|
|
file_spec_3
|
|
$ eod
|
|
.end literal;.lm -10
|
|
.sk
|
|
The file specifications can also be put into a separate file, and fed
|
|
into Zip by explicitly defining SYS$INPUT, or by using PIPE. For
|
|
example, with the list in foo.zfl:
|
|
.sk;
|
|
.lm +10;.literal
|
|
$ define /user_mode sys$input foo.zfl
|
|
$ zip foo -@
|
|
.end literal;.lm -10;
|
|
or:
|
|
.lm +10;.literal
|
|
$ pipe type foo.zfl | zip foo -@
|
|
.end literal;.lm -10
|
|
.sk
|
|
If Zip is not able to read a file, it issues a warning but continues.
|
|
See the -MM option for more on how Zip handles patterns that are not
|
|
matched and files that are not readable. If some files were skipped, a
|
|
warning is issued at the end of the Zip operation noting how many files
|
|
were read and how many skipped.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Comments
|
|
.br
|
|
One-line comments may be included in the archive for each file added,
|
|
using the -c (--entry-comments) option. File operations (adding,
|
|
updating) are done first, and the user is then prompted for a one-line
|
|
comment for each file added or updated. Enter the comment followed by
|
|
<Return>, or just <Return> for no comment.
|
|
.sk
|
|
A single multi-line comment may be included for the archive as a whole,
|
|
using the -z (--archive-comment) option. UnZip (including UnZip SFX)
|
|
will display this comment when it expands the archive. The comment is
|
|
read from SYS$INPUT (stdin), and is terminated by the usual end-of-file
|
|
character, CTRL/Z. As usual, in a DCL command procedure, these data can
|
|
be included in-line in the procedure, or a user may DEFINE SYS$INPUT to
|
|
a file to get the comment from that file. Where supported, the DCL PIPE
|
|
command can also be used to redirect SYS$INPUT from a file.
|
|
.sk
|
|
Note that -z (--archive-comment) and -@ (read file specifications from
|
|
SYS$INPUT (stdin)) can't be used together (successfully).
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Compression
|
|
.br
|
|
Zip can archive files with or without compression. The standard
|
|
compression method ("deflate") is compatible with all UnZip versions
|
|
(except really old ones that only understand the "store" method).
|
|
Current Zip and UnZip versions may be built with optional support for
|
|
the bzip2 compression method. (The bzip2 method can compress better,
|
|
especially when compressing smaller files, but uses more CPU time, and
|
|
requires an UnZip which includes the optional bzip2 support. See the
|
|
installation instructions for details on adding bzip2 compression
|
|
support at build time.)
|
|
.sk
|
|
Numeric compression level options control the effort put into data
|
|
compression, with -1 being the fastest, and -9 giving the most
|
|
compression.
|
|
.sk
|
|
Compression control options:
|
|
.sk;.lm +10;.literal
|
|
-Z mthd use compress method "mthd",
|
|
--compression-method mthd "bzip2" or "deflate" (default)
|
|
|
|
-0 (--store) no compression
|
|
-1 (--compress-1) compression level 1
|
|
-2 (--compress-2) compression level 2
|
|
-3 (--compress-3) compression level 3
|
|
-4 (--compress-4) compression level 4
|
|
-5 (--compress-5) compression level 5
|
|
-6 (--compress-6) compression level 6
|
|
-7 (--compress-7) compression level 7
|
|
-8 (--compress-8) compression level 8
|
|
-9 (--compress-9) compression level 9
|
|
.end literal;.lm -10
|
|
.sk
|
|
Normally, a file which is already compressed will not be compressed much
|
|
further (if at all) by Zip, and trying to do it can waste considerable
|
|
CPU time. Zip can suppress compression on files with particular types,
|
|
specified as a colon- or semi-colon-separated list of file types:
|
|
.sk;.indent 10
|
|
-n type1[:type2[...]] (--suffixes type1[:type2[...]])
|
|
.sk
|
|
For example:
|
|
.sk;.indent 10
|
|
zip -n .bz2:.gz:.jpeg:.jpg:.mp3:.zip foo [.foo]*.*
|
|
.sk
|
|
will put everything (";0") from [.foo] into foo.zip, but will store any
|
|
files that end in .bz2, .gz, .jpeg, .jpg, .mp3, or .zip, without trying
|
|
to compress them.
|
|
.sk
|
|
The default type list is .Z:.zip:.zoo:.arc:.lzh:.arj, and the comparison
|
|
is case-insensitive.
|
|
.sk
|
|
-9 (--compress-9) will override -n (--suffixes), causing compression to
|
|
be attempted for all files.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Encryption
|
|
.br
|
|
Zip offers optional encryption, using a method which by modern standards
|
|
is generally considered to be weak.
|
|
.sk;.literal
|
|
-e --encrypt
|
|
.end literal;.br
|
|
Encrypt new or updated archive entries using a password which is
|
|
supplied by the user interactively on the terminal in response to a
|
|
prompt. (The password will not be echoed.) If SYS$COMMAND is not a
|
|
terminal, Zip will exit with an error. The password is verified before
|
|
being accepted.
|
|
.sk;.literal
|
|
-P password --password password
|
|
.end literal;.br
|
|
Use "password" to encrypt new or updated archive entries (if any).
|
|
USING -P IS INSECURE! Many multi-user operating systems provide ways
|
|
for any user (or a privileged user) to see the current command line of
|
|
any other user. Even on more secure systems, there is always the threat
|
|
of over-the-shoulder peeking. Storing the plaintext password as part of
|
|
a command line in a command procedure is even less secure. Whenever
|
|
possible, use the non-echoing, interactive password entry method.
|
|
.sk
|
|
Because standard Zip encryption is weak, where security is truly
|
|
important, use a strong encryption program, such as Pretty Good Privacy
|
|
(PGP) or GNU Privacy Guard (GnuPG), on an archive instead of standard
|
|
Zip encryption. A stronger encryption method, such as AES, is planned
|
|
for Zip 3.1.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Exit_Status
|
|
.br
|
|
On VMS, Zip's UNIX-style exit values are mapped into VMS-style status
|
|
codes with facility code 1955 = %x7A3, and with the inhibit-message
|
|
(%x10000000) and facility-specific (%x00008000) bits set:
|
|
.sk
|
|
.literal
|
|
%x17A38001 normal exit
|
|
%x17A38000+ 16* Zip_error_code warnings
|
|
%x17A38002+ 16* Zip_error_code normal errors
|
|
%x17A38004+ 16* Zip_error_code fatal errors
|
|
.end literal
|
|
.sk
|
|
Note that multiplying the UNIX-style Zip error code by 16 places it
|
|
conveniently in the hexadecimal representation of the VMS exit code,
|
|
"__" in %x17A38__s, where "s" is the severity code. For example, a
|
|
truncated archive might cause Zip error code 2, which would be
|
|
transformed into the VMS exit status %x17A38024.
|
|
.sk
|
|
The Zip VMS exit codes include severity values which approximate those
|
|
defined by PKWARE, as shown in the following table:
|
|
.literal
|
|
|
|
VMS Zip err
|
|
severity code Error description
|
|
----------+---------+----------------------------------------------
|
|
Success 0 Normal; no errors or warnings detected.
|
|
Fatal 2 Unexpected end of archive.
|
|
Error 3 A generic error in the archive format was
|
|
detected. Processing may have completed
|
|
successfully anyway; some broken archives
|
|
created by other archivers have simple work-
|
|
arounds.
|
|
Fatal 4 Zip was unable to allocate memory for one or
|
|
more buffers during program initialization.
|
|
Fatal 5 A severe error in the archive format was
|
|
detected. Processing probably failed imme-
|
|
diately.
|
|
Error 6 Entry too large to be split with zipsplit.
|
|
Error 7 Invalid comment format.
|
|
Fatal 8 Zip -T failed or out of memory.
|
|
Error 9 The user aborted zip prematurely with con-
|
|
trol-C (or equivalent).
|
|
Fatal 10 Zip encountered an error while using a temp
|
|
file.
|
|
Fatal 11 Read or seek error.
|
|
Warning 12 Zip has nothing to do.
|
|
Error 13 Missing or empty zip file.
|
|
Fatal 14 Error writing to a file.
|
|
Fatal 15 Zip was unable to create a file to write to.
|
|
Error 16 Bad command line parameters.
|
|
Error 18 Zip could not open a specified file to read.
|
|
Fatal 19 Zip was built with options not supported on
|
|
this system
|
|
Fatal 20 Attempt to read unsupported Zip64 archive
|
|
.end literal
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Extra_Fields
|
|
.br
|
|
The .ZIP file format allows some extra data to be stored with a file in
|
|
the archive. For example, where local time zone information is
|
|
available, Zip can store UTC date-time data for files. (Look for
|
|
USE_EF_UT_TIME in a "zip -v" report.) On VMS, with -V or -VV, Zip will
|
|
also store VMS-specific file attributes. These data are packaged as
|
|
"extra fields" in the archive. Some extra fields are specific to a
|
|
particular operating system (like VMS file attributes). Large files
|
|
(bigger than 4GB) on any OS require an extra field to hold their 64-bit
|
|
size data. Depending on the capabilities of the UnZip program used to
|
|
expand the archive, these extra fields may be used or ignored when files
|
|
are extracted from the archive.
|
|
.sk
|
|
Some extra fields, like UTC date-times or VMS file attributes, are
|
|
optional. Others, like the Zip64 extra field which holds 64-bit sizes
|
|
for a large file, are required.
|
|
.sk
|
|
The -X (--strip-extra) option suppresses the saving of any optional
|
|
extra fields in the archive. (Thus, -X conflicts with -V or -VV.)
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Environment
|
|
.br
|
|
A user can specify default command-line options and arguments by
|
|
defining an "environment variable" (that is, a logical name or DCL
|
|
symbol), "ZIP_OPTS" or "ZIPOPT", to specify them. If both "ZIP_OPTS" and
|
|
"ZIPOPT" are specified, the definition of "ZIPOPT" prevails.
|
|
.sk
|
|
The C RTL function getenv() is used to sense these variables, so its
|
|
behavior determines what happens if both a logical name and a symbol are
|
|
defined. As of VMS V7.3, a logical name supercedes a symbol.
|
|
.sk
|
|
The "zip -v" report should show the perceived settings of these
|
|
variables.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 File_Names
|
|
.br
|
|
Zip deals with file names in the system file system and with file names
|
|
in Zip archives. File names in a Zip archive are stored in a UNIX-like
|
|
path-name format. For example, a VMS file specification like this:
|
|
.sk;.indent 10
|
|
[.zip30.vms]descrip.mms
|
|
.sk
|
|
could appear in a Zip archive as:
|
|
.sk;.indent 10
|
|
zip30/vms/descrip.mms
|
|
.sk
|
|
For security reasons, paths in Zip archives are always stored as
|
|
relative paths, so an absolute VMS directory specification will be
|
|
transformed to a relative path in the archive (that is, no leading "/").
|
|
For example, the following absolute directory specification would give
|
|
the same archive path as the previous (relative) example:
|
|
.sk;.indent 10
|
|
[zip30.vms]descrip.mms
|
|
.sk
|
|
Also, device names are dropped, so the following file specification
|
|
would also give the same archive path:
|
|
.sk;.indent 10
|
|
sys$sysdevice:[zip30.vms]descrip.mms
|
|
.sk
|
|
If an archive is intended for use with PKUNZIP under MSDOS, then the -k
|
|
(for "Katz", --DOS-names) option should be used to attempt to adjust the
|
|
names and paths to conform to MSDOS character-set and length
|
|
limitations, to store only the MSDOS file attributes (just the
|
|
owner:write attribute from VMS), and to mark the entry as made under
|
|
MSDOS (even though it wasn't).
|
|
.sk
|
|
Note that file specifications in the file system must be specified using
|
|
VMS notation, but file names in an archive must be specified using the
|
|
UNIX-like notation used in the archive. For example, where a BACKUP
|
|
command might look like this:
|
|
.sk.indent 10
|
|
$ back [.zip30...]*.* /excl = [...vms]*.c stuff.bck /save
|
|
.sk
|
|
a corresponding Zip command might look like this:
|
|
.sk;.indent 10;
|
|
$ zip stuff.zip [.zip30...]*.* -x */vms/*.c
|
|
.sk
|
|
because the files to be added to the Zip archive are specified using VMS
|
|
file specifications, but the -x (--exclude) option excludes names based
|
|
on their archive path/file names. Options dealing with archive names
|
|
include -R (--recurse-patterns), -d (--delete), -i (--include), -x
|
|
(--exclude), and -U (--copy-entries).
|
|
.sk
|
|
Note: By default, on VMS, archive name pattern matching (-R, -d, -i, -x,
|
|
and -U) is case sensitive, even when the file system is not case
|
|
sensitive (or even case preserving). This allows accurate matching of
|
|
mixed-case names in an archive which may have been created on a system
|
|
with a case sensitive file system, but it can involve extra effort on
|
|
VMS, where it may be necessary to use unnatural case names (or the same
|
|
names in multiple cases, like "*.obj *.OBJ") for this kind of pattern
|
|
matching to give the desired behavior. If completely case-blind pattern
|
|
matching behavior is desired, specify the -ic (--ignore-case) option.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
3 Case
|
|
.br
|
|
For better compatibility with UNIX-like systems, Zip, by default,
|
|
down-cases ODS2 file names. For example, the following file on an ODS2
|
|
file system:
|
|
.sk;.indent 10
|
|
[.ZIP30.VMS]DESCRIP.MMS
|
|
.sk
|
|
would appear in an archive as:
|
|
.sk;.indent 10
|
|
zip30/vms/descrip.mms
|
|
.sk
|
|
Zip versions before 3.0 down-cased all VMS file names. Now, various
|
|
options give the user control over these conversions:
|
|
.sk
|
|
.lm +10;.literal
|
|
-C preserve case of all file names
|
|
-C- down-case all file names
|
|
-C2 preserve case of ODS2 names
|
|
-C2- down-case ODS2 file names (default)
|
|
-C5 preserve case of ODS5 names (default)
|
|
-C5- down-case ODS5 file names
|
|
.end literal;.lm -10
|
|
.sk
|
|
Case is handled differently for archive member names, which the user
|
|
specifies with the -R, -d, -i, -x, and -U options. By default, on VMS,
|
|
archive name pattern matching is case sensitive, even when the file
|
|
system is not case sensitive (or even case preserving). This allows
|
|
accurate matching of mixed-case names in an archive which may have been
|
|
created on a system with a case sensitive file system, but it can
|
|
involve extra effort on VMS, where it may be necessary to use unnatural
|
|
case names (or the same names in multiple cases, like "*.obj *.OBJ") for
|
|
this kind of pattern matching to give the desired behavior. If
|
|
completely case-blind pattern matching behavior is desired, specify the
|
|
-ic (--ignore-case) option.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Fixing_Damage
|
|
.br
|
|
Two options can be used to fix a damaged Zip archive.
|
|
.sk;.literal
|
|
-F --fix
|
|
-FF --fixfix
|
|
.end literal;.sk
|
|
The -F (--fix) option can be used if some portions of the archive are
|
|
missing, but it requires a reasonably intact central directory. The
|
|
input archive is scanned as usual, but zip will ignore some problems.
|
|
The resulting archive should be valid, but any inconsistent entries
|
|
will be left out.
|
|
.sk
|
|
If the archive is too damaged or the end (where the central directory is
|
|
situated) has been truncated, you must use -FF (--fixfix). This is a
|
|
change from zip 2.32, where the -F option is able to read a truncated
|
|
archive. The -F option now more reliably fixes archives with minor
|
|
damage, and the -FF option is needed to fix archives where -F and -FF
|
|
was used before.
|
|
.sk
|
|
With -FF, the archive is scanned from the beginning and Zip scans for
|
|
special signatures to identify the limits between the archive members.
|
|
The -F option is more reliable if the archive is not too much damaged,
|
|
so try this option first.
|
|
.sk
|
|
Neither option will recover archives that have been incorrectly
|
|
transferred, such as by FTP in ASCII mode instead of binary. After the
|
|
repair, the -t option of UnZip may show that some files have a bad CRC.
|
|
Such files cannot be recovered; you can remove them from the archive
|
|
using the -d option of Zip.
|
|
.sk
|
|
Because of the uncertainty of the "fixing" process, it's required
|
|
to specify an output archive, rather than risking further damage to the
|
|
original damaged archive. For example, to fix the damaged archive
|
|
foo.zip,
|
|
.sk;.indent 10
|
|
zip -F foo --out foo_fix
|
|
.sk
|
|
tries to read the entries normally, copying good entries to the new
|
|
archive foo_fix.zip. If this doesn't work, as when the archive is
|
|
truncated, or if some entries are missed because of bad central
|
|
directory entries, try -FF:
|
|
.sk;.indent 10
|
|
zip -FF foo --out foo_fixfix
|
|
.sk
|
|
and compare the resulting archive to the archive created using -F. The
|
|
-FF option may create an inconsistent archive. Depending on what is
|
|
damaged, you can then use the -F option to fix that archive.
|
|
.sk
|
|
A split archive with missing split files can be fixed using -F if you
|
|
have the last split of the archive (the ".zip" file). If this file is
|
|
missing, you must use -FF to fix the archive, which will prompt you for
|
|
the splits you have.
|
|
.sk
|
|
Currently, the fix options can't recover an entry which has a bad
|
|
checksum or is otherwise damaged.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Log_File
|
|
.br
|
|
Zip normally sends messages to the user's terminal, but these may be
|
|
also directed to a log file.
|
|
.sk;.literal
|
|
-la --log-append
|
|
.end literal;.br
|
|
Append to an existing log file. Default is to create a new version.
|
|
.sk;.literal
|
|
-lf logfilepath --logfile-path logfilepath
|
|
.end literal;.br
|
|
Open a logfile at the given path. By default, a new version will be
|
|
created, but with the -la option an existing file will be opened and the
|
|
new log information appended to any existing information. Only
|
|
warnings and errors are written to the log unless the -li option is also
|
|
given, then all information messages are also written to the log.
|
|
.sk;.literal
|
|
-li --log-info
|
|
.end literal;.br
|
|
Include information messages, such as file names being zipped, in the
|
|
log. The default is to include only the command line, any warnings
|
|
and errors, and the final status.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Modes_of_Operation
|
|
.br
|
|
Zip supports two distinct types of command modes, external and
|
|
internal. The external modes (update, grow, and freshen) read files
|
|
from the file system (as well as from an existing archive) while the
|
|
internal modes (delete and copy) operate exclusively on entries in an
|
|
existing archive.
|
|
.sk;.literal
|
|
-u --update
|
|
.end literal;.br
|
|
Update existing entries and add new files. If the archive does not
|
|
exist, create it. This is the default mode, so -u is optional.
|
|
.sk;.literal
|
|
-g --grow
|
|
.end literal;.br
|
|
Grow (append to) the specified Zip archive, instead of creating a new
|
|
one. If this operation fails, Zip attempts to restore the archive to
|
|
its original state. If the restoration fails, the archive might become
|
|
corrupted. This option is ignored when there's no existing archive or
|
|
when at least one archive member must be updated or deleted.
|
|
.sk;.literal
|
|
-f --freshen
|
|
.end literal;.br
|
|
Update existing entries in an existing archive. Does not add new files
|
|
to the archive.
|
|
.sk;.literal
|
|
-d --delete
|
|
.end literal;.br
|
|
Delete entries from an existing archive.
|
|
.sk;.literal
|
|
-DF --difference-archive
|
|
.end literal;.br
|
|
Create an incremental backup-style archive, where the resulting archive
|
|
will contain all new and changed files since the original archive was
|
|
created. For this to work, the input file list and current directory
|
|
must be the same as during the original Zip operation.
|
|
.sk
|
|
For example, if the existing archive was created using
|
|
.sk;.indent 10
|
|
zip foo_full.zip [.foo...]*.*
|
|
.sk
|
|
from just above the foo directory, then the command (also from just
|
|
above the foo directory):
|
|
.sk;.indent 10
|
|
zip foo_full.zip [.foo...]*.* -DF -O foo_incr.zip
|
|
.sk
|
|
creates the archive foo_incr.zip with just the files not in foo_full.zip
|
|
and the files where the size or date-time of the files does not match
|
|
that in foo_full.zip. Note that in the "zip -DF" operation, the
|
|
original full archive is specified as the input archive, and the -O
|
|
(--output-file) option is used to specify the new (incremental) output
|
|
archive.
|
|
.sk;.literal
|
|
-FS --filesync
|
|
.end literal;.br
|
|
Delete entries in the archive that do not match files on the OS.
|
|
Normally when an archive is updated, new files are added and changed
|
|
files are updated but files that no longer exist on the OS are not
|
|
deleted from the archive. This option enables deleting of entries that
|
|
are not matched on the OS. Enabling this option should create archives
|
|
that are the same as new archives, but since existing entries are copied
|
|
instead of compressed, updating an existing archive with -FS can be much
|
|
faster than creating a new archive. If few files are being copied from
|
|
the old archive, it may be faster to create a new archive instead.
|
|
.sk
|
|
This option deletes files from the archive. If you need to preserve the
|
|
original archive, make a copy of the archive first, or use the -O
|
|
(--output) option to output the new archive to a new file. Even though
|
|
it's slower, creating a new archive with a new archive name is safer,
|
|
avoids mismatches between archive and OS paths, and is preferred.
|
|
.sk;.literal
|
|
-U --copy-entries
|
|
.end literal;.br
|
|
Select entries in an existing archive and copy them to a new archive.
|
|
Copy mode is like update mode, but entries in the existing archive are
|
|
selected by command line patterns rather than files from the file system
|
|
and it uses the -O (--output-file) option to write the resulting archive
|
|
to a new file rather than updating the existing archive, leaving the
|
|
original archive unchanged.
|
|
.sk
|
|
Normally, when updating an archive using relative file specifications
|
|
("[]", "[.xxx]", and so on), it helps to have the same default directory
|
|
as when the archive was created, but this is not a strict requirement.
|
|
.sk
|
|
Date-time information in a Zip archive may be influenced by time zone.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
3 Examples
|
|
.br
|
|
When given the name of an existing archive, Zip will replace identically
|
|
named entries in the archive 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 file1 and file3, then:
|
|
.sk;.indent 10
|
|
$ zip foo [.foo...]*.*
|
|
.sk
|
|
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. This is the default mode -u (update).
|
|
.sk
|
|
Update will add new entries to the archive and will replace
|
|
existing entries only if the modified date of the file is more recent than
|
|
the date recorded for that name in the archive. For example:
|
|
.sk;.indent 10
|
|
$ zip -u stuff *.*
|
|
.sk
|
|
will add any new files in the current directory, and update any changed
|
|
files in the archive stuff.zip. Note that Zip will not try to pack
|
|
stuff.zip into itself when you do this. Zip avoids including its own
|
|
output files when selecting files to include in the archive, so it
|
|
should be safe, as in this case, to have the archive included in the
|
|
list of input files.
|
|
.sk
|
|
A second mode, -f (freshen), like update will only
|
|
replace entries with newer files. Unlike update, however, it will not
|
|
add files that are not already in the archive. For example:
|
|
.sk;.indent 10
|
|
$ zip -f foo
|
|
.sk
|
|
Note that the -f option with no arguments freshens all the entries in the
|
|
archive. The same is true of -u, so "zip -u foo" and "zip -f foo" do
|
|
the same thing.
|
|
.sk
|
|
When these options are used, Zip should be run from the same directory
|
|
as when the original Zip command was run, so that the path names in the
|
|
archive will continue to agree with the path names in the file system.
|
|
Normally, it's also a good idea to keep the other options the same (-V,
|
|
-w, and the like), to keep the archive contents consistent.
|
|
.sk
|
|
The -t (--from-date) and -tt (--before-date) options can also be used
|
|
with adding, updating, or freshening to restrict further the files to be
|
|
included in the archive. For example:
|
|
.sk;.indent 10
|
|
$ zip -rt 12071991 infamy [.FOO]*.*
|
|
.sk
|
|
will add all the files in [.FOO] and its subdirectories that were last
|
|
modified on December 7, 1991, or later to the achive infamy.zip. Dates
|
|
can be in format mmddyyyy or yyyy-mm-dd.
|
|
.sk
|
|
Also, files can be explicitly excluded using the -x option:
|
|
.sk;.indent 10
|
|
$ zip -r foo [.FOO] -x *.obj
|
|
.sk
|
|
which will zip up the contents of [.FOO] into foo.zip but exclude all the
|
|
files that end in ".obj".
|
|
.sk
|
|
The -d (delete) mode will remove entries from an
|
|
archive. An example might be:
|
|
.sk;.indent 10
|
|
$ zip -d foo foo/harry/*.* *.obj
|
|
.sk
|
|
which will remove all of the files that start with "foo/harry/" and all of
|
|
the files that end with ".obj" (in any path).
|
|
.sk
|
|
The last mode, -U (--copy-entries), selects entries from an existing
|
|
archive and copies them to a new archive.
|
|
.sk;.indent 10
|
|
$ zip -U foo *.obj --out fooobj
|
|
.sk
|
|
will copy all .obj entries from foo.zip and put them in the new archive
|
|
fooobj.zip.
|
|
.sk
|
|
Note: By default, on VMS, archive name pattern matching (-R, -d, -i, -x,
|
|
and -U) is case sensitive, even when the file system is not case
|
|
sensitive (or even case preserving). This allows accurate matching of
|
|
mixed-case names in an archive which may have been created on a system
|
|
with a case sensitive file system, but it can involve extra effort on
|
|
VMS, where it may be necessary to use unnatural case names (or the same
|
|
names in multiple cases, like "*.obj *.OBJ") for this kind of pattern
|
|
matching to give the desired behavior. If completely case-blind pattern
|
|
matching behavior is desired, specify the -ic (--ignore-case) option.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Options_List
|
|
.br
|
|
"zip -h" provides a concise list of common command-line options. "zip
|
|
-h2" provides more details. "zip -so" provides a list of all available
|
|
options. "zip -v" shows the program version and available features.
|
|
(The list below was derived from a "zip -so" listing.)
|
|
.sk
|
|
Short-form options begin with a single hyphen ("-"). Long-form option
|
|
begin with a double hyphen ("--"), and may be abbreviated to any
|
|
unambiguous shorter string. For example:
|
|
.lm +10;.literal
|
|
-v
|
|
--verbose
|
|
--verb
|
|
.end literal;.lm -10
|
|
.sk
|
|
To avoid confusion, if a negatable option contains an embedded hyphen
|
|
("-"), then avoid abbreviating it at the hyphen if you plan to negate
|
|
it. For example, if an option like --some-option were abbreviated to
|
|
--some-, the parser would consider that trailing hyphen to be part of
|
|
the option name, rather than as a negating trailing hyphen. This
|
|
behavior may change in the future, to interpret the trailing hyphen in
|
|
--some- to be negating. (So don't do it.)
|
|
.sk
|
|
Some options may be negated (or modified) by appending a "-":
|
|
.lm +10;.literal
|
|
-la-
|
|
--show-files-
|
|
.end literal;.lm -10
|
|
.sk
|
|
Some options take a value, which may immediately follow the option, or
|
|
be separated by a space or "=". For example:
|
|
.lm +10;.literal
|
|
-ttmmddyyyy
|
|
-tt mmddyyyy
|
|
-tt=mmddyyyy
|
|
.end literal;.lm -10
|
|
.sk
|
|
.lm -4;.literal
|
|
Sh Long Description
|
|
----+-------------------+--------------------------------------------------
|
|
0 store store (instead of compress)
|
|
1 compress-1 compress faster (-2, -3, -4, ...)
|
|
9 compress-9 compress better
|
|
? show the Zip help screen
|
|
@ names-stdin read input file patterns from SYS$INPUT (1/line)
|
|
A adjust-sfx adjust self-extracting executable
|
|
b temp-path path use "path" directory for temporary files
|
|
C preserve-case preserve case of all file names added to archive
|
|
C- preserve-case- down-case all file names added to archive
|
|
C2 preserve-case-2 preserve case of ODS2 names added to archive
|
|
C2- preserve-case-2- down-case ODS2 file added to archive (default)
|
|
C5 preserve-case-5 preserve case of ODS5 names added to archive (dflt)
|
|
C5- preserve-case-5- down-case ODS5 names added to archive
|
|
c entry-comments add a comment for each entry added to archive
|
|
D no-dir-entries do not add archive entries for directories
|
|
DF difference-archive difference archive: add only changed or new files
|
|
d delete delete entries in archive
|
|
db display-bytes display running byte counts
|
|
dc display-counts display running file counts
|
|
dd display-dots display progress dots for files (dflt size = 10MB)
|
|
dg display-globaldots display progress dots for archive, not each file
|
|
ds dot-size size set progress dot interval to "size" (MB)
|
|
du display-usize display original uncompressed size for entries
|
|
dv display-volume display volume (disk) number as in_disk>out_disk
|
|
e encrypt encrypt entries, ask for password
|
|
F fix fix mostly intact archive (try F before FF)
|
|
FF fixfix salvage what can be salvaged (not as reliable)
|
|
FS filesync remove archive entries unmatched in file system
|
|
f freshen update existing entries (only changed files)
|
|
fd force-descriptors force data descriptors as if streaming
|
|
fz force-zip64 force use of Zip64 format
|
|
g grow grow existing archive (unless updating or deleting)
|
|
H show the Zip help screen
|
|
h help show the Zip help screen
|
|
h2 more-help show extended Zip help
|
|
i include pat1 [pat2 [...]] include only names matching the patterns
|
|
ic ignore-case ignore case (case-blind archive entry name matching)
|
|
J junk-sfx junk (remove) archive preamble (unzipsfx)
|
|
j junk-paths junk (don't store) directory names, only file names
|
|
k DOS-names simulate PKZIP-made archive (DOS 8.3 names)
|
|
L license show software license
|
|
l to-crlf translate end-of-lines (LF -> CRLF)
|
|
la log-append append to existing log file
|
|
lf logfile-path lfile log to log file at lfile (default: new version)
|
|
li log-info include informational messages in log
|
|
ll from-crlf translate end-of-lines (CRLF -> LF)
|
|
MM must-match input file spec must exist (wildcards must match)
|
|
m move delete files added to archive
|
|
n suffixes sfx1[:sfx2[...]] don't compress files with these suffixes
|
|
nw no-wild no wildcards during add or update
|
|
O output-file ozf use "ozf" as the output archive (dflt = inp archive)
|
|
o latest-time set archive date-time to match oldest entry
|
|
P password password encrypt with supplied "password" string
|
|
q quiet quiet operation (no info messages)
|
|
R recurse-patterns recurse into subdirs from cur dir, match names only
|
|
r recurse-paths recurse into directories from specified path pats
|
|
s split-size size split archive at "size" (K/MB) (0: don't split)
|
|
sb split-bell ring terminal bell at pause for split medium change
|
|
sc show-command show command line
|
|
sd show-debug show debug messages
|
|
sf show-files show files to process (only)
|
|
so show-options show list of all command-line options
|
|
sp split-pause pause to select split destination(s)
|
|
sv split-verbose be verbose about creating splits
|
|
T test test archive integrity (runs UnZip -T)
|
|
t from-date mmddyyyy only do files since (at or after) "mmddyyyy"
|
|
tt before-date mmddyyyy only do files before "mmddyyyy"
|
|
u update update changed files, add new files (default mode)
|
|
V VMS-portable save VMS file attributes
|
|
VV VMS-specific save VMS file attributes and all allocated blocks
|
|
v verbose verbose messages (print version info if only arg)
|
|
w VMS-versions save VMS version numbers in archive
|
|
ww VMS-dot-versions save VMS version numbers as ".nnn", not ";nnn"
|
|
X strip-extra strip all but critical extra fields
|
|
X- strip-extra- keep all extra fields
|
|
x exclude pat1 [pat2 [...]] exclude all names matching the patterns
|
|
Z compression-method mthd use compress method "mthd" (bzip2 or deflate)
|
|
z archive-comment ask for archive comment
|
|
.end literal;.lm +4
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Miscellaneous_Options
|
|
.sk;.literal
|
|
-D --no-dir-entries
|
|
.end literal;.br
|
|
Do not create entries in the archive for directories. By default,
|
|
directory entries are added to an archive, so that their attributes can
|
|
be saved in the archive. When an archive is created using -D, UnZip
|
|
will still create directories as needed (subject to user control), but
|
|
they will get the default attributes (date-time, permissions, ...) on
|
|
the destination system, rather than their original atributes.
|
|
.sk;.literal
|
|
-MM --must-match
|
|
.end literal;.br
|
|
All input patterns must match at least one file and all input files
|
|
found must be readable. Normally when an input pattern does not match
|
|
a file the "name not matched" warning is issued and when an input
|
|
file has been found but later is missing or not readable a "missing or
|
|
not readable" warning is issued. In either case Zip continues
|
|
creating the archive, with missing or unreadable new files being skipped
|
|
and files already in the archive remaining unchanged. After the
|
|
archive is created, if any files were not readable zip returns the OPEN
|
|
error code (18 on most systems) instead of the normal success return (0
|
|
on most systems). With -MM, Zip exits as soon as an input pattern
|
|
is not matched (whenever the "name not matched" warning would be issued)
|
|
or when an input file is not readable. In either case Zip exits with
|
|
an OPEN error and no archive is created.
|
|
.sk
|
|
This option is useful when a known list of files is to be zipped so any
|
|
missing or unreadable files should result in an error. It may be less
|
|
useful when used with wildcards, but Zip will still exit with an error
|
|
if any input pattern doesn't match at least one file or if any
|
|
matched files are unreadable. If you want to create the archive anyway
|
|
and only need to know if files were skipped, then don't use -MM and just
|
|
check the exit status. Also, a log file (see -lf (--logfile-path))
|
|
could be useful.
|
|
.sk;.literal
|
|
-O out_file --output-file out_file
|
|
.end literal;.br
|
|
Process the archive changes as usual, but instead of updating the
|
|
existing archive, send the output to a new archive, "out_file". The
|
|
output archive specified must be a different file from the input
|
|
archive.
|
|
.sk
|
|
This option can be used to create updated split archives. It can
|
|
also be used with -U to copy entries from an existing archive to
|
|
a new archive. See the EXAMPLES section below.
|
|
.sk
|
|
Another use is converting zip files from one split size to
|
|
another. For instance, to convert an archive with 700MB CD splits
|
|
to one with 2GB DVD splits, can use:
|
|
.sk;.indent 10
|
|
zip -s 2g cd-split.zip --out dvd-split.zip
|
|
.sk
|
|
which uses copy mode. See -U below. Also:
|
|
.sk;.indent 10
|
|
zip -s 0 split.zip --out unsplit.zip
|
|
.sk
|
|
will convert a split archive to a single-file archive.
|
|
.sk
|
|
Copy mode will convert stream entries (using data descriptors and which
|
|
may be incompatible with some unzip programs) to normal entries (which
|
|
should be compatible with all unzip programs), except if standard
|
|
encryption was used. For archives with encrypted entries, zipcloak
|
|
will decrypt the entries and convert them to normal entries.
|
|
.sk;.literal
|
|
-o --latest-time
|
|
.end literal;.br
|
|
Set the modification date-time of the Zip archive file to the latest
|
|
(newest) modification date-time found among the entries in the zip
|
|
archive. This can be used without any other operations, if
|
|
desired. For example:
|
|
.sk;.indent 10
|
|
zip -o foo
|
|
.sk
|
|
will change the modification date-time of foo.zip to the latest time of
|
|
the entries in foo.zip.
|
|
.sk;.literal
|
|
-q --quiet
|
|
.end literal;.br
|
|
Quiet mode. Eliminates informational messages and comment prompts.
|
|
This mode may be useful in command procedures, or if the Zip operation
|
|
is being performed as a background task ("$ spawn/nowait zip -q foo
|
|
*.c").
|
|
.sk
|
|
.sk;.literal
|
|
-T --test
|
|
.end literal;.br
|
|
Test the integrity of a zip archive (the new one, if -O (--output-file)
|
|
is specified). If the check fails, the old zip file is unchanged and
|
|
(with the -m option) no input files are removed.
|
|
.sk
|
|
Implementation
|
|
.br
|
|
"zip -T" actually runs an "unzip -t" command to do the testing, so UnZip
|
|
must be installed properly for this to work.
|
|
.sk;.literal
|
|
-TT unzip_cmd --unzip-command unzip_cmd
|
|
.end literal;.br
|
|
Specify the actual UnZip command, "unzip_cmd" (normally a DCL symbol) to
|
|
use for "zip -T". This can be useful if multiple versions of UnZip are
|
|
installed on a system, and the default DCL symbol "UNZIP" would run the
|
|
wrong one (or the logical name DCL$PATH would lead to the wrong one).
|
|
.sk
|
|
In "unzip_cmd", the string "{}" is replaced by the temporary name of the
|
|
archive to be tested, otherwise the name of the archive is appended
|
|
to the end of the command. The exit status is checked for success severity.
|
|
.sk;.literal
|
|
-v --verbose
|
|
.end literal;.br
|
|
Verbose mode or print diagnostic version info.
|
|
.sk
|
|
Normally, when applied to real operations, this option enables the
|
|
display of a progress indicator during compression (see -dd for more on
|
|
dots) and requests verbose diagnostic info about archive structure
|
|
oddities.
|
|
.sk
|
|
When -v is the only command line argument, a diagnostic report is
|
|
displayed, showing:
|
|
.lm +3;.br;.indent -2
|
|
o Copyright and other legal notices
|
|
.br;.indent -2
|
|
o Program name, version, and release date
|
|
.br;.indent -2
|
|
o Pointers to Info-ZIP FTP and Web sites
|
|
.br;.indent -2
|
|
o Program build information (compiler type and version, OS version, and
|
|
the compilation date
|
|
.br;.indent -2
|
|
o Optional features enabled at compile-time
|
|
.br;.indent -2
|
|
o Environment variable definitions (ZIP_OPTS, ZIPOPT)
|
|
.lm -3;.br
|
|
.sk
|
|
This information should be included in bug reports.
|
|
.sk;.literal
|
|
-y --symlinks
|
|
.end literal;.br
|
|
Store symbolic links as such in the Zip archive, instead of compressing
|
|
and storing the file referred to by the link. A symbolic link normally
|
|
requires less storage than the actual file, both in the archive, and on
|
|
the destination file system.
|
|
.sk
|
|
On VMS, symbolic links are supported on ODS5 disks where the C RTL
|
|
supports symbolic links. Full support for symbolic links seems to
|
|
require VMS V8.3, but a Zip program supporting symbolic links may be
|
|
built on VMS V7.3-2.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Progress_Display
|
|
.br
|
|
Various options control the display of progress messages during Zip
|
|
operation.
|
|
.sk;.literal
|
|
-db --display-bytes
|
|
.end literal;.br
|
|
Display running byte counts showing the bytes processed and the bytes to
|
|
go.
|
|
.sk;.literal
|
|
-dc --display-counts
|
|
.end literal;.br
|
|
Display running count of entries processed and entries to go.
|
|
.sk;.literal
|
|
-dd --display-dots
|
|
.end literal;.br
|
|
Display dots while each entry is processed (except on ports that have
|
|
their own progress indicator). See -ds below for setting dot size. The
|
|
default is a dot every 10 MB of input file processed. The -v
|
|
(--verbose) option also displays dots and used to at a higher rate than
|
|
this (at the same rate as in previous versions of Zip) but this rate has
|
|
been changed to the new 10 MB default, and is also controlled by -ds.
|
|
.sk;.literal
|
|
-dg --display-globaldots
|
|
.end literal;.br
|
|
Display progress dots for the archive instead of for each file. The
|
|
command
|
|
.sk;.indent 10
|
|
zip -qdgds 10m
|
|
.sk
|
|
will turn off most output except dots every 10 MB.
|
|
.sk;.literal
|
|
-ds size --dot-size size
|
|
.end literal;.br
|
|
Set amount of input file processed for each dot displayed. See -dd to
|
|
enable displaying dots. Setting this option implies -dd. "size" is in
|
|
the format "nm" where n is a number and m is a multiplier. Currently
|
|
"m" can be k (KB), m (MB), g (GB), or t (TB), so if "n" is 100 and "m"
|
|
is k, "size" would be 100k which is 100KB. The default is 10MB.
|
|
.sk
|
|
The -v (--verbose) option also displays dots and used to default to a
|
|
higher rate than this (at the same rate as in previous versions of Zip)
|
|
but now the default is 10 MB and the -v dots are also controlled by this
|
|
option. A "size" of 0 turns dots off.
|
|
.sk
|
|
This option does not control the dots from the "Scanning files" message
|
|
as Zip scans for input files. The dot size for that is fixed at 2
|
|
seconds or a fixed number of entries, whichever is longer.
|
|
.sk;.literal
|
|
-du --display-usize
|
|
.end literal;.br
|
|
Display the uncompressed size of each entry.
|
|
.sk;.literal
|
|
-dv --display-volume
|
|
.end literal;.br
|
|
Display the volume (disk) number each entry is being written to.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Self_Extracting_Archives
|
|
.br
|
|
A self-extracting archive (SFX) comprises a normal Zip archive appended
|
|
to a special UnZip program (such as UNZIPSFX.EXE) for the intended
|
|
target system.
|
|
.sk
|
|
The UnZip distribution includes a VMS command procedure,
|
|
[,vms]makesfx.com, which can be used directly or adapted to create an
|
|
SFX archive from a normal Zip archive.
|
|
.sk
|
|
The .ZIP file format includes offsets to data structures in the archive,
|
|
and these offsets are measured from the start of the archive file.
|
|
Appending an archive to an UnZip SFX executable effectively moves the
|
|
start of the archive file. That makes the original offsets wrong, and
|
|
that will cause the UnZip SFX program to emit warning messages when it
|
|
tries to unpack the archive. Zip -A can be used to adjust these offsets
|
|
in a self-extracting archive. For example, to adjust the offsets in
|
|
foo.sfx_exe:
|
|
.sk;.indent 10
|
|
zip -A foo.sfx_exe
|
|
.sk
|
|
Similarly, the UnZip SFX program can be removed from a self-extracting
|
|
archive (and the offsets in the archive restored) using the -J
|
|
(--junk-sfx) option. For example:
|
|
.sk;.indent 10
|
|
zip -J foo.sfx_exe
|
|
.sk
|
|
Note that a self-extracting archive contains a normal Zip archive, and a
|
|
normal UnZip program can be used to expand it in the normal way. You
|
|
may get a warning about extra bytes at the beginning of the archive (the
|
|
UnZip SFX program), but UnZip should work properly after that. This
|
|
allows data in a self-extracting archive to be accessed on any system,
|
|
not just the target system where its embedded UnZip SFX program runs.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Split_Archives
|
|
.br
|
|
Beginning with version 3.0, Zip supports split archives. A split
|
|
archive is one which is divided into multiple files, usually to allow it
|
|
to be stored on multiple storage media (floppy diskettes, CD-ROMs, or
|
|
the like) when a single medium would be too small to contain the whole
|
|
archive. (Note that split archives are not just unitary archives split
|
|
into pieces, as the .ZIP file format includes offsets to data structures
|
|
in the archive, and for a split archive these are based on the start of
|
|
each split, not on the start of the whole archive. Concatenating the
|
|
pieces will invalidate these offsets, but UnZip can usually deal with
|
|
it. Zip will usually refuse to process such a spliced archive unless
|
|
the -FF fix option is used to fix the offsets.)
|
|
.sk
|
|
For a split archive with, say, 20 split files, the files are typically
|
|
named ARCHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip, where
|
|
"ARCHIVE" is the archive name specified by the user on the Zip command
|
|
line. Note that the last split file is the ".zip" file. In contrast,
|
|
"spanned" archives are the original multi-disk archive generally
|
|
requiring floppy disks and using volume labels to store disk numbers.
|
|
Zip supports split archives but not spanned archives, though a procedure
|
|
exists for converting split archives of the right size to spanned
|
|
archives. The reverse is also true, where each file of a spanned
|
|
archive can be copied in order to files with the above names to create a
|
|
split archive.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
3 Options
|
|
.br
|
|
Use "-s size" to create a split archive (and to set the split size).
|
|
The size is given as a number followed optionally by a multiplier suffix
|
|
of k (KB), m (MB, the default if no suffix is specified), g (GB), or t
|
|
(TB). (All are powers of 1024, not 1000). 64K is the minimum split
|
|
size. For example, the following command could be used to create a
|
|
split archive called "foo" from the contents of the "bar" directory with
|
|
splits of 670MB, which might be useful for burning on CDs:
|
|
.sk;.indent 10
|
|
zip -s 670m foo [.bar...]*.*
|
|
.sk
|
|
Using -s without -sp as above creates all the splits in the directory
|
|
specified by "foo", in this case the current default directory. This
|
|
split mode updates the splits as the archive is being created, requiring
|
|
all splits to remain writable, but creates split archives that are
|
|
readable by any UnZip that supports split archives. See -sp below for
|
|
enabling split pause mode which allows splits to be written directly to
|
|
removable media.
|
|
.sk
|
|
The -sv option can be used to enable verbose splitting and display
|
|
details of how the splitting is being done. The -sb option can be used
|
|
to ring the terminal bell when Zip pauses for the next split
|
|
destination.
|
|
.sk
|
|
The -sp option can be used to pause Zip between splits to allow
|
|
changing removable media, for example, but read the descriptions and
|
|
warnings for both -s and -sp below.
|
|
.sk
|
|
Though Zip does not update split archives, Zip provides the option
|
|
-O (--output-file) to allow split archives to be updated and saved in a
|
|
new archive. For example:
|
|
.sk;.indent 10
|
|
zip inarchive.zip foo.c bar.c -O outarchive.zip
|
|
.sk
|
|
reads archive inarchive.zip, even if split, adds the files foo.c and
|
|
bar.c, and writes the resulting archive to outarchive.zip. If
|
|
inarchive.zip is split, then outarchive.zip defaults to the same split
|
|
size. Be aware that outarchive.zip and any split files that are created
|
|
with it are always overwritten without warning. This may be changed in
|
|
the future.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Temporary_Files
|
|
.br
|
|
When creating a new archive or normally when changing an existing
|
|
archive, Zip will write a temporary file in the archive destination
|
|
directory ("ZIxxxxxxxx", where "xxxxxxxx" is the hexadecimal process ID)
|
|
with the new contents. Then, if and when the Zip job has completed with
|
|
no errors, it will rename the temporary file to the specified archive
|
|
name (replacing the old archive, if any).
|
|
.sk
|
|
You can use the -b (--temp-path) option to specify a different path
|
|
(device and/or directory) for the temporary file, but specifying a
|
|
different device will force Zip to copy the temporary file to its final
|
|
destination instead of simply renaming it, and that copying will take
|
|
more time than renaming, especially for a large archive. For example:
|
|
.sk;.indent 10
|
|
$ zip -b disk$scratch:[tmp] stuff *
|
|
.sk
|
|
will cause Zip to put its temporary files in the directory
|
|
"disk$scratch:[tmp]", copying the temporary file back to the current
|
|
directory as stuff.zip when it's complete.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Text_Files
|
|
.br
|
|
Zip offers some options to help deal with line endings in text files.
|
|
These may have limited utility on VMS.
|
|
.sk;.literal
|
|
-l --to-crlf
|
|
.end literal;.br
|
|
Translate the UNIX end-of-line character LF (CR on MAC) 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". See -ll
|
|
below for the binary checks.
|
|
.sk;.literal
|
|
-ll --from-crlf
|
|
.end literal;.br
|
|
Translate the MSDOS end-of-line CR LF into UNIX LF (CR on MAC). This
|
|
option should not be used on binary files. This option can be used on
|
|
MSDOS if the Zip archive is intended for UnZip under UNIX.
|
|
.sk
|
|
For both -l and -ll, if the file is converted and the file is later
|
|
determined to be binary, a warning is issued and the file is probably
|
|
corrupted. If Zip with -l or -ll detects binary (non-text) in the first
|
|
buffer read from a file, it issues a warning and skips line-ending
|
|
conversion on the file, avoiding corruption. This check seems to catch
|
|
all binary files tested, but the original check remains and if a
|
|
converted file is later determined to be binary, that warning is still
|
|
issued. The algorithm now being used for binary detection should allow
|
|
line-ending conversion of text files in UTF-8 and similar encodings.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 VMS_Specifics
|
|
.br
|
|
VMS File Attributes
|
|
.sk;.literal
|
|
-V --VMS-portable
|
|
-VV --VMS-specific
|
|
.end literal;.br
|
|
The -V and -VV options cause Zip to store VMS file atributes (such as
|
|
file organization, record format, carriage control, and so on) in
|
|
VMS-specific "extra fields" in an archive along with the usual data.
|
|
These extra fields are ignored on non-VMS systems, but on a VMS system,
|
|
they allow UnZip to restore the files with their VMS attributes intact.
|
|
.sk
|
|
With -V, Zip ignores any data in the file after the end-of-file (EOF)
|
|
point (defined by FAT$L_EFBLK and FAT$W_FFBYTE), which works well for
|
|
well-formed files (that is, those with no valid data beyond EOF).
|
|
Portable-format files (Stream_LF, fixed-512) archived with -V should be
|
|
extracted properly on a non-VMS system. Files with more complex
|
|
structures, such as indexed files and files with embedded byte counts
|
|
or other such data may be of limited use on other systems. (UnZip on
|
|
non-VMS systems may be able to extract various VMS-format text files,
|
|
however.)
|
|
.sk
|
|
With -VV, Zip processes all allocated blocks for the file (including
|
|
those beyond EOF). When extracted on a VMS system, the original file
|
|
should be reproduced with as much fidelity as possible, but on a non-VMS
|
|
system, most files will be seen as corrupt because of the data from
|
|
beyond EOF.
|
|
.sk
|
|
VMS File Version Numbers
|
|
.sk;.literal
|
|
-w --VMS-versions
|
|
-ww --VMS-dot-versions
|
|
.end literal;.br
|
|
By default, for compatibility with non-VMS systems, Zip strips VMS file
|
|
version numbers from the names stored in an archive. The -w
|
|
(--VMS-versions) option causes Zip to retain file version numbers on
|
|
names in an archive. Without -w, a version number wildcard (";*") can
|
|
cause errors when multiple versions of a single file are treated as
|
|
multiple files with the same name.
|
|
.sk
|
|
For better compatibility with non-VMS systems where semi-colons are less
|
|
popular in file names, the -ww (--VMS-dot-versions) option stores the
|
|
file version numbers with a dot (".nnn") instead of a semi-colon
|
|
(";nnn").
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Copyright_and_License
|
|
.br
|
|
Zip has an option to display its copyright and license.
|
|
.sk;.literal
|
|
-L --license
|
|
.end literal;.br
|
|
The license is reproduced below.
|
|
.sk.lm +3
|
|
This is version 2007-Mar-4 of the Info-ZIP license. The definitive
|
|
version of this document should be available at
|
|
ftp://ftp.info-zip.org/pub/infozip/license.html indefinitely and a copy
|
|
at http://www.info-zip.org/pub/infozip/license.html.
|
|
.lm -3;.sk
|
|
--------------------------------------------------------
|
|
.sk
|
|
Copyright (c) 1990-2007 Info-ZIP. All rights reserved.
|
|
.sk
|
|
For the purposes of this copyright and license, "Info-ZIP" is defined as
|
|
the following set of individuals:
|
|
.sk;.lm +3
|
|
Mark Adler, John Bush, Karl Davis, Harald Denker, Jean-Michel Dubois,
|
|
Jean-loup Gailly, Hunter Goatley, Ed Gordon, Ian Gorman, Chris Herborth,
|
|
Dirk Haase, Greg Hartwig, Robert Heath, Jonathan Hudson, Paul Kienitz,
|
|
David Kirschbaum, Johnny Lee, Onno van der Linden, Igor Mandrichenko,
|
|
Steve P. Miller, Sergio Monesi, Keith Owens, George Petrov, Greg Roelofs,
|
|
Kai Uwe Rommel, Steve Salisbury, Dave Smith, Steven M. Schweda,
|
|
Christian Spieler, Cosmin Truta, Antoine Verheijen, Paul von Behren,
|
|
Rich Wales, Mike White.
|
|
.lm -3;.sk
|
|
This software is provided "as is," without warranty of any kind, express
|
|
or implied. In no event shall Info-ZIP or its contributors be held
|
|
liable for any direct, indirect, incidental, special or consequential
|
|
damages arising out of the use of or inability to use this software.
|
|
.sk
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
including commercial applications, and to alter it and redistribute it
|
|
freely, subject to the above disclaimer and the following restrictions:
|
|
.sk;.lm +7;.indent -4
|
|
1. Redistributions of source code (in whole or in part) must retain
|
|
the above copyright notice, definition, disclaimer, and this list
|
|
of conditions.
|
|
.sk;.indent -4
|
|
2. Redistributions in binary form (compiled executables and libraries)
|
|
must reproduce the above copyright notice, definition, disclaimer,
|
|
and this list of conditions in documentation and/or other materials
|
|
provided with the distribution. The sole exception to this condition
|
|
is redistribution of a standard UnZipSFX binary (including SFXWiz) as
|
|
part of a self-extracting archive; that is permitted without inclusion
|
|
of this license, as long as the normal SFX banner has not been removed
|
|
from the binary or disabled.
|
|
.sk;.indent -4
|
|
3. Altered versions -- including, but not limited to, ports to new operating
|
|
systems, existing ports with new graphical interfaces, versions with
|
|
modified or added functionality, and dynamic, shared, or static library
|
|
versions not from Info-ZIP -- must be plainly marked as such and must not
|
|
be misrepresented as being the original source or, if binaries,
|
|
compiled from the original source. Such altered versions also must not
|
|
be misrepresented as being Info-ZIP releases -- including, but not
|
|
limited to, labeling of the altered versions with the names "Info-ZIP"
|
|
(or any variation thereof, including, but not limited to, different
|
|
capitalizations), "Pocket UnZip," "WiZ" or "MacZip" without the
|
|
explicit permission of Info-ZIP. Such altered versions are further
|
|
prohibited from misrepresentative use of the Zip-Bugs or Info-ZIP
|
|
e-mail addresses or the Info-ZIP URL(s), such as to imply Info-ZIP
|
|
will provide support for the altered versions.
|
|
.sk;.indent -4
|
|
4. Info-ZIP retains the right to use the names "Info-ZIP", "Zip",
|
|
"UnZip", "UnZipSFX", "WiZ", "Pocket UnZip", "Pocket Zip", and
|
|
"MacZip" for its own source and binary releases.
|
|
.lm -7;.sk
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Acknowledgements
|
|
.br
|
|
Thanks to R. P. Byrne for his Shrink.Pas program, which
|
|
inspired this project, and from which the shrink algorithm
|
|
was stolen; to Phil Katz for placing in the public domain
|
|
the zip file format, compression format, and .ZIP filename
|
|
extension, and for accepting minor changes to the file
|
|
format; to Steve Burg for clarifications on the deflate
|
|
format; to Haruhiko Okumura and Leonid Broukhis for providing
|
|
some useful ideas for the compression algorithm; to
|
|
Keith Petersen, Rich Wales, Hunter Goatley and Mark Adler
|
|
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 first Info-ZIP moderator, David Kirschbaum,
|
|
for getting us into this mess in the first place.
|
|
.!------------------------------------------------------------------------------
|
|
.indent -4
|
|
2 Bugs
|
|
.br
|
|
All bug reports, patches, or suggestions should go to zip-bugs via the
|
|
web site contact form at http://www.Info-ZIP.org. Patches should be
|
|
sent as unified or context diffs only (diff -u or diff -c).
|
|
.sk
|
|
Any bug report should include the Zip version, any special compilation
|
|
options (see "zip -v" report), the host system type and operating system
|
|
version, and any other relevant information (compiler version, lunar
|
|
phase, ...).
|
|
.!------------------------------------------------------------------------------
|