\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename zutils.info
@settitle Zutils Manual
@finalout
@c %**end of header

@set UPDATED 11 January 2011
@set VERSION 0.9

@dircategory Data Compression
@direntry
* Zutils: (zutils).             Utilities dealing with compressed files
@end direntry


@ifnothtml
@titlepage
@title Zutils
@subtitle Utilities dealing with compressed files
@subtitle for Zutils version @value{VERSION}, @value{UPDATED}
@author by Antonio Diaz Diaz

@page
@vskip 0pt plus 1filll
@end titlepage

@contents
@end ifnothtml

@node Top
@top

This manual is for Zutils (version @value{VERSION}, @value{UPDATED}).

@menu
* Introduction::        Purpose and features of zutils
* Zcat::                Concatenating compressed files
* Zcmp::                Comparing compressed files byte by byte
* Zdiff::               Comparing compressed files line by line
* Zgrep::               Searching inside compressed files
* Ztest::               Testing integrity of compressed files
* Problems::            Reporting bugs
* Concept Index::       Index of concepts
@end menu

@sp 1
Copyright @copyright{} 2008, 2009, 2010, 2011 Antonio Diaz Diaz.

This manual is free documentation: you have unlimited permission
to copy, distribute and modify it.


@node Introduction
@chapter Introduction
@cindex introduction

Zutils is a collection of utilities able to deal with any combination of
compressed and non-compressed files transparently. If any given file,
including standard input, is compressed, its uncompressed content is
used. Compressed files are decompressed on the fly; no temporary files
are created. These utilities are not wrapper scripts but safer and more
efficient C++ programs. In particular the @samp{--recursive} option is
very efficient in those utilities supporting it.

@noindent
The provided utilities are zcat, zcmp, zdiff, zgrep and ztest.@*
The supported compressors are bzip2, gzip, lzip and xz.

@sp 1
Numbers given as arguments to options (positions, sizes) may be followed
by a multiplier and an optional @samp{B} for "byte".

Table of SI and binary prefixes (unit multipliers):

@multitable {Prefix} {kilobyte  (10^3 = 1000)} {|} {Prefix} {kibibyte (2^10 = 1024)}
@item Prefix @tab Value               @tab | @tab Prefix @tab Value
@item k @tab kilobyte  (10^3 = 1000)  @tab | @tab Ki @tab kibibyte (2^10 = 1024)
@item M @tab megabyte  (10^6)         @tab | @tab Mi @tab mebibyte (2^20)
@item G @tab gigabyte  (10^9)         @tab | @tab Gi @tab gibibyte (2^30)
@item T @tab terabyte  (10^12)        @tab | @tab Ti @tab tebibyte (2^40)
@item P @tab petabyte  (10^15)        @tab | @tab Pi @tab pebibyte (2^50)
@item E @tab exabyte   (10^18)        @tab | @tab Ei @tab exbibyte (2^60)
@item Z @tab zettabyte (10^21)        @tab | @tab Zi @tab zebibyte (2^70)
@item Y @tab yottabyte (10^24)        @tab | @tab Yi @tab yobibyte (2^80)
@end multitable


@node Zcat
@chapter Zcat
@cindex zcat

Zcat copies each given file (@samp{-} means standard input), to standard
output. If any given file is compressed, its uncompressed content is
used. If a given file does not exist, and its name does not end with one
of the known extensions, zcat tries the compressed file names
corresponding to the supported compressors. If no files are specified,
data is read from standard input, decompressed if needed, and sent to
standard output. Data read from standard input must be of the same type;
all uncompressed or all compressed with the same compressor.

The format for running zcat is:

@example
zcat [@var{options}] [@var{files}]
@end example

@noindent
Exit status is 0 if no errors occurred, 1 otherwise.

Zcat supports the following options:

@table @samp
@item -h
@itemx --help
Print an informative help message describing the options and exit.

@item -V
@itemx --version
Print the version number of zcat on the standard output and exit.

@item -A
@itemx --show-all
Equivalent to @samp{-vET}.

@item -b
@itemx --number-nonblank
Number all nonblank output lines, starting with 1. The line count is
unlimited.

@item -e
Equivalent to @samp{-vE}.

@item -E
@itemx --show-ends
Print a @samp{$} after the end of each line.

@item -n
@itemx --number
Number all output lines, starting with 1. The line count is unlimited.

@item -q
@itemx --quiet
Quiet operation. Suppress all messages.

@item -r
@itemx --recursive
Operate recursively on directories.

@item -s
@itemx --squeeze-blank
Replace multiple adjacent blank lines with a single blank line.

@item -t
Equivalent to @samp{-vT}.

@item -T
@itemx --show-tabs
Print TAB characters as @samp{^I}.

@item -v
@itemx --show-nonprinting
Print control characters except for LF (newline) and TAB using @samp{^}
notation and precede characters larger than 127 with @samp{M-} (which
stands for "meta").

@item --verbose
Verbose mode. Show error messages.

@end table


@node Zcmp
@chapter Zcmp
@cindex zcmp

Zcmp compares two files (@samp{-} means standard input), and if they
differ, tells the first byte and line number where they differ. Bytes
and lines are numbered starting with 1. If any given file is compressed,
its uncompressed content is used. Compressed files are decompressed on
the fly; no temporary files are created.

The format for running zcmp is:

@example
zcmp [@var{options}] @var{file1} [@var{file2}]
@end example

@noindent
Compares @var{file1} to @var{file2}. If @var{file2} is omitted zcmp
tries the following:@*
If @var{file1} is compressed, compares @var{file1} to the file with the
corresponding decompressed file name (removes the extension from
@var{file1}).@*
If @var{file1} is not compressed, compares @var{file1} to the
uncompressed contents of @var{file1}.[bz2|gz|lz|xz] (the first one that
is found).@*
If no suitable file is found, compares @var{file1} to data read from
standard input.

@noindent
An exit status of 0 means no differences were found, 1 means some
differences were found, and 2 means trouble.

Zcmp supports the following options:

@table @samp
@item -h
@itemx --help
Print an informative help message describing the options and exit.

@item -V
@itemx --version
Print the version number of zcmp on the standard output and exit.

@item -b
@itemx --print-bytes
Print the differing bytes. Print control bytes as a @samp{^} followed by
a letter, and precede bytes larger than 127 with @samp{M-} (which stands
for "meta").

@item -i @var{size}
@itemx --ignore-initial=@var{size}
Ignore any differences in the first @var{size} bytes of the input files.
Treat files with fewer than @var{size} bytes as if they were empty. If
@var{size} is in the form @samp{@var{size1},@var{size2}}, ignore the
first @var{size1} bytes of the first input file and the first
@var{size2} bytes of the second input file.

@item -l
@itemx -v
@itemx --list
@itemx --verbose
Print the byte numbers (in decimal) and values (in octal) of all
differing bytes.

@item -n @var{count}
@itemx --bytes=@var{count}
Compare at most @var{count} input bytes.

@item -q
@itemx -s
@itemx --quiet
@itemx --silent
Do not print anything; only return an exit status indicating whether the
files differ.

@end table


@node Zdiff
@chapter Zdiff
@cindex zdiff

Zdiff compares two files (@samp{-} means standard input), and if they
differ, shows the differences line by line. If any given file is
compressed, its uncompressed content is used. Zdiff is a front end to
the diff program and has the limitation that messages from diff refer to
temporary filenames instead of those specified.

The format for running zdiff is:

@example
zdiff [@var{options}] @var{file1} [@var{file2}]
@end example

@noindent
Compares @var{file1} to @var{file2}. If @var{file2} is omitted zdiff
tries the following:@*
If @var{file1} is compressed, compares @var{file1} to the file with the
corresponding decompressed file name (removes the extension from
@var{file1}).@*
If @var{file1} is not compressed, compares @var{file1} to the
uncompressed contents of @var{file1}.[bz2|gz|lz|xz] (the first one that
is found).@*
If no suitable file is found, compares @var{file1} to data read from
standard input.

@noindent
An exit status of 0 means no differences were found, 1 means some
differences were found, and 2 means trouble.

Zdiff supports the following options:

@table @samp
@item -h
@itemx --help
Print an informative help message describing the options and exit.

@item -V
@itemx --version
Print the version number of zdiff on the standard output and exit.

@item -a
@itemx --text
Treat all files as text.

@item -b
@itemx --ignore-space-change
Ignore changes in the amount of white space.

@item -B
@itemx --ignore-blank-lines
Ignore changes whose lines are all blank.

@itemx -c
Use the context output format.

@item -C @var{n}
@itemx --context=@var{n}
Same as -c but use @var{n} lines of context.

@item -d
@itemx --minimal
Try hard to find a smaller set of changes.

@item -E
@itemx --ignore-tab-expansion
Ignore changes due to tab expansion.

@item -i
@itemx --ignore-case
Ignore case differences in file contents.

@item -p
@itemx --show-c-function
Show which C function each change is in.

@item -q
@itemx --brief
Output only whether files differ.

@item -s
@itemx --report-identical-files
Report when two files are identical.

@item -t
@itemx --expand-tabs
Expand tabs to spaces in output.

@item -T
@itemx --initial-tab
Make tabs line up by prepending a tab.

@item -u
Use the unified output format.

@item -U @var{n}
@itemx --unified=@var{n}
Same as -u but use @var{n} lines of context.

@item -w
@itemx --ignore-all-space
Ignore all white space.

@end table


@node Zgrep
@chapter Zgrep
@cindex zgrep

Zgrep is a front end to the grep program that allows transparent search
on any combination of compressed and non-compressed files. If any given
file is compressed, its uncompressed content is used. If a given file
does not exist, and its name does not end with one of the known
extensions, zgrep tries the compressed file names corresponding to the
supported compressors. If no files are specified, data is read from
standard input, decompressed if needed, and fed to grep. Data read from
standard input must be of the same type; all uncompressed or all
compressed with the same compressor.

The format for running zgrep is:

@example
zgrep [@var{options}] @var{pattern} [@var{files}]
@end example

@noindent
An exit status of 0 means at least one match was found, 1 means no
matches were found, and 2 means trouble.

Zgrep supports the following options:

@table @samp
@item --help
Print an informative help message describing the options and exit.

@item -V
@itemx --version
Print the version number of zgrep on the standard output and exit.

@item -a
@itemx --text
Treat all files as text.

@item -A @var{n}
@itemx --after-context=@var{n}
Print @var{n} lines of trailing context.

@item -b
@itemx --byte-offset
Print the byte offset of each line.

@item -B @var{n}
@itemx --before-context=@var{n}
Print @var{n} lines of leading context.

@item -c
@itemx --count
Only print a count of matching lines per file.

@item -C @var{n}
@itemx --context=@var{n}
Print @var{n} lines of output context.

@item -e @var{pattern}
@itemx --regexp=@var{pattern}
Use @var{pattern} as the pattern to match.

@item -E
@itemx --extended-regexp
Treat @var{pattern} as an extended regular expression.

@item -f @var{file}
@itemx --file=@var{file}
Obtain patterns from @var{file}, one per line.

@item -F
@itemx --fixed-strings
Treat @var{pattern} as a set of newline-separated strings.

@item -h
@itemx --no-filename
Suppress the prefixing filename on output.

@item -H
@itemx --with-filename
Print the filename for each match.

@item -i
@itemx --ignore-case
Ignore case distinctions.

@item -I
Ignore binary files.

@item -l
@itemx --files-with-matches
Only print names of files containing at least one match.

@item -L
@itemx --files-without-match
Only print names of files not containing any matches.

@item -m @var{n}
@itemx --max-count=@var{n}
Stop after @var{n} matches.

@item -n
@itemx --line-number
Prefix each matched line with its line number in the input file.

@item -o
@itemx --only-matching
Show only the part of matching lines that actually matches @var{pattern}.

@item -q
@itemx --quiet
Suppress all messages.

@item -r
@itemx --recursive
Operate recursively on directories.

@item -s
@itemx --no-messages
Suppress error messages.

@item -v
@itemx --invert-match
Select non-matching lines.

@item --verbose
Verbose mode. Show error messages.

@item -w
@itemx --word-regexp
Match only whole words.

@item -x
@itemx --line-regexp
Match only whole lines.

@end table


@node Ztest
@chapter Ztest
@cindex ztest

Ztest verifies the integrity of the specified compressed files.
Non-compressed files are ignored. If no files are specified, the
integrity of compressed data read from standard input is verified. Data
read from standard input must be all compressed with the same compressor.

The format for running ztest is:

@example
ztest [@var{options}] [@var{files}]
@end example

@noindent
The exit status is 0 if all files verify OK, 1 for environmental
problems (file not found, invalid flags, I/O errors, etc), 2 to indicate
a corrupt or invalid input file.

Ztest supports the following options:

@table @samp
@item -h
@itemx --help
Print an informative help message describing the options and exit.

@item -V
@itemx --version
Print the version number of ztest on the standard output and exit.

@item -q
@itemx --quiet
Quiet operation. Suppress all messages.

@item -r
@itemx --recursive
Operate recursively on directories.

@item -v
@itemx --verbose
Verbose mode. Show the verify status for each file processed.
Further -v's increase the verbosity level.

@end table


@node Problems
@chapter Reporting Bugs
@cindex bugs
@cindex getting help

There are probably bugs in zutils. There are certainly errors and
omissions in this manual. If you report them, they will get fixed. If
you don't, no one will ever know about them and they will remain unfixed
for all eternity, if not longer.

If you find a bug in zutils, please send electronic mail to
@email{zutils-bug@@nongnu.org}. Include the version number, which you can
find by running @w{@samp{zutils --version}}.


@node Concept Index
@unnumbered Concept Index

@printindex cp

@bye
