0,0 → 1,279 |
UNZIPSFX(1L) UNZIPSFX(1L) |
|
NAME |
unzipsfx - self-extracting stub for prepending to ZIP archives |
|
SYNOPSIS |
<name of unzipsfx+archive combo> [-cfptuz[ajnoqsCLV$]] [file(s) ... |
[-x xfile(s) ...]] |
|
DESCRIPTION |
unzipsfx is a modified version of unzip(1L) designed to be prepended to |
existing ZIP archives in order to form self-extracting archives. |
Instead of taking its first non-flag argument to be the zipfile(s) to |
be extracted, unzipsfx seeks itself under the name by which it was |
invoked and tests or extracts the contents of the appended archive. |
Because the executable stub adds bulk to the archive (the whole purpose |
of which is to be as small as possible), a number of the less-vital |
capabilities in regular unzip have been removed. Among these are the |
usage (or help) screen, the listing and diagnostic functions (-l and |
-v), the ability to decompress older compression formats (the |
``reduce,'' ``shrink'' and ``implode'' methods). The ability to |
extract to a directory other than the current one can be selected as a |
compile-time option, which is now enabled by default since UnZipSFX |
version 5.5. Similarly, decryption is supported as a compile-time |
option but should be avoided unless the attached archive contains |
encrypted files. Starting with release 5.5, another compile-time option |
adds a simple ``run command after extraction'' feature. This feature |
is currently incompatible with the ``extract to different directory'' |
feature and remains disabled by default. |
|
Note that self-extracting archives made with unzipsfx are no more (or |
less) portable across different operating systems than is the unzip |
executable itself. In general a self-extracting archive made on a par- |
ticular Unix system, for example, will only self-extract under the same |
flavor of Unix. Regular unzip may still be used to extract the embed- |
ded archive as with any normal zipfile, although it will generate a |
harmless warning about extra bytes at the beginning of the zipfile. |
Despite this, however, the self-extracting archive is technically not a |
valid ZIP archive, and PKUNZIP may be unable to test or extract it. |
This limitation is due to the simplistic manner in which the archive is |
created; the internal directory structure is not updated to reflect the |
extra bytes prepended to the original zipfile. |
|
ARGUMENTS |
[file(s)] |
An optional list of archive members to be processed. Regular |
expressions (wildcards) similar to those in Unix egrep(1) may be |
used to match multiple members. These wildcards may contain: |
|
* matches a sequence of 0 or more characters |
|
? matches exactly 1 character |
|
[...] matches any single character found inside the brackets; |
ranges are specified by a beginning character, a hyphen, |
and an ending character. If an exclamation point or a |
caret (`!' or `^') follows the left bracket, then the |
range of characters within the brackets is complemented |
(that is, anything except the characters inside the |
brackets is considered a match). |
|
(Be sure to quote any character that might otherwise be inter- |
preted or modified by the operating system, particularly under |
Unix and VMS.) |
|
[-x xfile(s)] |
An optional list of archive members to be excluded from process- |
ing. Since wildcard characters match directory separators |
(`/'), this option may be used to exclude any files that are in |
subdirectories. For example, ``foosfx *.[ch] -x */*'' would |
extract all C source files in the main directory, but none in |
any subdirectories. Without the -x option, all C source files |
in all directories within the zipfile would be extracted. |
|
If unzipsfx is compiled with SFX_EXDIR defined, the following option is |
also enabled: |
|
[-d exdir] |
An optional directory to which to extract files. By default, |
all files and subdirectories are recreated in the current direc- |
tory; the -d option allows extraction in an arbitrary directory |
(always assuming one has permission to write to the directory). |
The option and directory may be concatenated without any white |
space between them, but note that this may cause normal shell |
behavior to be suppressed. In particular, ``-d ~'' (tilde) is |
expanded by Unix C shells into the name of the user's home |
directory, but ``-d~'' is treated as a literal subdirectory |
``~'' of the current directory. |
|
OPTIONS |
unzipsfx supports the following unzip(1L) options: -c and -p (extract |
to standard output/screen), -f and -u (freshen and update existing |
files upon extraction), -t (test archive) and -z (print archive com- |
ment). All normal listing options (-l, -v and -Z) have been removed, |
but the testing option (-t) may be used as a ``poor man's'' listing. |
Alternatively, those creating self-extracting archives may wish to |
include a short listing in the zipfile comment. |
|
See unzip(1L) for a more complete description of these options. |
|
MODIFIERS |
unzipsfx currently supports all unzip(1L) modifiers: -a (convert text |
files), -n (never overwrite), -o (overwrite without prompting), -q |
(operate quietly), -C (match names case-insensitively), -L (convert |
uppercase-OS names to lowercase), -j (junk paths) and -V (retain ver- |
sion numbers); plus the following operating-system specific options: |
-X (restore VMS owner/protection info), -s (convert spaces in filenames |
to underscores [DOS, OS/2, NT]) and -$ (restore volume label [DOS, |
OS/2, NT, Amiga]). |
|
(Support for regular ASCII text-conversion may be removed in future |
versions, since it is simple enough for the archive's creator to ensure |
that text files have the appropriate format for the local OS. EBCDIC |
conversion will of course continue to be supported since the zipfile |
format implies ASCII storage of text files.) |
|
See unzip(1L) for a more complete description of these modifiers. |
|
ENVIRONMENT OPTIONS |
unzipsfx uses the same environment variables as unzip(1L) does, |
although this is likely to be an issue only for the person creating and |
testing the self-extracting archive. See unzip(1L) for details. |
|
DECRYPTION |
Decryption is supported exactly as in unzip(1L); that is, interactively |
with a non-echoing prompt for the password(s). See unzip(1L) for |
details. Once again, note that if the archive has no encrypted files |
there is no reason to use a version of unzipsfx with decryption sup- |
port; that only adds to the size of the archive. |
|
AUTORUN COMMAND |
When unzipsfx was compiled with CHEAP_SFX_AUTORUN defined, a simple |
``command autorun'' feature is supported. You may enter a command into |
the Zip archive comment, using the following format: |
|
$AUTORUN$>[command line string] |
|
When unzipsfx recognizes the ``$AUTORUN$>'' token at the beginning of |
the Zip archive comment, the remainder of the first line of the comment |
(until the first newline character) is passed as a shell command to the |
operating system using the C rtl ``system'' function. Before executing |
the command, unzipsfx displays the command on the console and prompts |
the user for confirmation. When the user has switched off prompting by |
specifying the -q option, autorun commands are never executed. |
|
In case the archive comment contains additional lines of text, the |
remainder of the archive comment following the first line is displayed |
normally, unless quiet operation was requested by supplying a -q |
option. |
|
EXAMPLES |
To create a self-extracting archive letters from a regular zipfile let- |
ters.zip and change the new archive's permissions to be world-exe- |
cutable under Unix: |
|
cat unzipsfx letters.zip > letters |
chmod 755 letters |
zip -A letters |
|
To create the same archive under MS-DOS, OS/2 or NT (note the use of |
the /b [binary] option to the copy command): |
|
copy /b unzipsfx.exe+letters.zip letters.exe |
zip -A letters.exe |
|
Under VMS: |
|
copy unzipsfx.exe,letters.zip letters.exe |
letters == "$currentdisk:[currentdir]letters.exe" |
zip -A letters.exe |
|
(The VMS append command may also be used. The second command installs |
the new program as a ``foreign command'' capable of taking arguments. |
The third line assumes that Zip is already installed as a foreign com- |
mand.) Under AmigaDOS: |
|
MakeSFX letters letters.zip UnZipSFX |
|
(MakeSFX is included with the UnZip source distribution and with Amiga |
binary distributions. ``zip -A'' doesn't work on Amiga self-extracting |
archives.) To test (or list) the newly created self-extracting |
archive: |
|
letters -t |
|
To test letters quietly, printing only a summary message indicating |
whether the archive is OK or not: |
|
letters -tqq |
|
To extract the complete contents into the current directory, recreating |
all files and subdirectories as necessary: |
|
letters |
|
To extract all *.txt files (in Unix quote the `*'): |
|
letters *.txt |
|
To extract everything except the *.txt files: |
|
letters -x *.txt |
|
To extract only the README file to standard output (the screen): |
|
letters -c README |
|
To print only the zipfile comment: |
|
letters -z |
|
LIMITATIONS |
The principle and fundamental limitation of unzipsfx is that it is not |
portable across architectures or operating systems, and therefore nei- |
ther are the resulting archives. For some architectures there is lim- |
ited portability, however (e.g., between some flavors of Intel-based |
Unix). |
|
Another problem with the current implementation is that any archive |
with ``junk'' prepended to the beginning technically is no longer a |
zipfile (unless zip(1) is used to adjust the zipfile offsets appropri- |
ately, as noted above). unzip(1) takes note of the prepended bytes and |
ignores them since some file-transfer protocols, notably MacBinary, are |
also known to prepend junk. But PKWARE's archiver suite may not be |
able to deal with the modified archive unless its offsets have been |
adjusted. |
|
unzipsfx has no knowledge of the user's PATH, so in general an archive |
must either be in the current directory when it is invoked, or else a |
full or relative path must be given. If a user attempts to extract the |
archive from a directory in the PATH other than the current one, |
unzipsfx will print a warning to the effect, ``can't find myself.'' |
This is always true under Unix and may be true in some cases under MS- |
DOS, depending on the compiler used (Microsoft C fully qualifies the |
program name, but other compilers may not). Under OS/2 and NT there |
are operating-system calls available that provide the full path name, |
so the archive may be invoked from anywhere in the user's path. The |
situation is not known for AmigaDOS, Atari TOS, MacOS, etc. |
|
As noted above, a number of the normal unzip(1L) functions have been |
removed in order to make unzipsfx smaller: usage and diagnostic info, |
listing functions and extraction to other directories. Also, only |
stored and deflated files are supported. The latter limitation is |
mainly relevant to those who create SFX archives, however. |
|
VMS users must know how to set up self-extracting archives as foreign |
commands in order to use any of unzipsfx's options. This is not neces- |
sary for simple extraction, but the command to do so then becomes, |
e.g., ``run letters'' (to continue the examples given above). |
|
unzipsfx on the Amiga requires the use of a special program, MakeSFX, |
in order to create working self-extracting archives; simple concatena- |
tion does not work. (For technically oriented users, the attached |
archive is defined as a ``debug hunk.'') There may be compatibility |
problems between the ROM levels of older Amigas and newer ones. |
|
All current bugs in unzip(1L) exist in unzipsfx as well. |
|
DIAGNOSTICS |
unzipsfx's exit status (error level) is identical to that of unzip(1L); |
see the corresponding man page. |
|
SEE ALSO |
funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L), zipinfo(1L), |
zipnote(1L), zipsplit(1L) |
|
URL |
The Info-ZIP home page is currently at |
http://www.info-zip.org/pub/infozip/ |
or |
ftp://ftp.info-zip.org/pub/infozip/ . |
|
AUTHORS |
Greg Roelofs was responsible for the basic modifications to UnZip nec- |
essary to create UnZipSFX. See unzip(1L) for the current list of Zip- |
Bugs authors, or the file CONTRIBS in the UnZip source distribution for |
the full list of Info-ZIP contributors. |
|
Info-ZIP 20 April 2009 (v6.0) UNZIPSFX(1L) |