Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
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 ex-
     isting 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	compres-
     sion  formats  (the  ``reduce,''  ``shrink'' and ``implode'' methods).  The
     ability to extract to a directory other than the current  one  can  be  se-
     lected  as a compile-time option, which is now enabled by default since Un-
     ZipSFX 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 incom-
     patible  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 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-ex-
     tracting 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 ex-
	    pressions (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 charac-
		   ters 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 system, 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 op-
	    tion  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.  With-
	    out 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 directory; the
	    -d option allows extraction in an arbitrary directory (always assum-
	    ing  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 comment).  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 creat-
     ing 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 version 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  ver-
     sions,  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 support; that only adds
     to the size of the archive.

AUTORUN COMMAND
     When unzipsfx was compiled with CHEAP_SFX_AUTORUN defined, a simple  ``com-
     mand  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  con-
     firmation.   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  remain-
     der  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-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 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  command.)
     Under AmigaDOS:

     MakeSFX letters letters.zip UnZipSFX

     (MakeSFX  is included with the UnZip source distribution and with Amiga bi-
     nary 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  neither
     are the resulting archives.  For some architectures there is limited porta-
     bility, 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 (un-
     less 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 modi-
     fied 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 com-
     pilers may not).  Under OS/2 and NT there are operating-system calls avail-
     able  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 re-
     moved in order to make unzipsfx smaller:  usage and diagnostic info,  list-
     ing  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 com-
     mands in order to use any of unzipsfx's options.  This is not necessary for
     simple extraction, but the command to do so then becomes, e.g., ``run  let-
     ters'' (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 concatenation 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 necessary
     to create UnZipSFX.  See unzip(1L) for the current  list  of  Zip-Bugs  au-
     thors,  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)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=unzipsfx&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help