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

FreeBSD Manual Pages

  
 
  

home | help
ZOO(1)			     General Commands Manual			  ZOO(1)

NAME
     zoo - manipulate archives of files in compressed form

SYNOPSIS
     zoo {acfDeghHlLPTuUvVx}[aAcCdEfghImMnNoOpPqSu1:/.@n+-=] archive [file] ...
     zoo -command archive [file] ...
     zoo h

DESCRIPTION
     Zoo is used to create and maintain collections of files in compressed form.
     It  uses a Lempel-Ziv compression algorithm that gives space savings in the
     range of 20% to 80% depending on the type of file data.  Zoo can store  and
     selectively extract multiple generations of the same file.  Data can be re-
     covered  from damaged archives by skipping the damaged portion and locating
     undamaged data with the help of fiz(1).

     This documentation is for version 2.1.  Changes from previous versions  are
     described in the section labelled CHANGES.

     The  command  zoo h gives a summary of commands.  Extended multiscreen help
     can be obtained with zoo H.

     Zoo will not add an archive to itself, nor add the archive's  backup  (with
     .bak extension to the filename) to the archive.

     Zoo  has two types of commands:  Expert commands, which consist of one com-
     mand letter followed by zero or more modifier characters, and  Novice  com-
     mands,  which consist of a hyphen (`-') followed by a command word that may
     be abbreviated.  Expert commands are case-sensitive but Novice commands are
     not.

     When zoo adds a file to an existing archive, the default action is to main-
     tain one generation of each file in an archive and to mark any older gener-
     ation as deleted.	A limit on the number of  generations  to  save  can  be
     specified by the user for an entire archive, or for each file individually,
     or  both.	 Zoo deletes a stored copy of an added file if necessary to pre-
     vent the number of stored generations  from  exceeding  the  user-specified
     limit.

     Deleted  files  may  be later undeleted.  Archives may be packed to recover
     space occupied by deleted files.

     All commands assume that the archive name ends with the characters .zoo un-
     less a different extension is supplied.

     Novice commands

     Novice commands may be abbreviated to a hyphen followed  by  at  least  one
     command  character.   Each  Novice command works in two stages.  First, the
     command does its intended work.  Then, if the result was that one	or  more
     files  were  deleted  in  the specified archive, the archive is packed.  If
     packing occurs, the original unpacked archive is always left behind with an
     extension of .bak.

     No Novice command ever stores the directory prefix of a file.

     The Novice commands are as follows.

     -add    Adds the specified files to the archive.

     -freshen
	    Adds a specified file to the archive if and only if an older file by
	    the same name already exists in the archive.

     -delete
	    Deletes the specified files from the archive.

     -update
	    Adds a specified file to the archive either:  if an  older	file  by
	    the  same  name  already exists in the archive or:	if a file by the
	    same name does not already exist in the archive.

     -extract
	    Extracts the specified files from the archive.  If no file is speci-
	    fied all files are extracted.

     -move  Equivalent to -add except that source files are deleted after  addi-
	    tion.

     -print
	    Equivalent	to -extract except that extracted data are sent to stan-
	    dard output.

     -list  Gives information about the specified archived files  including  any
	    attached  comments.  If no files are specified all files are listed.
	    Deleted files are not listed.

     -test  Equivalent to -extract except that the extracted data are not  saved
	    but any errors encountered are reported.

     -comment
	    Allows  the  user  to  add	or  update comments attached to archived
	    files.  When prompted, the user may:  type a carriage return to skip
	    the file, leaving any current comment unchanged;  or type a  (possi-
	    bly  null)	comment  of  up  to 32,767 characters terminated by /end
	    (case-insensitive) on a separate  line;   or  type	the  end-of-file
	    character (normally control D) to skip all remaining files.

     -delete
	    Deletes the specified files.

     The correspondence between Novice and Expert commands is as follows.

     Novice					   Equivalent
     Command	Description			   Expert Command
     -------------------------------------------------------------
     -add	add files to archive		   ahP
     -extract	extract files from archive	   x
     -move	move files to archive		   ahMP
     -test	test archive integrity		   xNd
     -print	extract files to standard output   xp
     -delete	delete files from archive	   DP
     -list	list archive contents		   Vm
     -update	add new or newer files		   ahunP
     -freshen	by add newer files		   ahuP
     -comment	add comments to files		   c

     Expert commands

     The general format of expert commands is:

     zoo {acfDeghHlLPTuUvVx}[aAcCdEfghImMnNoOpPqSu1:/.@n+-=] archive [file] ...

     The  characters  enclosed within {} are commands.	Choose any one of these.
     The characters enclosed within [] just to the right of the {} are modifiers
     and zero or more of these may immediately	follow	the  command  character.
     All combinations of command and modifier characters may not be valid.

     Files are added to an archive with the command:

     zoo {au}[cfhIMnPqu:+-] archive [file] ...

     Command characters are:

     a	    Add  each  specified  file to archive.  Any already-archived copy of
	    the file is deleted if this is  necessary  to  avoid  exceeding  the
	    user-specified  limit  on  the  number of generations of the file to
	    maintain in the archive.

     u	    Do an update of the archive.  A  specified	file  is  added  to  the
	    archive  only if a copy of it is already in the archive and the copy
	    being added is newer than the copy already in the archive.

     The following modifiers are specific to these commands.

     M	    Move files to archive.  This makes zoo delete (unlink) the	original
	    files  after they have been added to the archive.  Files are deleted
	    after addition of all files to the archive is complete and after any
	    requested packing of the archive has been done, and only if zoo  de-
	    tected no errors.

     n	    Add  new files only.  A specified file is added only if it isn't al-
	    ready in the archive.

     h	    Use the high performance compression algorithm. This option  may  be
	    used  with	either	the add (a) or filter (f) commands to gain extra
	    compression at the expense of using somewhat  more	processor  time.
	    Extracting	files  compressed  with  the  method is usually slightly
	    faster than those saved with the default method.

     P	    Pack archive after files have been added.

     u	    Applied to the a command, this modifier makes it behave  identically
	    to the u command.

	    The  combination  of the n modifier with the u modifier or u command
	    causes addition of a file to the archive either if the file  is  not
	    already in the archive, or if the file is already in the archive but
	    the archived copy is older than the copy being added.

     :	    Do	not  store directory names.  In the absence of this modifier zoo
	    stores the full pathname of each archived file.

     I	    Read filenames to be archived from standard input.	 Zoo  will  read
	    its  standard  input  and  assume  that each line of text contains a
	    filename.  Under AmigaDOS and the **IX family, the	entire	line  is
	    used.   Under  MS-DOS  and VAX/VMS, zoo assumes that the filename is
	    terminated by a blank, tab, or newline; thus it is	permissible  for
	    the  line  of text to contain more than one field separated by white
	    space, and only the first field will be used.

	    Under the **IX family of operating systems, zoo can be used as  fol-
	    lows in a pipeline:

	       find . -print | zoo aI sources

	  If  the  I  modifier is specified, no filenames may be supplied on the
	  command line itself.

     +,-    These modifiers take effect only if the a  command	results  in  the
	    creation  of  a  new archive.  + causes any newly-created archive to
	    have generations enabled.  - is provided for symmetry and causes any
	    newly-created archive to have generations disabled;   this	is  also
	    the default if neither + nor - is specified.

     Files are extracted from an archive with the command:

     zoo {ex}[dNoOpqS./@] archive [file] ...

     The  e  and x commands are synonymous.  If no file was specified, all files
     are extracted from the archive.

     The following modifiers are specific to the e and x commands:

     N	    Do not save extracted data but report any errors encountered.

     O	    Overwrite files.  Normally, if a file being  extracted  would  over-
	    write an already-existing file of the same name, zoo asks you if you
	    really  want to overwrite it.  You may answer the question with `y',
	    which means yes, overwrite; or `n', which means no, don't overwrite;
	    or `a', which means assume the answer is `y' for this and all subse-
	    quent files.  The O modifier makes zoo assume that files may  always
	    be	overwritten.   Neither	answering the question affirmatively nor
	    using O alone will cause read-only files to be overwritten.

	    On **IX systems, however, doubling this modifier as  OO  will  force
	    zoo  to  unconditionally overwrite any read-protected files with ex-
	    tracted files if it can do so.

	    The O, N, and p modifiers are mutually exclusive.

     S	    Supersede newer files on disk with older  extracted  files.   Unless
	    this  modifier is used, zoo will not overwrite a newer existing file
	    with an older extracted file.

     o	    This is equivalent to the O modifier if and only if it is  given  at
	    least twice.  It is otherwise ignored.

     p	    Pipe extracted data to standard output.  Error messages are piped to
	    standard  output as well.  However, if a bad CRC is detected, an er-
	    ror message is sent both to standard error and to standard output.

     /	    Extract to original pathname.  Any needed directories  must  already
	    exist.  In the absence of this modifier all files are extracted into
	    the  current directory.  If this modifier is doubled as //, required
	    directories need not exist and are created if necessary.

     The management of multiple generations of archived files is done  with  the
     commands:

     zoo gl[Aq]{+-=}number archive files ..
     zoo gc[q]{+-=}number archive files ..
     zoo gA[q]- archive
     zoo gA[q]+ archive

     The  first  form, gl, adjusts the generation limit of selected files by the
     specified value.  If the form =n is used, where n is a decimal number, this
     sets the generation limit to the specified value.	If + or -  are	used  in
     placed of = the effect is to increment or decrement the generation limit by
     the specified value.  For example, the command

	  zoo gl=5 xyz :

     sets the generation limit of each file in the archive xyz.zoo to a value of
     5.  The command

	  zoo gl-3 xyz :

     decrements  the generation limit of each file in the archive to 3 less than
     it currently is.

     If the A modifier is used, the archive-wide generation  limit  is	adjusted
     instead.

     The  number of generations of a file maintained in an archive is limited by
     the file generation limit, or the archive generation  limit,  whichever  is
     lower.   As  a  special  case, a generation limit of 0 stands for no limit.
     Thus the default file generation limit of 0 and archive generation limit of
     3 limits the number of generations of each file in a newly-created  archive
     to three.

     The  generation  limit  specified should be in the range 0 through 15;  any
     higher numbers are interpreted modulo 16.

     The second form of the command, using gc, adjusts the generation  count  of
     selected  files.	Each  file  has a generation count of 1 when it is first
     added to an archive.  Each time a file by the same name is added  again  to
     an  archive,  it  receives  a  generation count that is one higher than the
     highest generation count of the archived copy of the file.  The permissible
     range of generation counts is 1 through 65535.  If  repeated  manipulations
     of  an archive result in files having very high generation counts, they may
     be set back to lower numbers with the gc command.	The syntax of  the  com-
     mand  is analogous to the syntax of the gl command, except that the A modi-
     fier is not applicable to the gc command.

     The third form, gA-, disables generations in an archive.	Generations  are
     off  when	an  archive is first created, but may be enabled with the fourth
     form of the command, gA+.	When generations are disabled in an archive, zoo
     will not display generation numbers in archive listings or maintain  multi-
     ple generations.  Generations can be re-enabled at any time, though manipu-
     lation  of  an  archive with repeated interspersed gA- and gA+ commands may
     result in an archive whose behavior is not easily understandable.

     Archived files are listed with the command:

     zoo {lLvV}[aAcCdfgmqvV@/1+-] archive[.zoo] [file] ...

     l	    Information presented includes the date and time of each  file,  its
	    original and current (compressed) sizes, and the percentage size de-
	    crease due to compression (labelled CF or compression factor).  If a
	    file  was  added to the archive in a different timezone, the differ-
	    ence between timezones is shown in hours as a signed number.  As  an
	    example, if the difference is listed as +3, this means that the file
	    was  added	to the archive in a timezone that is 3 hours west of the
	    current timezone.  The file time  listed  is,  however,  always  the
	    original timestamp of the archived file, as observed by the user who
	    archived  the  file, expressed as that user's local time.  (Timezone
	    information is stored and displayed only if the underlying operating
	    system knows about timezones.)

	    If no filename is supplied	all  files  are  listed  except  deleted
	    files.

	    Zoo  selects  which generation(s) of a file to list according to the
	    following algorithm.

	    If no filename is supplied, only the latest generation of each  file
	    is	listed.   If  any  filenames  are specified, and a generation is
	    specified for an argument, only the requested generation is  listed.
	    If a filename is specified ending with the generation character (`:'
	    or	`;'),  all generations of that file are listed.  Thus a filename
	    argument of the form zoo.c will cause only the latest generation  of
	    zoo.c to be listed;  an argument of the form zoo.c:4 will cause gen-
	    eration 4 of zoo.c to be listed;  and an argument of the form zoo.c:
	    or zoo.c:* will cause all generations of zoo.c to be listed.

     L	    This  is similar to the l command except that all supplied arguments
	    must be archives and all non-deleted generations  of  all  files  in
	    each archive appear in the listing.

	    On	**IX  systems, on which the shell expands arguments, if multiple
	    archives are to be listed, the L command must  be  used.   On  other
	    systems  (VAX/VMS,	AmigaDOS,  MSDOS) on which wildcard expansion is
	    done internally by zoo, wildcards may be used in the  archive  name,
	    and a multiple archive listing obtained, using the l command.

     v	    This  causes any comment attached to the archive to be listed in ad-
	    dition to the other information.

     V	    This causes any comment attached to the archive and also any comment
	    attached to each file to be listed.

	    Both the V and v command characters can also be used as modifiers to
	    the l and L commands.

     In addition to the general modifiers described later, the	following  modi-
     fiers can be applied to the archive list commands.

     a	    This  gives  a  single-line format containing both each filename and
	    the name of the archive, sorted by archive name.  It  is  especially
	    useful with the L command, since the result can be further sorted on
	    any  field	to give a master listing of the entire contents of a set
	    of archives.

     A	    This causes any comment attached to the archive to be listed.

     g	    This modifier causes file generation information to be listed  about
	    the  archive.   For  each file listed, the user-specified generation
	    limit, if any, is listed.  For example, `3g' for a file  means  that
	    the  user  wants  no  more	than three generations of the file to be
	    kept.  In archives created by older versions  of  zoo,  the  listing
	    will  show	`-g', meaning that no generation information is kept and
	    multiple generations of the file are not being maintained.

	    In addition  to  the  generation  information  for	each  file,  the
	    archive-wide  generation  limit,  if any, is shown at the end of the
	    listing.  If generations have been disabled by the user, this is  so
	    indicated, for example:

	       Archive generation limit is 3 (generations off).

	  For  more  information  about generations see the description of the g
	  command.

     m	    This modifier is currently applicable  to  **IX  systems  only.   It
	    causes  the  mode  bits  (file  protection	code) of each file to be
	    listed as a three-digit octal number.  Currently zoo preserves  only
	    the  lowest  nine mode bits.  Their meanings are as described in the
	    **IX documentation for the chmod(1) command.

     C	    This modifier causes the stored cyclic  redundancy	code  (CRC)  for
	    each archived file to be shown as a four-digit hexadecimal number.

     1	    This  forces  one filename to be listed per line.  It is most useful
	    in combination with the f modifier.

     /	    This forces any directory name to be always  listed,  even	in  fast
	    columnized	listings  that	do  not  normally  include any directory
	    names.

     +,-    The - modifier causes trailing generation numbers to be omitted from
	    filenames.	The + modifier causes the trailing generation numbers to
	    be shown, which is also the default if neither - nor + is specified.

     Files may be deleted and undeleted from an archive with the following  com-
     mands:

     zoo {DU}[Pq1] archive file ...

     The  D  command deletes the specified files and the U command undeletes the
     specified files.  The 1 modifier (the digit one, not the letter ell) forces
     deletion or undeletion of at most one file.  If multiple instances  of  the
     same  file  exist	in an archive, use of the 1 modifier may allow selective
     extraction of one of these.

     Comments may be added to an archive with the command:

     zoo c[A] archive

     Without the modifier A, this behaves identically to the  -comment	command.
     With  the	modifier  A, the command serves to add or update the comment at-
     tached to the archive as a whole.	This comment may be listed with the  lA,
     LA, v, and V commands.  Applying the cA command to an archive that was cre-
     ated  with an older version of zoo will result in an error message request-
     ing that the user first pack the archive with the P command.  This  reorga-
     nizes the archive and creates space for the archive comment.

     The timestamp of an archive may be adjusted with the command:

     zoo T[q] archive

     Zoo  normally  attempts  to maintain the timestamp of an archive to reflect
     the age of the newest file stored in it.  Should the timestamp ever be  in-
     correct it can be fixed with the T command.

     An archive may be packed with the command:

     zoo P[EPq] archive

     If  the  backup copy of the archive already exists, zoo will refuse to pack
     the archive unless the P modifier is also given.  The E modifier causes zoo
     not to save a backup copy of the original archive after packing.  A  unique
     temporary	file  in  the  current	directory  is used to initially hold the
     packed archive.  This file will be left behind if packing is interrupted or
     if for some reason this file cannot be renamed to the name of the	original
     archive when packing is complete.

     Packing  removes  any garbage data appended to an archive because of Xmodem
     file transfer and also recovers any wasted space remaining  in  an  archive
     that has been frequently updated or in which comments were replaced.  Pack-
     ing  also	updates  the  format of any archive that was created by an older
     version of zoo so that newer features (e.g. archive-wide generation  limit,
     archive comment) become fully available.

     Zoo  can  act  as	a pure compression or uncompression filter, reading from
     standard input and writing to standard output.  This is achieved  with  the
     command:

     zoo f{cu}[h]

     where c specifies compression, u specifies uncompression, and h used in ad-
     dition  requests  the high-performance compression be used.  A CRC value is
     used to check the integrity of the data.  The compressed data stream has no
     internal archive structure and contains multiple files only  if  the  input
     data stream was already structured, as might be obtained, for example, from
     tar or cpio.

      Modem transfers can be speeded up with these commands:

	       zoo fc < file | sz ...  rz | zoo fu > file

     General modifiers

     The following modifiers are applicable to several commands:

     c	    Applied to the a and u commands, this causes the user to be prompted
	    for a comment for each file added to the archive.  If the file being
	    added  has	replaced, or is a newer generation of, a file already in
	    the archive, any comment attached to that file is shown to the  user
	    and becomes attached to the newly-added file unless the user changes
	    it.   Possible user responses are as described for the -comment com-
	    mand.  Applied to the archive list command l, the c modifier  causes
	    the listing of any comments attached to archived files.

      .     In conjunction with / or // this modifier causes any extracted path-
	    name  beginning  with  `/' to be interpreted relative to the current
	    directory, resulting in the possible creation of a subtree rooted at
	    the current directory.  In conjunction with  the  command  P  the  .
	    modifier  causes the packed archive to be created in the current di-
	    rectory.  This is intended to allow users with  limited  disk  space
	    but multiple disk drives to pack large archives.

     d	    Most  commands that act on an archive act only on files that are not
	    deleted.  The d modifier makes  commands  act  on  both  normal  and
	    deleted  files.   If  doubled  as dd, this modifier forces selection
	    only of deleted files.

     f	    Applied to the a and u commands, the f modifier causes fast  archiv-
	    ing  by  adding files without compression.	Applied to l it causes a
	    fast listing of files in a multicolumn format.

     q	    Be quiet.  Normally zoo lists the name of each file and what  action
	    it	is  performing.  The q modifier suppresses this.  When files are
	    being extracted to standard output, the q  modifier  suppresses  the
	    header preceding each file.  When archive contents are being listed,
	    this modifier suppresses any header and trailer.  When a fast colum-
	    nized  listing is being obtained, this modifier causes all output to
	    be combined into a single set of filenames for  all  archives  being
	    listed.

	    When  doubled  as qq, this modifier suppresses WARNING messages, and
	    when tripled as qqq, ERROR messages are suppressed too.  FATAL error
	    messages are never suppressed.

     Recovering data from damaged archives

     The @ modifier allows the user to specify the exact position in an  archive
     where  zoo  should  extract  a  file  from, allowing damaged portions of an
     archive to be skipped.  This modifier must be  immediately  followed  by  a
     decimal integer without intervening spaces, and possibly by a comma and an-
     other  decimal  integer, giving a command of the form l@m or l@m,n (to list
     archive contents) or x@m or x@m,n	(to  extract  files  from  an  archive).
     Listing  or  extraction begin at position m in the archive.  The value of m
     must be the position within the archive of an  undamaged  directory  entry.
     This position is usually obtained from fiz(1) version 2.0 or later.

     If  damage  to  the  archive  has shortened or lengthened it, all positions
     within the archive may be changed by some constant amount.   To  compensate
     for  this, the value of n may be specified.  This value is also usually ob-
     tained from fiz(1).  It should be the position in the archive of  the  file
     data  corresponding  to the directory entry that has been specified with m.
     Thus if the command x@456,575 is given, it will cause the first  456  bytes
     of the archive to be skipped and extraction to begin at offset 456;  in ad-
     dition,  zoo will attempt to extract the file data from position 575 in the
     archive instead of the value that is found in the directory entry read from
     the archive.  For example, here is some of the output of fiz when	it  acts
     on a damaged zoo archive:

     ****************
	 2526: DIR  [changes] ==>   95
	 2587: DATA
     ****************
	 3909: DIR  [copyrite] ==> 1478
	 3970: DATA
	 4769: DATA
     ****************

     In  such  output,	DIR  indicates	where fiz found a directory entry in the
     archive, and DATA indicates where fiz  found  file  data  in  the	archive.
     Filenames	located by fiz are enclosed in square brackets, and the notation
     "==>   95" indicates that the directory entry found by fiz at position 2526
     has a file data pointer to position 95.  (This is clearly wrong, since file
     data always occur in an archive after their directory entry.)   In  actual-
     ity,  fiz	found  file  data  at positions 2587, 3970, and 4769.  Since fiz
     found only two directory entries, and each directory entry  corresponds  to
     one file, one of the file data positions is an artifact.

     In  this  case, commands to try giving to zoo might be x@2526,2587 (extract
     beginning at  position  2526,  and  get  file  data  from	position  2587),
     x@3090,3970  (extract at 3090, get data from 3970) and x@3909,4769 (extract
     at 3909, get data from  4769).   Once  a  correctly-matched  directory  en-
     try/file  data  pair  is found, zoo will in most cases synchronize with and
     correctly extract all files subsequently found in the archive.   Trial  and
     error  should  allow  all	undamaged files to be extracted.  Also note that
     self-extracting archives created using sez (the Self-Extracting Zoo utility
     for MS-DOS), which are normally executed on an MS-DOS  system  for  extrac-
     tion, can be extracted on non-MSDOS systems using zoo's damaged-archive re-
     covery method using the @ modifier.

     Wildcard handling

     Under  the  **IX  family  of  operating systems, the shell normally expands
     wildcards to a list of matching files.  Wildcards that are meant  to  match
     files  within an archive must therefore be escaped or quoted.  When select-
     ing files to be added to an archive, wildcard conventions	are  as  defined
     for  the shell.  When selecting files from within an archive, wildcard han-
     dling is done by zoo as described below.

     Under MS-DOS and AmigaDOS, quoting of wildcards is not needed.   All  wild-
     card  expansion of filenames is done by zoo, and wildcards inside directory
     names are expanded only when listing  or  extracting  files  but  not  when
     adding them.

     The  wildcard syntax interpreted by zoo is limited to the following charac-
     ters.

     *	    Matches any sequence of zero or more characters.

     ?	    Matches any single character.

	    Arbitrary combinations of * and ?  are allowed.

     /	    If a supplied pattern contains a slash  anywhere  in  it,  then  the
	    slash  separating  any  directory  prefix  from the filename must be
	    matched explicitly.  If a supplied pattern contains no slashes,  the
	    match is selective only on the filename.

     c-c    Two characters separated by a hyphen specify a character range.  All
	    filenames beginning with those characters will match.  The character
	    range  is meaningful only by itself or preceded by a directory name.
	    It is not specially interpreted if it is part of a filename.

     : and ;
	    These characters are used to separate a filename from  a  generation
	    number  and are used when selecting specific generations of archived
	    files.  If no generation character is used, the  filename  specified
	    matches  only  the latest generation of the file.  If the generation
	    character is specified, the filename and the generation are  matched
	    independently  by  zoo's  wildcard	mechanism.   If no generation is
	    specified following the : or ; character, all  generations	of  that
	    file  will	match.	 As  a	special  case,	a generation number of 0
	    matches only the latest generation of a file, while ^0  matches  all
	    generations  of  a	file  except  the latest one.  If no filename is
	    specified preceding the generation	character,  all  filenames  will
	    match.   As  a corollary, the generation character by itself matches
	    all generations of all files.

     MS-DOS users should note that zoo does not treat the dot as a special char-
     acter, and it does not ignore characters following  an  asterisk.	 Thus  *
     matches all filenames; *.*  matches filenames containing a dot; *_* matches
     filenames	containing an underscore;  and *z matches all filenames that end
     with the character z, whether or not they contain a dot.

     Usage hints

     The Novice command set in zoo is meant to provide an interface  with  func-
     tionality	and  format  that  will  be  familiar  to users of other similar
     archive utilities.  In keeping with this objective, the Novice commands  do
     not  maintain or use any subdirectory information or allow the use of zoo's
     ability to maintain multiple generations of files.  For this reason,  users
     should switch to exclusively using the Expert commands as soon as possible.

     Although  the Expert command set is quite large, it should be noted that in
     almost every case, all legal modifiers for a command are fully  orthogonal.
     This  means that the user can select any combination of modifiers, and when
     they act together, they will have the intuitively obvious effect.	Thus the
     user need only memorize what each modifier does, and then can combine  them
     as needed without much further thought.

     For  example,  consider  the  a  command  which  is used to add files to an
     archive.  By itself, it simply adds the specified files.  To cause only al-
     ready-archived files to be updated if their disk copies have been modified,
     it is only necessary to add the u modifier,  making  the  command	au.   To
     cause  only new files (i.e., files not already in the archive) to be added,
     the n modifier is used to create the command an.  To  cause  both	already-
     archived  files  to be updated and new files to be added, the u and n modi-
     fiers can be used together, giving the command aun.   Since  the  order  of
     modifiers is not significant, the command could also be anu.

     Further,  the  c modifier can be used to cause zoo to prompt the user for a
     comment to attach to each file added.  And the f modifier	can  cause  fast
     addition  (addition  without  compression).  It should be obvious then that
     the command auncf will cause zoo to update already-archived files, add  new
     files,  prompt  the user for comments, and do the addition of files without
     any compression.  Furthermore, if the user wishes	to  move  files  to  the
     archive,  i.e.,  delete the disk copy of each file after it is added to the
     archive, it is only necessary to add the M modifier to the command,  so  it
     becomes  auncfM.	And  if  the user also wishes to cause the archive to be
     packed as part of the command, thus recovering space from	any  files  that
     are  replaced, the command can be modified to auncfMP by adding the P modi-
     fier that causes packing.

     Similarly, the archive listing commands can be built up by combining  modi-
     fiers.   The basic command to list the contents of an archive is l.  If the
     user wants a fast columnized listing, the f modifier can be added	to  give
     the  lf  command.	Since this listing will have a header giving the archive
     name and a trailer summarizing interesting information about  the	archive,
     such  as  the  number  of deleted files, the user may wish to "quieten" the
     listing by suppressing these;  the relevant modifier is q, which when added
     to the command gives lfq.	If the user wishes to see the  **IX  mode  (file
     protection) bits, and also information about multiple generations, the mod-
     ifiers m (show mode bits) and g (show generation information) can be added,
     giving  the  command  lfqmg.   If	the  user also wishes to see an attached
     archive comment, the modifier A (for archive) will serve.	Thus the command
     lfqmgA will give a fast columnized listing of the archive, suppressing  any
     header and trailer, showing mode bits and generation information, and show-
     ing  any  comment attached to the archive as a whole.  If in addition indi-
     vidual comments attached to files are also needed, simply append the c mod-
     ifier to the command, making it lfqmgAc.  The above command will  not  show
     any  deleted  files,  however;  to see them, use the d modifier, making the
     command lfqmgAcd (or double it as in lfqmgAcdd if only  the  deleted  files
     are  to  be  listed).  And if the user also wishes to see the CRC value for
     each file being listed, the modifier C will do  this,  as	in  the  command
     lfqmgAcdC,  which	gives  a fast columnized listing of all files, including
     deleted files, showing any archive comment and file comments, and file pro-
     tection codes and generation information, as well as the CRC value of  each
     file.

     Note  that the above command lfqmgAcdC could also be abbreviated to VfqmgdC
     because the command V is shorthand for lcA (archive listing with  all  com-
     ments shown).  Similarly the command v is shorthand for lA (archive listing
     with  archive comment shown).  Both V and v can be used as modifiers to any
     of the other archive listing commands.

     Generations

     By default, zoo assumes that only the latest generation of a specified file
     is needed.  If generations other than the latest one need to  be  selected,
     this may be done by specifying them in the filename.  For example, the name
     stdio.h  would  normally refer to the latest generation of the file stdio.h
     stored in a zoo archive.  To get an archive listing showing all generations
     of stdio.h in the archive, the specification stdio.h:* could be  used  (en-
     closed  in  single  quotes if necessary to protect the wildcard character *
     from the shell).  Also, stdio.h:0 selects only  the  latest  generation  of
     stdio.h,  while  stdio.h:^0  selects all generations except the latest one.
     The : character here separates the filename from the generation number, and
     the character * is a wildcard that matches all possible  generations.   For
     convenience,  the	generation  itself  may  be  left  out, so that the name
     stdio.h: (with the : but without a generation number or a wildcard) matches
     all generations exactly as stdio.h:* does.

     If a generation is specified but no filename is present, as in :5,  :*,  or
     just  :,  all filenames of the specified generation will be selected.  Thus
     :5 selects generation 5 of each file, and :* and : select	all  generations
     of all files.

     It  is important to note that zoo's idea of the latest generation of a file
     is not based upon searching the entire archive.  Instead, whenever zoo adds
     a file to an archive, it is marked as being the latest  generation.   Thus,
     if  the  latest generation of a file is deleted, then no generation of that
     file is considered the latest any more.  This  can  be  surprising  to  the
     user.  For example, if an archive already contains the file stdio.h:5 and a
     new  copy is added, appearing in the archive listing as stdio.h:6, and then
     stdio.h:6 is deleted, the remaining copy stdio.h:5 will no longer	be  con-
     sidered  to  be  the latest generation, and the file stdio.h:5, even if un-
     deleted, will no longer appear in an archive listing  unless  generation  5
     (or every generation) is specifically requested.  This behavior will likely
     be improved in future releases of zoo.

FILES
     xXXXXXX - temporary file used during packing
     archive_name.bak - backup of archive

SEE ALSO
     compress(1), fiz(1)

BUGS
     When files are being added to an archive on a non-MS-DOS system, it is pos-
     sible  for  zoo  to  fail to detect a full disk and hence create an invalid
     archive.  This bug will be fixed in a future release.

     Files with generation counts that wrap around from 65535 to 1 are not  cur-
     rently  handled  correctly.   If  a file's generation count reaches a value
     close to 65535, it should be manually set back down to a low number.   This
     may  be  easily done with a command such as gc-65000, which subtracts 65000
     from the generation count of each specified file.	 This  problem	will  be
     fixed in a future release.

     Although zoo on **IX systems preserves the lowest nine mode bits of regular
     files, it does not currently do the same for directories.

     Currently	zoo's handling of the characters : and ; in filenames is not ro-
     bust, because it interprets these to separate a filename from a  generation
     number.  A quoting mechanism will eventually be implemented.

     Standard  input  cannot  be  archived  nor can a created archive be sent to
     standard output.  Spurious error messages may appear if the filename of  an
     archive is too long.

     Since  zoo never archives any file with the same name as the archive or its
     backup (regardless of any path prefixes), care should be taken to make sure
     that a file to be archived does not coincidentally have the  same	name  as
     the archive it is being added to.	It usually suffices to make sure that no
     file  being  archived  is	itself a zoo archive.  (Previous versions of zoo
     sometimes tried to add an archive to itself.  This  bug  now  seems  to  be
     fixed.)

     Only  regular  files  are	archived; devices and empty directories are not.
     Support for archiving empty directories and for  preserving  directory  at-
     tributes is planned for the near future.

     Early versions of MS-DOS have a bug that prevents "." from referring to the
     root directory;  this leads to anomalous results if the extraction of paths
     beginning with a dot is attempted.

     VAX/VMS  destroys	case information unless arguments are enclosed in double
     quotes.  For this reason if a command given to zoo on a VAX/VMS system  in-
     cludes any uppercase characters, it must be enclosed in double quotes.  Un-
     der  VAX/VMS, zoo does not currently restore file timestamps;  this will be
     fixed as soon as I figure out RMS extended attribute blocks,  or  DEC  sup-
     plies  a utime() function, whichever occurs first.  Other VMS bugs, related
     to file structures, can often be overcome by using the program bilf.c  that
     is supplied with zoo.

     It  is  not  currently  possible to create a zoo archive containing all zoo
     archives that do not contain themselves.

DIAGNOSTICS
     Error messages are intended to be self-explanatory  and  are  divided  into
     three  categories.   WARNINGS are intended to inform the user of an unusual
     situation, such as a CRC error during  extraction,  or  -freshening  of  an
     archive  containing  a  file  newer than one specified on the command line.
     ERRORS are fatal to one file, but execution continues with the next file if
     any.  FATAL errors cause execution to be aborted.	The occurrence of any of
     these causes an exit status of 1.	Normal termination  without  any  errors
     gives  an	exit status of 0.  (Under VAX/VMS, however, to avoid an annoying
     message, zoo always exits with an error code of 1.)

COMPATIBILITY
     All versions of zoo on all systems are required to create archives that can
     be extracted and listed with all versions of zoo on all systems, regardless
     of filename and directory syntax or archive  structure;   furthermore,  any
     version of zoo must be able to fully manipulate all archives created by all
     lower-numbered  versions of zoo on all systems.  So far as I can tell, this
     upward compatibility (all manipulations) and downward compatiblity (ability
     to extract and list) is maintained by zoo versions up to 2.01.  Version 2.1
     adds the incompatibility that if high-performance compression is used, ear-
     lier versions cannot extract files compressed with version  2.1.	This  is
     the  only incompatibility that is permissible.  You are forbidden, with the
     force of copyright law, to create from the zoo source code  any  derivative
     work  that  violates  this compatibility goal, whether knowingly or through
     negligence.  If any violation of this compatibility goal is observed,  this
     should be considered a serious problem and reported to me.

CHANGES
     Here  is a list of changes occurring from version 1.50 to version 2.01.  In
     parentheses is given the version in which each change occurred.

     -	    (1.71) New modifiers to the list commands permit  optional	suppres-
	    sion of header and trailer information, inclusion of directory names
	    in columnized listings, and fast one-column listings.

     -	    (1.71) Timezones are handled.

     -	    (1.71)  A  bug was fixed that had made it impossible to individually
	    update comments for a file whose name did not correspond  to  MS-DOS
	    format.

     -	    (1.71)  A change was made that now permits use of the shared library
	    on the **IX PC.

     -	    (1.71) VAX/VMS is now supported reasonably well.

     -	    (2.00) A comment may now be attached to the archive itself.

     -	    (2.00) The OO option allows forced overwriting of read-only files.

     -	    (2.00) Zoo will no longer extract a file if a newer copy already ex-
	    ists on disk;  the S option will override this.

     -	    (2.00) File attributes are preserved for **IX systems.

     -	    (2.00) Multiple generations of the same file are supported.

     -	    (2.00) Zoo will now act as a compression or decompression filter  on
	    a  stream of data and will use a CRC value to check the integrity of
	    a data stream that is uncompressed.

     -	    (2.00) A bug was fixed that caused removal of a  directory	link  if
	    files were moved to an archive by the superuser on a **IX system.

     -	    (2.00)  The data recovery modifier @ was greatly enhanced.	Self-ex-
	    tracting archives created for MS-DOS systems can now be extracted by
	    zoo on any system with help from fiz(1).

     -	    (2.01) A bug was fixed that had caused the	first  generation  of  a
	    file to sometimes unexpectedly show up in archive listings.

     -	    (2.01)  A  bug  was  fixed	that  had  caused  the MS-DOS version to
	    silently skip files that could not be extracted because of	insuffi-
	    cient disk space.

     -	    (2.01)  A bug was fixed that had sometimes made it impossible to se-
	    lectively extract a file by specifying its	name,  even  though  all
	    files  could  be  extracted  from  the archive by not specifying any
	    filenames.	This occurred when a file had been archived on a longer-
	    filename system (e.g. AmigaDOS) and extraction was	attempted  on  a
	    shorter-filename system (e.g. MS-DOS).

     -	    (2.01)  A change was made that will make zoo preserve the mode (file
	    protection) of a zoo archive when it is packed.  This  is  effective
	    only  if  zoo  is  compiled to preserve and restore file attributes.
	    Currently this is so only for **IX systems.

     -	    (2.01) A bug was fixed that had caused an update of  an  archive  to
	    not always add all newer files.

     -	    (2.01)  Blanks  around  equal signs in commands given to "make" were
	    removed from the mk* scripts for better compatiblity with more  **IX
	    implementations including Sun's.

     -	    (2.1) Compression is now greatly improved if the "h" option is used.

     -	    (2.1)  The default behavior is to preserve full pathnames during ex-
	    traction.

     -	    (2.1) On some systems, extraction of files using the older (default)
	    compression method is greatly speeded up.

     -	    (2.1) Extended multiscreen help is available.

     -	    (2.1) Memory allocation is improved, so that the MS-DOS version will
	    not prematurely abort when updating a large archive.

     -	    (2.1) The VAX/VMS version preserves file timestamps  during  extrac-
	    tion.

     -	    (2.1)  The	default  archive-wide generation limit, when generations
	    are enabled, is 3.

FUTURE DIRECTIONS
     A revised version of zoo is in the works that will be able to write  newly-
     created  archives to standard output and will support multivolume archives.
     It will be upward and downward compatible with this version of zoo.

ACKNOWLEDGEMENTS
     The zoo archiver was initially developed using Microsoft  C  3.0  on  a  PC
     clone  manufactured  by  Toshiba of Japan and almost sold by Xerox.  Avail-
     ability of the following systems was helpful in achieving portability: Paul
     Homchick's Compaq running Microport System V/AT;  The Eskimo BBS  somewhere
     in  Oregon  running Xenix/68000; Greg Laskin's system 'gryphon' which is an
     Intel 310 running Xenix/286;  Ball State University's  AT&T  3B2/300,  UNIX
     PC,  and VAX-11/785 (4.3BSD and VAX/VMS) systems.	In addition J. Brian Wa-
     ters provided feedback to help me make the code compilable on his Amiga us-
     ing Manx/Aztec C.	The executable version 2.0 for MS-DOS is currently  com-
     piled with Borland's Turbo C++ 1.0.

     Thanks are due to the following people and many others too numerous to men-
     tion.

     J.  Brian	Waters	<jbwaters@bsu-cs.bsu.edu>,  who has worked diligently to
     port zoo to AmigaDOS, created Amiga-specific code, and continues keeping it
     updated.

     Paul Homchick <rutgers!cgh!paul>, who provided  numerous  detailed  reports
     about some nasty bugs.

     Bill  Davidsen <davidsen@crdos1.crd.ge.com>, who provided numerous improve-
     ments to this manual, contributed multiscreen help, and provided many  use-
     ful bug reports, bug fixes, code improvements, and suggestions.

     Mark  Alexander  <amdahl!drivax!alexande>,  who  provided	me with some bug
     fixes.

     Haruhiko Okumura, who wrote the ar archiver and some excellent  compression
     code, which I adapted for use in zoo.

     Randal L. Barnes <rlb@skyler.mavd.honeywell.com>, who (with Randy Magnuson)
     wrote  the  code  to  support  the  preservation  of  file timestamps under
     VAX/VMS.

     Raymond D. Gardner, who contributed replacement uncompression code that  on
     some systems is twice as fast as the original.

     Greg  Yachuk  and Andre Van Dalen, who independently modified MS-DOS zoo to
     support multivolume archives.  (This support is not yet  in  this	official
     release.)

AUTHOR
     Rahul Dhesi

7th Edition			  July 7, 1991				  ZOO(1)

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

home | help