Back to main site | Back to man page index

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  decom‐
       press  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  operat‐
       ing  systems  than  is the unzip executable itself.  In general a self-extracting archive made on a particular
       Unix system, for example, will only self-extract under the same flavor of Unix.  Regular unzip  may  still  be
       used  to extract the embedded 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 interpreted or modified by the operating sys‐
              tem, particularly under Unix and VMS.)

       [-x xfile(s)]
              An optional list of archive members to be excluded from processing.  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]
       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 (over‐
       write without prompting), -q (operate quietly), -C (match names case-insensitively), -L (convert  uppercase-OS
       names to lowercase), -j (junk paths) and -V (retain version numbers); plus the following operating-system spe‐
       cific 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  conver‐
       sion 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 support; 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 oper‐
       ating  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 letters.zip and change  the  new  archive's
       permissions to be world-executable 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 com‐
       mand):

       copy /b unzipsfx.exe+letters.zip letters.exe
       zip -A letters.exe

       (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 neces‐
       sary:

       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  oper‐
       ating  systems,  and  therefore  neither  are the resulting archives.  For some architectures there is limited
       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 appropriately, 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.

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 necessary 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)