Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6725 | siemargl | 1 | UNZIPSFX(1L) UNZIPSFX(1L) |
2 | |||
3 | NAME |
||
4 | unzipsfx - self-extracting stub for prepending to ZIP archives |
||
5 | |||
6 | SYNOPSIS |
||
7 |
|
||
8 | [-x xfile(s) ...]] |
||
9 | |||
10 | DESCRIPTION |
||
11 | unzipsfx is a modified version of unzip(1L) designed to be prepended to |
||
12 | existing ZIP archives in order to form self-extracting archives. |
||
13 | Instead of taking its first non-flag argument to be the zipfile(s) to |
||
14 | be extracted, unzipsfx seeks itself under the name by which it was |
||
15 | invoked and tests or extracts the contents of the appended archive. |
||
16 | Because the executable stub adds bulk to the archive (the whole purpose |
||
17 | of which is to be as small as possible), a number of the less-vital |
||
18 | capabilities in regular unzip have been removed. Among these are the |
||
19 | usage (or help) screen, the listing and diagnostic functions (-l and |
||
20 | -v), the ability to decompress older compression formats (the |
||
21 | ``reduce,'' ``shrink'' and ``implode'' methods). The ability to |
||
22 | extract to a directory other than the current one can be selected as a |
||
23 | compile-time option, which is now enabled by default since UnZipSFX |
||
24 | version 5.5. Similarly, decryption is supported as a compile-time |
||
25 | option but should be avoided unless the attached archive contains |
||
26 | encrypted files. Starting with release 5.5, another compile-time option |
||
27 | adds a simple ``run command after extraction'' feature. This feature |
||
28 | is currently incompatible with the ``extract to different directory'' |
||
29 | feature and remains disabled by default. |
||
30 | |||
31 | Note that self-extracting archives made with unzipsfx are no more (or |
||
32 | less) portable across different operating systems than is the unzip |
||
33 | executable itself. In general a self-extracting archive made on a par- |
||
34 | ticular Unix system, for example, will only self-extract under the same |
||
35 | flavor of Unix. Regular unzip may still be used to extract the embed- |
||
36 | ded archive as with any normal zipfile, although it will generate a |
||
37 | harmless warning about extra bytes at the beginning of the zipfile. |
||
38 | Despite this, however, the self-extracting archive is technically not a |
||
39 | valid ZIP archive, and PKUNZIP may be unable to test or extract it. |
||
40 | This limitation is due to the simplistic manner in which the archive is |
||
41 | created; the internal directory structure is not updated to reflect the |
||
42 | extra bytes prepended to the original zipfile. |
||
43 | |||
44 | ARGUMENTS |
||
45 | [file(s)] |
||
46 | An optional list of archive members to be processed. Regular |
||
47 | expressions (wildcards) similar to those in Unix egrep(1) may be |
||
48 | used to match multiple members. These wildcards may contain: |
||
49 | |||
50 | * matches a sequence of 0 or more characters |
||
51 | |||
52 | ? matches exactly 1 character |
||
53 | |||
54 | [...] matches any single character found inside the brackets; |
||
55 | ranges are specified by a beginning character, a hyphen, |
||
56 | and an ending character. If an exclamation point or a |
||
57 | caret (`!' or `^') follows the left bracket, then the |
||
58 | range of characters within the brackets is complemented |
||
59 | (that is, anything except the characters inside the |
||
60 | brackets is considered a match). |
||
61 | |||
62 | (Be sure to quote any character that might otherwise be inter- |
||
63 | preted or modified by the operating system, particularly under |
||
64 | Unix and VMS.) |
||
65 | |||
66 | [-x xfile(s)] |
||
67 | An optional list of archive members to be excluded from process- |
||
68 | ing. Since wildcard characters match directory separators |
||
69 | (`/'), this option may be used to exclude any files that are in |
||
70 | subdirectories. For example, ``foosfx *.[ch] -x */*'' would |
||
71 | extract all C source files in the main directory, but none in |
||
72 | any subdirectories. Without the -x option, all C source files |
||
73 | in all directories within the zipfile would be extracted. |
||
74 | |||
75 | If unzipsfx is compiled with SFX_EXDIR defined, the following option is |
||
76 | also enabled: |
||
77 | |||
78 | [-d exdir] |
||
79 | An optional directory to which to extract files. By default, |
||
80 | all files and subdirectories are recreated in the current direc- |
||
81 | tory; the -d option allows extraction in an arbitrary directory |
||
82 | (always assuming one has permission to write to the directory). |
||
83 | The option and directory may be concatenated without any white |
||
84 | space between them, but note that this may cause normal shell |
||
85 | behavior to be suppressed. In particular, ``-d ~'' (tilde) is |
||
86 | expanded by Unix C shells into the name of the user's home |
||
87 | directory, but ``-d~'' is treated as a literal subdirectory |
||
88 | ``~'' of the current directory. |
||
89 | |||
90 | OPTIONS |
||
91 | unzipsfx supports the following unzip(1L) options: -c and -p (extract |
||
92 | to standard output/screen), -f and -u (freshen and update existing |
||
93 | files upon extraction), -t (test archive) and -z (print archive com- |
||
94 | ment). All normal listing options (-l, -v and -Z) have been removed, |
||
95 | but the testing option (-t) may be used as a ``poor man's'' listing. |
||
96 | Alternatively, those creating self-extracting archives may wish to |
||
97 | include a short listing in the zipfile comment. |
||
98 | |||
99 | See unzip(1L) for a more complete description of these options. |
||
100 | |||
101 | MODIFIERS |
||
102 | unzipsfx currently supports all unzip(1L) modifiers: -a (convert text |
||
103 | files), -n (never overwrite), -o (overwrite without prompting), -q |
||
104 | (operate quietly), -C (match names case-insensitively), -L (convert |
||
105 | uppercase-OS names to lowercase), -j (junk paths) and -V (retain ver- |
||
106 | sion numbers); plus the following operating-system specific options: |
||
107 | -X (restore VMS owner/protection info), -s (convert spaces in filenames |
||
108 | to underscores [DOS, OS/2, NT]) and -$ (restore volume label [DOS, |
||
109 | OS/2, NT, Amiga]). |
||
110 | |||
111 | (Support for regular ASCII text-conversion may be removed in future |
||
112 | versions, since it is simple enough for the archive's creator to ensure |
||
113 | that text files have the appropriate format for the local OS. EBCDIC |
||
114 | conversion will of course continue to be supported since the zipfile |
||
115 | format implies ASCII storage of text files.) |
||
116 | |||
117 | See unzip(1L) for a more complete description of these modifiers. |
||
118 | |||
119 | ENVIRONMENT OPTIONS |
||
120 | unzipsfx uses the same environment variables as unzip(1L) does, |
||
121 | although this is likely to be an issue only for the person creating and |
||
122 | testing the self-extracting archive. See unzip(1L) for details. |
||
123 | |||
124 | DECRYPTION |
||
125 | Decryption is supported exactly as in unzip(1L); that is, interactively |
||
126 | with a non-echoing prompt for the password(s). See unzip(1L) for |
||
127 | details. Once again, note that if the archive has no encrypted files |
||
128 | there is no reason to use a version of unzipsfx with decryption sup- |
||
129 | port; that only adds to the size of the archive. |
||
130 | |||
131 | AUTORUN COMMAND |
||
132 | When unzipsfx was compiled with CHEAP_SFX_AUTORUN defined, a simple |
||
133 | ``command autorun'' feature is supported. You may enter a command into |
||
134 | the Zip archive comment, using the following format: |
||
135 | |||
136 | $AUTORUN$>[command line string] |
||
137 | |||
138 | When unzipsfx recognizes the ``$AUTORUN$>'' token at the beginning of |
||
139 | the Zip archive comment, the remainder of the first line of the comment |
||
140 | (until the first newline character) is passed as a shell command to the |
||
141 | operating system using the C rtl ``system'' function. Before executing |
||
142 | the command, unzipsfx displays the command on the console and prompts |
||
143 | the user for confirmation. When the user has switched off prompting by |
||
144 | specifying the -q option, autorun commands are never executed. |
||
145 | |||
146 | In case the archive comment contains additional lines of text, the |
||
147 | remainder of the archive comment following the first line is displayed |
||
148 | normally, unless quiet operation was requested by supplying a -q |
||
149 | option. |
||
150 | |||
151 | EXAMPLES |
||
152 | To create a self-extracting archive letters from a regular zipfile let- |
||
153 | ters.zip and change the new archive's permissions to be world-exe- |
||
154 | cutable under Unix: |
||
155 | |||
156 | cat unzipsfx letters.zip > letters |
||
157 | chmod 755 letters |
||
158 | zip -A letters |
||
159 | |||
160 | To create the same archive under MS-DOS, OS/2 or NT (note the use of |
||
161 | the /b [binary] option to the copy command): |
||
162 | |||
163 | copy /b unzipsfx.exe+letters.zip letters.exe |
||
164 | zip -A letters.exe |
||
165 | |||
166 | Under VMS: |
||
167 | |||
168 | copy unzipsfx.exe,letters.zip letters.exe |
||
169 | letters == "$currentdisk:[currentdir]letters.exe" |
||
170 | zip -A letters.exe |
||
171 | |||
172 | (The VMS append command may also be used. The second command installs |
||
173 | the new program as a ``foreign command'' capable of taking arguments. |
||
174 | The third line assumes that Zip is already installed as a foreign com- |
||
175 | mand.) Under AmigaDOS: |
||
176 | |||
177 | MakeSFX letters letters.zip UnZipSFX |
||
178 | |||
179 | (MakeSFX is included with the UnZip source distribution and with Amiga |
||
180 | binary distributions. ``zip -A'' doesn't work on Amiga self-extracting |
||
181 | archives.) To test (or list) the newly created self-extracting |
||
182 | archive: |
||
183 | |||
184 | letters -t |
||
185 | |||
186 | To test letters quietly, printing only a summary message indicating |
||
187 | whether the archive is OK or not: |
||
188 | |||
189 | letters -tqq |
||
190 | |||
191 | To extract the complete contents into the current directory, recreating |
||
192 | all files and subdirectories as necessary: |
||
193 | |||
194 | letters |
||
195 | |||
196 | To extract all *.txt files (in Unix quote the `*'): |
||
197 | |||
198 | letters *.txt |
||
199 | |||
200 | To extract everything except the *.txt files: |
||
201 | |||
202 | letters -x *.txt |
||
203 | |||
204 | To extract only the README file to standard output (the screen): |
||
205 | |||
206 | letters -c README |
||
207 | |||
208 | To print only the zipfile comment: |
||
209 | |||
210 | letters -z |
||
211 | |||
212 | LIMITATIONS |
||
213 | The principle and fundamental limitation of unzipsfx is that it is not |
||
214 | portable across architectures or operating systems, and therefore nei- |
||
215 | ther are the resulting archives. For some architectures there is lim- |
||
216 | ited portability, however (e.g., between some flavors of Intel-based |
||
217 | Unix). |
||
218 | |||
219 | Another problem with the current implementation is that any archive |
||
220 | with ``junk'' prepended to the beginning technically is no longer a |
||
221 | zipfile (unless zip(1) is used to adjust the zipfile offsets appropri- |
||
222 | ately, as noted above). unzip(1) takes note of the prepended bytes and |
||
223 | ignores them since some file-transfer protocols, notably MacBinary, are |
||
224 | also known to prepend junk. But PKWARE's archiver suite may not be |
||
225 | able to deal with the modified archive unless its offsets have been |
||
226 | adjusted. |
||
227 | |||
228 | unzipsfx has no knowledge of the user's PATH, so in general an archive |
||
229 | must either be in the current directory when it is invoked, or else a |
||
230 | full or relative path must be given. If a user attempts to extract the |
||
231 | archive from a directory in the PATH other than the current one, |
||
232 | unzipsfx will print a warning to the effect, ``can't find myself.'' |
||
233 | This is always true under Unix and may be true in some cases under MS- |
||
234 | DOS, depending on the compiler used (Microsoft C fully qualifies the |
||
235 | program name, but other compilers may not). Under OS/2 and NT there |
||
236 | are operating-system calls available that provide the full path name, |
||
237 | so the archive may be invoked from anywhere in the user's path. The |
||
238 | situation is not known for AmigaDOS, Atari TOS, MacOS, etc. |
||
239 | |||
240 | As noted above, a number of the normal unzip(1L) functions have been |
||
241 | removed in order to make unzipsfx smaller: usage and diagnostic info, |
||
242 | listing functions and extraction to other directories. Also, only |
||
243 | stored and deflated files are supported. The latter limitation is |
||
244 | mainly relevant to those who create SFX archives, however. |
||
245 | |||
246 | VMS users must know how to set up self-extracting archives as foreign |
||
247 | commands in order to use any of unzipsfx's options. This is not neces- |
||
248 | sary for simple extraction, but the command to do so then becomes, |
||
249 | e.g., ``run letters'' (to continue the examples given above). |
||
250 | |||
251 | unzipsfx on the Amiga requires the use of a special program, MakeSFX, |
||
252 | in order to create working self-extracting archives; simple concatena- |
||
253 | tion does not work. (For technically oriented users, the attached |
||
254 | archive is defined as a ``debug hunk.'') There may be compatibility |
||
255 | problems between the ROM levels of older Amigas and newer ones. |
||
256 | |||
257 | All current bugs in unzip(1L) exist in unzipsfx as well. |
||
258 | |||
259 | DIAGNOSTICS |
||
260 | unzipsfx's exit status (error level) is identical to that of unzip(1L); |
||
261 | see the corresponding man page. |
||
262 | |||
263 | SEE ALSO |
||
264 | funzip(1L), unzip(1L), zip(1L), zipcloak(1L), zipgrep(1L), zipinfo(1L), |
||
265 | zipnote(1L), zipsplit(1L) |
||
266 | |||
267 | URL |
||
268 | The Info-ZIP home page is currently at |
||
269 | http://www.info-zip.org/pub/infozip/ |
||
270 | or |
||
271 | ftp://ftp.info-zip.org/pub/infozip/ . |
||
272 | |||
273 | AUTHORS |
||
274 | Greg Roelofs was responsible for the basic modifications to UnZip nec- |
||
275 | essary to create UnZipSFX. See unzip(1L) for the current list of Zip- |
||
276 | Bugs authors, or the file CONTRIBS in the UnZip source distribution for |
||
277 | the full list of Info-ZIP contributors. |
||
278 | |||
279 | Info-ZIP 20 April 2009 (v6.0) UNZIPSFX(1L) |