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 sav-
       ings  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 recovered from damaged archives by skipping the dam-
       aged 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
       command letter followed by zero or more modifier	characters, and	Novice
       commands,  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
       maintain	 one  generation  of  each  file in an archive and to mark any
       older generation	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 prevent the number of stored generations	from exceeding
       the user-specified limit.

       Deleted files may be later undeleted.  Archives may be  packed  to  re-
       cover space occupied by deleted files.

       All commands assume that	the archive name ends with the characters .zoo
       unless 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
	      specified	all files are extracted.

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

       -print Equivalent  to  -extract	except that extracted data are sent to
	      standard 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
	      (possibly	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 com-
       mand 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 orig-
	      inal 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 detected no errors.

       n      Add new files only.  A specified file is added only if it	 isn't
	      already 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 proces-
	      sor 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  identi-
	      cally to the u command.

	      The  combination of the n	modifier with the u modifier or	u com-
	      mand 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  con-
	      tains  a	filename.  Under AmigaDOS and the **IX family, the en-
	      tire 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
	      follows 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
	      overwrite	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 subsequent files.  The O	modifier makes
	      zoo assume that files may	always be  overwritten.	  Neither  an-
	      swering  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 extracted 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.   Un-
	      less  this  modifier is used, zoo	will not overwrite a newer ex-
	      isting 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  de-
	      tected,  an  error message is sent both to standard error	and to
	      standard output.

       /      Extract to original pathname.  Any needed	directories  must  al-
	      ready  exist.  In	the absence of this modifier all files are ex-
	      tracted 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 num-
       ber,  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 ad-
       justed 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  re-
       peated  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 command is	analogous to the syntax	of the
       gl command, except that the A modifier is not applicable	to the gc com-
       mand.

       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	 multiple  generations.	  Generations can be re-enabled	at any
       time, though manipulation 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 decrease due	to compression	(labelled  CF  or  compression
	      factor).	 If  a	file  was  added to the	archive	in a different
	      timezone,	the difference 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 time-
	      zone 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  genera-
	      tion is specified	for an argument, only the requested generation
	      is  listed.   If a filename is specified ending with the genera-
	      tion 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  generation 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 argu-
	      ments 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	multi-
	      ple  archives  are to be listed, the L command must be used.  On
	      other systems (VAX/VMS, AmigaDOS,	MSDOS) on which	 wildcard  ex-
	      pansion  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
	      addition 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	 modi-
	      fiers to the l and L commands.

       In  addition  to	 the  general modifiers	described later, the following
       modifiers 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 es-
	      pecially useful with the L command, since	the result can be fur-
	      ther 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 in-
	      formation	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  num-
	      ber.

       1      This forces one filename to be listed per	line.  It is most use-
	      ful 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
       commands:

       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  com-
       mand.   With  the  modifier  A, the command serves to add or update the
       comment attached	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	created	with an	older version of zoo will result in an
       error  message requesting that the user first pack the archive with the
       P command.  This	reorganizes 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 re-
       flect the age of	the newest file	stored in it.	Should	the  timestamp
       ever be incorrect 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  re-
       named to	the name of the	original archive when packing is complete.

       Packing removes any garbage data	appended to an archive because of Xmo-
       dem  file  transfer  and	also recovers any wasted space remaining in an
       archive that has	been frequently	updated	or in which comments were  re-
       placed.	 Packing  also updates the format of any archive that was cre-
       ated 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
       addition	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 ob-
       tained, 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 command.  Applied to the archive list
	      command l, the c modifier	causes the listing of any comments at-
	      tached to	archived files.

	.     In conjunction with / or // this modifier	causes	any  extracted
	      pathname	beginning  with	 `/' to	be interpreted relative	to the
	      current directory, resulting in the possible creation of a  sub-
	      tree  rooted  at the current directory.  In conjunction with the
	      command P	the .  modifier	causes the packed archive to  be  cre-
	      ated  in the current directory.  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 se-
	      lection only of deleted files.

       f      Applied to the a and u commands,	the  f	modifier  causes  fast
	      archiving	 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 ac-
	      tion 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  con-
	      tents  are being listed, this modifier suppresses	any header and
	      trailer.	When a fast columnized 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.  FA-
	      TAL 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 fol-
       lowed by	a decimal integer without intervening spaces, and possibly  by
       a  comma	 and another 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 compen-
       sate for	this, the value	of n may be specified.	 This  value  is  also
       usually obtained	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 addition, 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 nota-
       tion "==>   95" indicates that the directory entry found	by fiz at  po-
       sition  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 actuality, 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 ar-
       tifact.

       In  this	 case, commands	to try giving to zoo might be x@2526,2587 (ex-
       tract 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 entry/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  exe-
       cuted on	an MS-DOS system for extraction, can be	extracted on non-MSDOS
       systems	using  zoo's damaged-archive recovery method using the @ modi-
       fier.

       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  selecting	files  to be added to an archive, wildcard conventions
       are as defined for the shell.  When  selecting  files  from  within  an
       archive,	wildcard handling is done by zoo as described below.

       Under  MS-DOS  and  AmigaDOS,  quoting of wildcards is not needed.  All
       wildcard	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
       characters.

       *      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  genera-
	      tion  number and are used	when selecting specific	generations of
	      archived files.  If no generation	character is used,  the	 file-
	      name  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	mecha-
	      nism.  If	no generation is specified following the : or ;	 char-
	      acter,  all  generations	of that	file will match.  As a special
	      case, a generation number	of 0 matches only the  latest  genera-
	      tion  of	a file,	while ^0 matches all generations of a file ex-
	      cept 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
       character,  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
       functionality and format	that will be familiar to users of other	 simi-
       lar archive utilities.  In keeping with this objective, the Novice com-
       mands  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 com-
       mands 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  or-
       thogonal.  This means that the user can select any combination of modi-
       fiers, and when they act	together, they will have the intuitively obvi-
       ous  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
       already-archived	 files	to  be	updated	if their disk copies have been
       modified, it is only necessary to add the u modifier, making  the  com-
       mand  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 modifiers 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  af-
       ter it is added to the archive, it is only necessary to add the M modi-
       fier 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 recover-
       ing space from any files	that are replaced, the command can be modified
       to auncfMP by adding the	P modifier that	causes packing.

       Similarly,  the	archive	 listing commands can be built up by combining
       modifiers.  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 informa-
       tion 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 informa-
       tion about multiple generations,	the modifiers 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 modi-
       fier 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 showing  any
       comment	attached to the	archive	as a whole.  If	in addition individual
       comments	attached to files are also needed, simply append the  c	 modi-
       fier  to	 the  command,	making it lfqmgAc.  The	above command will not
       show any	deleted	files, however;	 to see	them, use the d	modifier, mak-
       ing 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 protection 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 comments 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 ex-
       ample, 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 (enclosed in single quotes if necessary to pro-
       tect 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 with-
       out  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 gen-
       erations	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 genera-
       tion.   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 considered to be the	latest generation, and
       the file	stdio.h:5, even	if undeleted, will  no	longer	appear	in  an
       archive	listing	 unless	generation 5 (or every generation) is specifi-
       cally requested.	 This behavior will likely be improved in  future  re-
       leases 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
       possible	for zoo	to fail	to detect a full disk and hence	create an  in-
       valid archive.  This bug	will be	fixed in a future release.

       Files  with  generation counts that wrap	around from 65535 to 1 are not
       currently handled correctly.  If	a file's generation  count  reaches  a
       value close to 65535, it	should be manually set back down to a low num-
       ber.   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
       robust, because it interprets these to separate a filename from a  gen-
       eration 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.  (Previ-
       ous 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
       attributes 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 dou-
       ble  quotes.   For  this	 reason	if a command given to zoo on a VAX/VMS
       system includes any uppercase characters, it must be enclosed in	double
       quotes.	Under 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	 supplies  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 un-
       usual 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 oc-
       currence	of any of these	causes an exit status of 1.   Normal  termina-
       tion  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;  fur-
       thermore, 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, earlier 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 vio-
       lates 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 sup-
	      pression of header and trailer information, inclusion of	direc-
	      tory 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 individu-
	      ally 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  li-
	      brary 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
	      exists 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  in-
	      tegrity 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-
	      extracting  archives  created  for MS-DOS	systems	can now	be ex-
	      tracted 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 in-
	      sufficient disk space.

       -      (2.01) A bug was fixed that had sometimes	made it	impossible  to
	      selectively  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 at-
	      tempted 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
	      extraction.

       -      (2.1) On some systems, extraction	of files using the older  (de-
	      fault) 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  ex-
	      traction.

       -      (2.1)  The  default  archive-wide	generation limit, when genera-
	      tions 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.
       Availability  of	 the following systems was helpful in achieving	porta-
       bility: Paul Homchick's Compaq running Microport	System V/AT;  The  Es-
       kimo  BBS somewhere in Oregon running Xenix/68000; Greg Laskin's	system
       'gryphon' which is an Intel 310 running Xenix/286;  Ball	State  Univer-
       sity's  AT&T 3B2/300, UNIX PC, and VAX-11/785 (4.3BSD and VAX/VMS) sys-
       tems.  In addition J. Brian Waters provided feedback to	help  me  make
       the  code  compilable  on his Amiga using Manx/Aztec C.	The executable
       version 2.0 for MS-DOS is currently compiled with Borland's  Turbo  C++
       1.0.

       Thanks  are due to the following	people and many	others too numerous to
       mention.

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

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

       Bill Davidsen <davidsen@crdos1.crd.ge.com>, who provided	 numerous  im-
       provements  to  this manual, contributed	multiscreen help, and provided
       many useful 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 compres-
       sion code, which	I adapted for use in zoo.

       Randal  L. Barnes <rlb@skyler.mavd.honeywell.com>, who (with Randy Mag-
       nuson) 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  of-
       ficial 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+14.3.quarterly>

home | help