Adding upstream version 0.23.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
22f7f3575c
commit
9a8733dd3b
39 changed files with 2213 additions and 1444 deletions
617
doc/tarlz.texi
617
doc/tarlz.texi
|
@ -6,10 +6,10 @@
|
|||
@finalout
|
||||
@c %**end of header
|
||||
|
||||
@set UPDATED 5 January 2022
|
||||
@set VERSION 0.22
|
||||
@set UPDATED 23 September 2022
|
||||
@set VERSION 0.23
|
||||
|
||||
@dircategory Data Compression
|
||||
@dircategory Archiving
|
||||
@direntry
|
||||
* Tarlz: (tarlz). Archiver with multimember lzip compression
|
||||
@end direntry
|
||||
|
@ -96,9 +96,9 @@ The resulting multimember tar.lz archive can be decompressed in
|
|||
parallel, multiplying the decompression speed.
|
||||
|
||||
@item
|
||||
New members can be appended to the archive (by removing the EOF
|
||||
member), and unwanted members can be deleted from the archive. Just
|
||||
like an uncompressed tar archive.
|
||||
New members can be appended to the archive (by removing the
|
||||
end-of-archive member), and unwanted members can be deleted from the
|
||||
archive. Just like an uncompressed tar archive.
|
||||
|
||||
@item
|
||||
It is a safe POSIX-style backup format. In case of corruption, tarlz
|
||||
|
@ -111,7 +111,7 @@ lziprecover can be used to recover some of the damaged members.
|
|||
@item
|
||||
A multimember tar.lz archive is usually smaller than the corresponding
|
||||
solidly compressed tar.gz archive, except when individually
|
||||
compressing files smaller than about 32 KiB.
|
||||
compressing files smaller than about @w{32 KiB}.
|
||||
@end itemize
|
||||
|
||||
Tarlz protects the extended records with a Cyclic Redundancy Check (CRC) in
|
||||
|
@ -133,21 +133,28 @@ the format of the archive is compatible with tarlz.
|
|||
The format for running tarlz is:
|
||||
|
||||
@example
|
||||
tarlz [@var{options}] [@var{files}]
|
||||
tarlz @var{operation} [@var{options}] [@var{files}]
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
All operations except @samp{--concatenate} and @samp{--compress} operate on
|
||||
whole trees if any @var{file} is a directory. All operations except
|
||||
@samp{--compress} overwrite output files without warning.
|
||||
@samp{--compress} overwrite output files without warning. If no archive is
|
||||
specified, tarlz tries to read it from standard input or write it to
|
||||
standard output. Tarlz refuses to read archive data from a terminal or write
|
||||
archive data to a terminal. Tarlz detects when the archive being created or
|
||||
enlarged is among the files to be archived, appended, or concatenated, and
|
||||
skips it.
|
||||
|
||||
On archive creation or appending tarlz archives the files specified, but
|
||||
removes from member names any leading and trailing slashes and any file name
|
||||
prefixes containing a @samp{..} component. On extraction, leading and
|
||||
trailing slashes are also removed from member names, and archive members
|
||||
containing a @samp{..} component in the file name are skipped. Tarlz detects
|
||||
when the archive being created or enlarged is among the files to be dumped,
|
||||
appended or concatenated, and skips it.
|
||||
Tarlz does not use absolute file names nor file names above the current
|
||||
working directory (perhaps changed by option @samp{-C}). On archive creation
|
||||
or appending tarlz archives the files specified, but removes from member
|
||||
names any leading and trailing slashes and any file name prefixes containing
|
||||
a @samp{..} component. On extraction, leading and trailing slashes are also
|
||||
removed from member names, and archive members containing a @samp{..}
|
||||
component in the file name are skipped. Tarlz does not follow symbolic links
|
||||
during extraction; not even symbolic links replacing intermediate
|
||||
directories.
|
||||
|
||||
On extraction and listing, tarlz removes leading @samp{./} strings from
|
||||
member names in the archive or given in the command line, so that
|
||||
|
@ -158,11 +165,7 @@ If several compression levels or @samp{--*solid} options are given, the last
|
|||
setting is used. For example @w{@samp{-9 --solid --uncompressed -1}} is
|
||||
equivalent to @w{@samp{-1 --solid}}.
|
||||
|
||||
tarlz supports the following
|
||||
@uref{http://www.nongnu.org/arg-parser/manual/arg_parser_manual.html#Argument-syntax,,options}:
|
||||
@ifnothtml
|
||||
@xref{Argument syntax,,,arg_parser}.
|
||||
@end ifnothtml
|
||||
tarlz supports the following operations:
|
||||
|
||||
@table @code
|
||||
@item --help
|
||||
|
@ -180,40 +183,22 @@ specified with the option @samp{-f}, the input archives are concatenated to
|
|||
standard output. All the archives involved must be regular (seekable) files,
|
||||
and must be either all compressed or all uncompressed. Compressed and
|
||||
uncompressed archives can't be mixed. Compressed archives must be
|
||||
multimember lzip files with the two end-of-file blocks plus any zero padding
|
||||
contained in the last lzip member of each archive. The intermediate
|
||||
end-of-file blocks are removed as each new archive is concatenated. If the
|
||||
archive is uncompressed, tarlz parses and skips tar headers until it finds
|
||||
the end-of-file blocks. Exit with status 0 without modifying the archive if
|
||||
multimember lzip files with the two end-of-archive blocks plus any zero
|
||||
padding contained in the last lzip member of each archive. The intermediate
|
||||
end-of-archive blocks are removed as each new archive is concatenated. If
|
||||
the archive is uncompressed, tarlz parses tar headers until it finds the
|
||||
end-of-archive blocks. Exit with status 0 without modifying the archive if
|
||||
no @var{files} have been specified.
|
||||
|
||||
@anchor{--data-size}
|
||||
@item -B @var{bytes}
|
||||
@itemx --data-size=@var{bytes}
|
||||
Set target size of input data blocks for the option @samp{--bsolid}.
|
||||
@xref{--bsolid}. Valid values range from @w{8 KiB} to @w{1 GiB}. Default
|
||||
value is two times the dictionary size, except for option @samp{-0} where it
|
||||
defaults to @w{1 MiB}. @xref{Minimum archive sizes}.
|
||||
Concatenating archives containing files in common results in two or more tar
|
||||
members with the same name in the resulting archive, which may produce
|
||||
nondeterministic behavior during multi-threaded extraction.
|
||||
@xref{mt-extraction}.
|
||||
|
||||
@item -c
|
||||
@itemx --create
|
||||
Create a new archive from @var{files}.
|
||||
|
||||
@item -C @var{dir}
|
||||
@itemx --directory=@var{dir}
|
||||
Change to directory @var{dir}. When creating or appending, the position of
|
||||
each @samp{-C} option in the command line is significant; it will change the
|
||||
current working directory for the following @var{files} until a new
|
||||
@samp{-C} option appears in the command line. When extracting or comparing,
|
||||
all the @samp{-C} options are executed in sequence before reading the
|
||||
archive. Listing ignores any @samp{-C} options specified. @var{dir} is
|
||||
relative to the then current working directory, perhaps changed by a
|
||||
previous @samp{-C} option.
|
||||
|
||||
Note that a process can only have one current working directory (CWD).
|
||||
Therefore multi-threading can't be used to create an archive if a @samp{-C}
|
||||
option appears after a relative file name in the command line.
|
||||
|
||||
@item -d
|
||||
@itemx --diff
|
||||
Compare and report differences between archive and file system. For each tar
|
||||
|
@ -228,10 +213,6 @@ be used in combination with @samp{--diff} when absolute file names were used
|
|||
on archive creation: @w{@samp{tarlz -C / -d}}. Alternatively, tarlz may be
|
||||
run from the root directory to perform the comparison.
|
||||
|
||||
@item --ignore-ids
|
||||
Make @samp{--diff} ignore differences in owner and group IDs. This option is
|
||||
useful when comparing an @samp{--anonymous} archive.
|
||||
|
||||
@item --delete
|
||||
Delete files and directories from an archive in place. It currently can
|
||||
delete only from uncompressed archives and from archives with files
|
||||
|
@ -249,12 +230,109 @@ To delete a directory without deleting the files under it, use
|
|||
may be dangerous. A corrupt archive, a power cut, or an I/O error may cause
|
||||
data loss.
|
||||
|
||||
@item --exclude=@var{pattern}
|
||||
Exclude files matching a shell pattern like @samp{*.o}. A file is considered
|
||||
to match if any component of the file name matches. For example, @samp{*.o}
|
||||
matches @samp{foo.o}, @samp{foo.o/bar} and @samp{foo/bar.o}. If
|
||||
@var{pattern} contains a @samp{/}, it matches a corresponding @samp{/} in
|
||||
the file name. For example, @samp{foo/*.o} matches @samp{foo/bar.o}.
|
||||
@item -r
|
||||
@itemx --append
|
||||
Append files to the end of an archive. The archive must be a regular
|
||||
(seekable) file either compressed or uncompressed. Compressed members can't
|
||||
be appended to an uncompressed archive, nor vice versa. If the archive is
|
||||
compressed, it must be a multimember lzip file with the two end-of-archive
|
||||
blocks plus any zero padding contained in the last lzip member of the
|
||||
archive. It is possible to append files to an archive with a different
|
||||
compression granularity. Appending works as follows; first the
|
||||
end-of-archive blocks are removed, then the new members are appended, and
|
||||
finally two new end-of-archive blocks are appended to the archive. If the
|
||||
archive is uncompressed, tarlz parses and skips tar headers until it finds
|
||||
the end-of-archive blocks. Exit with status 0 without modifying the archive
|
||||
if no @var{files} have been specified.
|
||||
|
||||
Appending files already present in the archive results in two or more tar
|
||||
members with the same name, which may produce nondeterministic behavior
|
||||
during multi-threaded extraction. @xref{mt-extraction}.
|
||||
|
||||
@item -t
|
||||
@itemx --list
|
||||
List the contents of an archive. If @var{files} are given, list only the
|
||||
@var{files} given.
|
||||
|
||||
@item -x
|
||||
@itemx --extract
|
||||
Extract files from an archive. If @var{files} are given, extract only the
|
||||
@var{files} given. Else extract all the files in the archive. To extract a
|
||||
directory without extracting the files under it, use
|
||||
@w{@samp{tarlz -xf foo --exclude='dir/*' dir}}. Tarlz removes files and
|
||||
empty directories unconditionally before extracting over them. Other than
|
||||
that, it will not make any special effort to extract a file over an
|
||||
incompatible type of file. For example, extracting a file over a non-empty
|
||||
directory will usually fail.
|
||||
|
||||
@item -z
|
||||
@itemx --compress
|
||||
Compress existing POSIX tar archives aligning the lzip members to the tar
|
||||
members with choice of granularity (---bsolid by default, ---dsolid works
|
||||
like ---asolid). The input archives are kept unchanged. Existing compressed
|
||||
archives are not overwritten. A hyphen @samp{-} used as the name of an input
|
||||
archive reads from standard input and writes to standard output (unless the
|
||||
option @samp{--output} is used). Tarlz can be used as compressor for GNU tar
|
||||
using a command like @w{@samp{tar -c -Hustar foo | tarlz -z -o foo.tar.lz}}.
|
||||
Note that tarlz only works reliably on archives without global headers, or
|
||||
with global headers whose content can be ignored.
|
||||
|
||||
The compression is reversible, including any garbage present after the
|
||||
end-of-archive blocks. Tarlz stops parsing after the first end-of-archive
|
||||
block is found, and then compresses the rest of the archive. Unless solid
|
||||
compression is requested, the end-of-archive blocks are compressed in a lzip
|
||||
member separated from the preceding members and from any non-zero garbage
|
||||
following the end-of-archive blocks. @samp{--compress} implies plzip
|
||||
argument style, not tar style. Each input archive is compressed to a file
|
||||
with the extension @samp{.lz} added unless the option @samp{--output} is
|
||||
used. When @samp{--output} is used, only one input archive can be specified.
|
||||
@samp{-f} can't be used with @samp{--compress}.
|
||||
|
||||
@item --check-lib
|
||||
Compare the
|
||||
@uref{http://www.nongnu.org/lzip/manual/lzlib_manual.html#Library-version,,version of lzlib}
|
||||
used to compile tarlz with the version actually being used at run time and
|
||||
exit. Report any differences found. Exit with error status 1 if differences
|
||||
are found. A mismatch may indicate that lzlib is not correctly installed or
|
||||
that a different version of lzlib has been installed after compiling tarlz.
|
||||
Exit with error status 2 if LZ_API_VERSION and LZ_version_string don't
|
||||
match. @w{@samp{tarlz -v --check-lib}} shows the version of lzlib being used
|
||||
and the value of LZ_API_VERSION (if defined).
|
||||
@ifnothtml
|
||||
@xref{Library version,,,lzlib}.
|
||||
@end ifnothtml
|
||||
|
||||
@end table
|
||||
|
||||
tarlz supports the following
|
||||
@uref{http://www.nongnu.org/arg-parser/manual/arg_parser_manual.html#Argument-syntax,,options}:
|
||||
@ifnothtml
|
||||
@xref{Argument syntax,,,arg_parser}.
|
||||
@end ifnothtml
|
||||
|
||||
@table @code
|
||||
@anchor{--data-size}
|
||||
@item -B @var{bytes}
|
||||
@itemx --data-size=@var{bytes}
|
||||
Set target size of input data blocks for the option @samp{--bsolid}.
|
||||
@xref{--bsolid}. Valid values range from @w{8 KiB} to @w{1 GiB}. Default
|
||||
value is two times the dictionary size, except for option @samp{-0} where it
|
||||
defaults to @w{1 MiB}. @xref{Minimum archive sizes}.
|
||||
|
||||
@item -C @var{dir}
|
||||
@itemx --directory=@var{dir}
|
||||
Change to directory @var{dir}. When creating or appending, the position of
|
||||
each @samp{-C} option in the command line is significant; it will change the
|
||||
current working directory for the following @var{files} until a new
|
||||
@samp{-C} option appears in the command line. When extracting or comparing,
|
||||
all the @samp{-C} options are executed in sequence before reading the
|
||||
archive. Listing ignores any @samp{-C} options specified. @var{dir} is
|
||||
relative to the then current working directory, perhaps changed by a
|
||||
previous @samp{-C} option.
|
||||
|
||||
Note that a process can only have one current working directory (CWD).
|
||||
Therefore multi-threading can't be used to create an archive if a @samp{-C}
|
||||
option appears after a relative file name in the command line.
|
||||
|
||||
@item -f @var{archive}
|
||||
@itemx --file=@var{archive}
|
||||
|
@ -266,14 +344,6 @@ argument reads from standard input or writes to standard output.
|
|||
Follow symbolic links during archive creation, appending or comparison.
|
||||
Archive or compare the files they point to instead of the links themselves.
|
||||
|
||||
@item --mtime=@var{date}
|
||||
When creating or appending, use @var{date} as the modification time for
|
||||
files added to the archive instead of their actual modification times. The
|
||||
value of @var{date} may be either @samp{@@} followed by the number of
|
||||
seconds since the epoch, or a date in format @w{@samp{YYYY-MM-DD HH:MM:SS}},
|
||||
or the name of an existing file starting with @samp{.} or @samp{/}. In the
|
||||
latter case, the modification time of that file is used.
|
||||
|
||||
@item -n @var{n}
|
||||
@itemx --threads=@var{n}
|
||||
Set the number of (de)compression threads, overriding the system's default.
|
||||
|
@ -305,64 +375,11 @@ permissions specified in the archive.
|
|||
@itemx --quiet
|
||||
Quiet operation. Suppress all messages.
|
||||
|
||||
@item -r
|
||||
@itemx --append
|
||||
Append files to the end of an archive. The archive must be a regular
|
||||
(seekable) file either compressed or uncompressed. Compressed members can't
|
||||
be appended to an uncompressed archive, nor vice versa. If the archive is
|
||||
compressed, it must be a multimember lzip file with the two end-of-file
|
||||
blocks plus any zero padding contained in the last lzip member of the
|
||||
archive. It is possible to append files to an archive with a different
|
||||
compression granularity. Appending works as follows; first the end-of-file
|
||||
blocks are removed, then the new members are appended, and finally two new
|
||||
end-of-file blocks are appended to the archive. If the archive is
|
||||
uncompressed, tarlz parses and skips tar headers until it finds the
|
||||
end-of-file blocks. Exit with status 0 without modifying the archive if no
|
||||
@var{files} have been specified.
|
||||
|
||||
@item -t
|
||||
@itemx --list
|
||||
List the contents of an archive. If @var{files} are given, list only the
|
||||
@var{files} given.
|
||||
|
||||
@item -v
|
||||
@itemx --verbose
|
||||
Verbosely list files processed. Further -v's (up to 4) increase the
|
||||
verbosity level.
|
||||
|
||||
@item -x
|
||||
@itemx --extract
|
||||
Extract files from an archive. If @var{files} are given, extract only the
|
||||
@var{files} given. Else extract all the files in the archive. To extract a
|
||||
directory without extracting the files under it, use
|
||||
@w{@samp{tarlz -xf foo --exclude='dir/*' dir}}. Tarlz will not make any
|
||||
special effort to extract a file over an incompatible type of file. For
|
||||
example, extracting a link over a directory will usually fail. (Principle of
|
||||
least surprise).
|
||||
|
||||
@item -z
|
||||
@itemx --compress
|
||||
Compress existing POSIX tar archives aligning the lzip members to the tar
|
||||
members with choice of granularity (---bsolid by default, ---dsolid works
|
||||
like ---asolid). The input archives are kept unchanged. Existing compressed
|
||||
archives are not overwritten. A hyphen @samp{-} used as the name of an input
|
||||
archive reads from standard input and writes to standard output (unless the
|
||||
option @samp{--output} is used). Tarlz can be used as compressor for GNU tar
|
||||
using a command like @w{@samp{tar -c -Hustar foo | tarlz -z -o foo.tar.lz}}.
|
||||
Note that tarlz only works reliably on archives without global headers, or
|
||||
with global headers whose content can be ignored.
|
||||
|
||||
The compression is reversible, including any garbage present after the EOF
|
||||
blocks. Tarlz stops parsing after the first EOF block is found, and then
|
||||
compresses the rest of the archive. Unless solid compression is requested,
|
||||
the EOF blocks are compressed in a lzip member separated from the preceding
|
||||
members and from any non-zero garbage following the EOF blocks.
|
||||
@samp{--compress} implies plzip argument style, not tar style. Each input
|
||||
archive is compressed to a file with the extension @samp{.lz} added unless
|
||||
the option @samp{--output} is used. When @samp{--output} is used, only one
|
||||
input archive can be specified. @samp{-f} can't be used with
|
||||
@samp{--compress}.
|
||||
|
||||
@item -0 .. -9
|
||||
Set the compression level for @samp{--create}, @samp{--append}, and
|
||||
@samp{--compress}. The default compression level is @samp{-6}. Like lzip,
|
||||
|
@ -392,7 +409,7 @@ appended to an uncompressed archive, nor vice versa.
|
|||
@item --asolid
|
||||
When creating or appending to a compressed archive, use appendable solid
|
||||
compression. All the files being added to the archive are compressed into a
|
||||
single lzip member, but the end-of-file blocks are compressed into a
|
||||
single lzip member, but the end-of-archive blocks are compressed into a
|
||||
separate lzip member. This creates a solidly compressed appendable archive.
|
||||
Solid archives can't be created nor decoded in parallel.
|
||||
|
||||
|
@ -405,58 +422,85 @@ compressed data block must contain an integer number of tar members. Block
|
|||
compression is the default because it improves compression ratio for
|
||||
archives with many files smaller than the block size. This option allows
|
||||
tarlz revert to default behavior if, for example, it is invoked through an
|
||||
alias like @samp{tar='tarlz --solid'}. @xref{--data-size}, to set the target
|
||||
block size.
|
||||
alias like @w{@samp{tar='tarlz --solid'}}. @xref{--data-size}, to set the
|
||||
target block size.
|
||||
|
||||
@item --dsolid
|
||||
When creating or appending to a compressed archive, compress each file
|
||||
specified in the command line separately in its own lzip member, and use
|
||||
solid compression for each directory specified in the command line. The
|
||||
end-of-file blocks are compressed into a separate lzip member. This creates
|
||||
a compressed appendable archive with a separate lzip member for each file or
|
||||
top-level directory specified.
|
||||
end-of-archive blocks are compressed into a separate lzip member. This
|
||||
creates a compressed appendable archive with a separate lzip member for each
|
||||
file or top-level directory specified.
|
||||
|
||||
@item --no-solid
|
||||
When creating or appending to a compressed archive, compress each file
|
||||
separately in its own lzip member. The end-of-file blocks are compressed
|
||||
separately in its own lzip member. The end-of-archive blocks are compressed
|
||||
into a separate lzip member. This creates a compressed appendable archive
|
||||
with a lzip member for each file.
|
||||
|
||||
@item --solid
|
||||
When creating or appending to a compressed archive, use solid compression.
|
||||
The files being added to the archive, along with the end-of-file blocks, are
|
||||
compressed into a single lzip member. The resulting archive is not
|
||||
The files being added to the archive, along with the end-of-archive blocks,
|
||||
are compressed into a single lzip member. The resulting archive is not
|
||||
appendable. No more files can be later appended to the archive. Solid
|
||||
archives can't be created nor decoded in parallel.
|
||||
|
||||
@item --anonymous
|
||||
Equivalent to @samp{--owner=root --group=root}.
|
||||
Equivalent to @w{@samp{--owner=root --group=root}}.
|
||||
|
||||
@item --owner=@var{owner}
|
||||
When creating or appending, use @var{owner} for files added to the
|
||||
archive. If @var{owner} is not a valid user name, it is decoded as a
|
||||
decimal numeric user ID.
|
||||
When creating or appending, use @var{owner} for files added to the archive.
|
||||
If @var{owner} is not a valid user name, it is decoded as a decimal numeric
|
||||
user ID.
|
||||
|
||||
@item --group=@var{group}
|
||||
When creating or appending, use @var{group} for files added to the
|
||||
archive. If @var{group} is not a valid group name, it is decoded as a
|
||||
decimal numeric group ID.
|
||||
When creating or appending, use @var{group} for files added to the archive.
|
||||
If @var{group} is not a valid group name, it is decoded as a decimal numeric
|
||||
group ID.
|
||||
|
||||
@item --exclude=@var{pattern}
|
||||
Exclude files matching a shell pattern like @samp{*.o}. A file is considered
|
||||
to match if any component of the file name matches. For example, @samp{*.o}
|
||||
matches @samp{foo.o}, @samp{foo.o/bar} and @samp{foo/bar.o}. If
|
||||
@var{pattern} contains a @samp{/}, it matches a corresponding @samp{/} in
|
||||
the file name. For example, @samp{foo/*.o} matches @samp{foo/bar.o}.
|
||||
Multiple @samp{--exclude} options can be specified.
|
||||
|
||||
@item --ignore-ids
|
||||
Make @samp{--diff} ignore differences in owner and group IDs. This option is
|
||||
useful when comparing an @samp{--anonymous} archive.
|
||||
|
||||
@item --ignore-overflow
|
||||
Make @samp{--diff} ignore differences in mtime caused by overflow on 32-bit
|
||||
systems with a 32-bit time_t.
|
||||
|
||||
@item --keep-damaged
|
||||
Don't delete partially extracted files. If a decompression error happens
|
||||
while extracting a file, keep the partial data extracted. Use this option to
|
||||
recover as much data as possible from each damaged member. It is recommended
|
||||
to run tarlz in single-threaded mode (--threads=0) when using this option.
|
||||
to run tarlz in single-threaded mode (---threads=0) when using this option.
|
||||
|
||||
@item --missing-crc
|
||||
Exit with error status 2 if the CRC of the extended records is missing.
|
||||
When this option is used, tarlz detects any corruption in the extended
|
||||
records (only limited by CRC collisions). But note that a corrupt
|
||||
@samp{GNU.crc32} keyword, for example @samp{GNU.crc33}, is reported as a
|
||||
missing CRC instead of as a corrupt record. This misleading
|
||||
@samp{Missing CRC} message is the consequence of a flaw in the POSIX pax
|
||||
format; i.e., the lack of a mandatory check sequence in the extended
|
||||
records. @xref{crc32}.
|
||||
Exit with error status 2 if the CRC of the extended records is missing. When
|
||||
this option is used, tarlz detects any corruption in the extended records
|
||||
(only limited by CRC collisions). But note that a corrupt @samp{GNU.crc32}
|
||||
keyword, for example @samp{GNU.crc33}, is reported as a missing CRC instead
|
||||
of as a corrupt record. This misleading @w{@samp{Missing CRC}} message is
|
||||
the consequence of a flaw in the POSIX pax format; i.e., the lack of a
|
||||
mandatory check sequence of the extended records. @xref{crc32}.
|
||||
|
||||
@item --mtime=@var{date}
|
||||
When creating or appending, use @var{date} as the modification time for
|
||||
files added to the archive instead of their actual modification times. The
|
||||
value of @var{date} may be either @samp{@@} followed by the number of
|
||||
seconds since (or before) the epoch, or a date in format
|
||||
@w{@samp{[-]YYYY-MM-DD HH:MM:SS}} or @samp{[-]YYYY-MM-DDTHH:MM:SS}, or the
|
||||
name of an existing reference file starting with @samp{.} or @samp{/} whose
|
||||
modification time is used. The time of day @samp{HH:MM:SS} in the date
|
||||
format is optional and defaults to @samp{00:00:00}. The epoch is
|
||||
@w{@samp{1970-01-01 00:00:00 UTC}}. Negative seconds or years define a
|
||||
modification time before the epoch.
|
||||
|
||||
@item --out-slots=@var{n}
|
||||
Number of @w{1 MiB} output packets buffered per worker thread during
|
||||
|
@ -465,20 +509,6 @@ number of packets may increase compression speed if the files being archived
|
|||
are larger than @w{64 MiB} compressed, but requires more memory. Valid
|
||||
values range from 1 to 1024. The default value is 64.
|
||||
|
||||
@item --check-lib
|
||||
Compare the
|
||||
@uref{http://www.nongnu.org/lzip/manual/lzlib_manual.html#Library-version,,version of lzlib}
|
||||
used to compile tarlz with the version actually being used at run time and
|
||||
exit. Report any differences found. Exit with error status 1 if differences
|
||||
are found. A mismatch may indicate that lzlib is not correctly installed or
|
||||
that a different version of lzlib has been installed after compiling tarlz.
|
||||
Exit with error status 2 if LZ_API_VERSION and LZ_version_string don't
|
||||
match. @w{@samp{tarlz -v --check-lib}} shows the version of lzlib being used
|
||||
and the value of LZ_API_VERSION (if defined).
|
||||
@ifnothtml
|
||||
@xref{Library version,,,lzlib}.
|
||||
@end ifnothtml
|
||||
|
||||
@item --warn-newer
|
||||
During archive creation, warn if any file being archived has a modification
|
||||
time newer than the archive creation time. This option may slow archive
|
||||
|
@ -496,10 +526,10 @@ keyword appearing in the same block of extended records.
|
|||
|
||||
@end table
|
||||
|
||||
Exit status: 0 for a normal exit, 1 for environmental problems (file not
|
||||
found, files differ, invalid flags, I/O errors, etc), 2 to indicate a
|
||||
corrupt or invalid input file, 3 for an internal consistency error (e.g. bug)
|
||||
which caused tarlz to panic.
|
||||
Exit status: 0 for a normal exit, 1 for environmental problems
|
||||
(file not found, files differ, invalid command line options, I/O errors,
|
||||
etc), 2 to indicate a corrupt or invalid input file, 3 for an internal
|
||||
consistency error (e.g., bug) which caused tarlz to panic.
|
||||
|
||||
|
||||
@node Portable character set
|
||||
|
@ -518,13 +548,7 @@ The last three characters are the period, underscore, and hyphen-minus
|
|||
characters, respectively.
|
||||
|
||||
File names are identifiers. Therefore, archiving works better when file
|
||||
names use only the portable character set without spaces added. Unicode is
|
||||
for human consumption. It should be
|
||||
@uref{http://www.gnu.org/software/moe/manual/moe_manual.html#why-not-Unicode,,avoided}
|
||||
in computing environments, specially in file names.
|
||||
@ifnothtml
|
||||
@xref{why not Unicode,,,moe}.
|
||||
@end ifnothtml
|
||||
names use only the portable character set without spaces added.
|
||||
|
||||
|
||||
@node File format
|
||||
|
@ -552,29 +576,30 @@ bytes (for example 512).
|
|||
|
||||
@sp 1
|
||||
A tar.lz file consists of a series of lzip members (compressed data sets).
|
||||
The members simply appear one after another in the file, with no
|
||||
additional information before, between, or after them.
|
||||
The members simply appear one after another in the file, with no additional
|
||||
information before, between, or after them.
|
||||
|
||||
Each lzip member contains one or more tar members in a simplified POSIX
|
||||
pax interchange format. The only pax typeflag value supported by tarlz
|
||||
(in addition to the typeflag values defined by the ustar format) is
|
||||
@samp{x}. The pax format is an extension on top of the ustar format that
|
||||
removes the size limitations of the ustar format.
|
||||
Each lzip member contains one or more tar members in a simplified POSIX pax
|
||||
interchange format. The only pax typeflag value supported by tarlz (in
|
||||
addition to the typeflag values defined by the ustar format) is @samp{x}.
|
||||
The pax format is an extension on top of the ustar format that removes the
|
||||
size limitations of the ustar format.
|
||||
|
||||
Each tar member contains one file archived, and is represented by the
|
||||
following sequence:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
An optional extended header block with extended header records. This
|
||||
header block is of the form described in pax header block, with a
|
||||
typeflag value of @samp{x}. The extended header records are included as
|
||||
the data for this header block.
|
||||
An optional extended header block followed by one or more blocks that
|
||||
contain the extended header records as if they were the contents of a file;
|
||||
i.e., the extended header records are included as the data for this header
|
||||
block. This header block is of the form described in pax header block, with
|
||||
a typeflag value of @samp{x}.
|
||||
|
||||
@item
|
||||
A header block in ustar format that describes the file. Any fields
|
||||
defined in the preceding optional extended header records override the
|
||||
associated fields in this header block for this file.
|
||||
A header block in ustar format that describes the file. Any fields defined
|
||||
in the preceding optional extended header records override the associated
|
||||
fields in this header block for this file.
|
||||
|
||||
@item
|
||||
Zero or more blocks that contain the contents of the file.
|
||||
|
@ -586,9 +611,11 @@ is split over two or more lzip members, the archive must be decoded
|
|||
sequentially. @xref{Multi-threaded decoding}.
|
||||
|
||||
At the end of the archive file there are two 512-byte blocks filled with
|
||||
binary zeros, interpreted as an end-of-archive indicator. These EOF
|
||||
blocks are either compressed in a separate lzip member or compressed
|
||||
along with the tar members contained in the last lzip member.
|
||||
binary zeros, interpreted as an end-of-archive indicator. These EOA blocks
|
||||
are either compressed in a separate lzip member or compressed along with the
|
||||
tar members contained in the last lzip member. For a compressed archive to
|
||||
be recognized by tarlz as appendable, the last lzip member must contain
|
||||
between 512 and 32256 zeros alone.
|
||||
|
||||
The diagram below shows the correspondence between each tar member (formed
|
||||
by one or two headers plus optional data) in the tar archive and each
|
||||
|
@ -602,7 +629,7 @@ used:
|
|||
@verbatim
|
||||
tar
|
||||
+========+======+=================+===============+========+======+========+
|
||||
| header | data | extended header | extended data | header | data | EOF |
|
||||
| header | data | extended header | extended data | header | data | EOA |
|
||||
+========+======+=================+===============+========+======+========+
|
||||
|
||||
tar.lz
|
||||
|
@ -620,7 +647,7 @@ Similarly, if several records with the same keyword appear in the same
|
|||
block of extended records, only the last record for the repeated keyword
|
||||
takes effect. The other records for the repeated keyword are ignored.@*
|
||||
A global header inserted between an extended header and an ustar header.@*
|
||||
An extended header just before the EOF blocks.
|
||||
An extended header just before the end-of-archive blocks.
|
||||
@end ignore
|
||||
|
||||
@sp 1
|
||||
|
@ -635,7 +662,7 @@ archive extraction. @xref{flawed-compat}.
|
|||
|
||||
The pax extended header data consists of one or more records, each of
|
||||
them constructed as follows:@*
|
||||
@samp{"%d %s=%s\n", <length>, <keyword>, <value>}
|
||||
@w{@samp{"%d %s=%s\n", <length>, <keyword>, <value>}}
|
||||
|
||||
The fields <length> and <keyword> in the record must be limited to the
|
||||
portable character set (@pxref{Portable character set}). The field <length>
|
||||
|
@ -647,25 +674,53 @@ space, equal-sign, and newline.
|
|||
These are the <keyword> values currently supported by tarlz:
|
||||
|
||||
@table @code
|
||||
@item atime
|
||||
The signed decimal representation of the access time of the following file
|
||||
in seconds since (or before) the epoch, obtained from the function
|
||||
@samp{stat}. The atime record is created only for files with a modification
|
||||
time outside of the ustar range. @xref{ustar-mtime}.
|
||||
|
||||
@item gid
|
||||
The unsigned decimal representation of the group ID of the group that owns
|
||||
the following file. The gid record is created only for files with a group ID
|
||||
greater than 2_097_151 (octal 7777777). @xref{ustar-uid-gid}.
|
||||
|
||||
@item linkpath
|
||||
The pathname of a link being created to another file, of any type,
|
||||
The file name of a link being created to another file, of any type,
|
||||
previously archived. This record overrides the field @samp{linkname} in the
|
||||
following ustar header block. The following ustar header block
|
||||
determines the type of link created. If typeflag of the following header
|
||||
block is 1, it will be a hard link. If typeflag is 2, it will be a
|
||||
symbolic link and the linkpath value will be used as the contents of the
|
||||
symbolic link.
|
||||
following ustar header block. The following ustar header block determines
|
||||
the type of link created. If typeflag of the following header block is 1, it
|
||||
will be a hard link. If typeflag is 2, it will be a symbolic link and the
|
||||
linkpath value will be used as the contents of the symbolic link. The
|
||||
linkpath record is created only for links with a link name that does not fit
|
||||
in the space provided by the ustar header.
|
||||
|
||||
@item mtime
|
||||
The signed decimal representation of the modification time of the following
|
||||
file in seconds since (or before) the epoch, obtained from the function
|
||||
@samp{stat}. This record overrides the field @samp{mtime} in the following
|
||||
ustar header block. The mtime record is created only for files with a
|
||||
modification time outside of the ustar range. @xref{ustar-mtime}.
|
||||
|
||||
@item path
|
||||
The pathname of the following file. This record overrides the fields
|
||||
@samp{name} and @samp{prefix} in the following ustar header block.
|
||||
The file name of the following file. This record overrides the fields
|
||||
@samp{name} and @samp{prefix} in the following ustar header block. The path
|
||||
record is created for files with a name that does not fit in the space
|
||||
provided by the ustar header, but is also created for files that require any
|
||||
other extended record so that the fields @samp{name} and @samp{prefix} in
|
||||
the following ustar header block can be zeroed.
|
||||
|
||||
@item size
|
||||
The size of the file in bytes, expressed as a decimal number using
|
||||
digits from the ISO/IEC 646:1991 (ASCII) standard. This record overrides
|
||||
the size field in the following ustar header block. The size record is
|
||||
used only for files with a size value greater than 8_589_934_591
|
||||
@w{(octal 77777777777)}. This is 2^33 bytes or larger.
|
||||
The size of the file in bytes, expressed as a decimal number using digits
|
||||
from the ISO/IEC 646:1991 (ASCII) standard. This record overrides the field
|
||||
@samp{size} in the following ustar header block. The size record is created
|
||||
only for files with a size value greater than 8_589_934_591
|
||||
@w{(octal 77777777777)}; that is, @w{8 GiB} (2^33 bytes) or larger.
|
||||
|
||||
@item uid
|
||||
The unsigned decimal representation of the user ID of the file owner of the
|
||||
following file. The uid record is created only for files with a user ID
|
||||
greater than 2_097_151 (octal 7777777). @xref{ustar-uid-gid}.
|
||||
|
||||
@anchor{key_crc32}
|
||||
@item GNU.crc32
|
||||
|
@ -722,18 +777,18 @@ The fields @samp{name}, @samp{linkname}, and @samp{prefix} are
|
|||
null-terminated character strings except when all characters in the array
|
||||
contain non-null characters including the last character.
|
||||
|
||||
The fields @samp{prefix} and @samp{name} produce the pathname of the file. A
|
||||
new pathname is formed, if prefix is not an empty string (its first
|
||||
character is not null), by concatenating prefix (up to the first null
|
||||
character), a slash character, and name; otherwise, name is used alone. In
|
||||
either case, name is terminated at the first null character. If prefix
|
||||
begins with a null character, it is ignored. In this manner, pathnames of at
|
||||
most 256 characters can be supported. If a pathname does not fit in the
|
||||
space provided, an extended record is used to store the pathname.
|
||||
The fields @samp{name} and @samp{prefix} produce the file name. A new file
|
||||
name is formed, if prefix is not an empty string (its first character is not
|
||||
null), by concatenating prefix (up to the first null character), a slash
|
||||
character, and name; otherwise, name is used alone. In either case, name is
|
||||
terminated at the first null character. If prefix begins with a null
|
||||
character, it is ignored. In this manner, file names of at most 256
|
||||
characters can be supported. If a file name does not fit in the space
|
||||
provided, an extended record is used to store the file name.
|
||||
|
||||
The field @samp{linkname} does not use the prefix to produce a pathname. If
|
||||
the linkname does not fit in the 100 characters provided, an extended record
|
||||
is used to store the linkname.
|
||||
The field @samp{linkname} does not use the prefix to produce a file name. If
|
||||
the link name does not fit in the 100 characters provided, an extended
|
||||
record is used to store the link name.
|
||||
|
||||
The field @samp{mode} provides 12 access permission bits. The following
|
||||
table shows the symbolic name of each bit and its octal value:
|
||||
|
@ -746,8 +801,10 @@ table shows the symbolic name of each bit and its octal value:
|
|||
@item S_IROTH @tab 00004 @tab S_IWOTH @tab 00002 @tab S_IXOTH @tab 00001
|
||||
@end multitable
|
||||
|
||||
@anchor{ustar-uid-gid}
|
||||
The fields @samp{uid} and @samp{gid} are the user and group IDs of the owner
|
||||
and group of the file, respectively.
|
||||
and group of the file, respectively. If the file uid or gid are greater than
|
||||
2_097_151 (octal 7777777), an extended record is used to store the uid or gid.
|
||||
|
||||
The field @samp{size} contains the octal representation of the size of the
|
||||
file in bytes. If the field @samp{typeflag} specifies a file of type '0'
|
||||
|
@ -758,9 +815,13 @@ to 0 or ignores it, and does not store or expect any logical records
|
|||
following the header. If the file size is larger than 8_589_934_591 bytes
|
||||
@w{(octal 77777777777)}, an extended record is used to store the file size.
|
||||
|
||||
@anchor{ustar-mtime}
|
||||
The field @samp{mtime} contains the octal representation of the modification
|
||||
time of the file at the time it was archived, obtained from the function
|
||||
@samp{stat}.
|
||||
@samp{stat}. If the modification time is negative or larger than
|
||||
8_589_934_591 @w{(octal 77777777777)} seconds since the epoch, an extended
|
||||
record is used to store the modification time. The ustar range of mtime goes
|
||||
from @w{@samp{1970-01-01 00:00:00 UTC}} to @w{@samp{2242-03-16 12:56:31 UTC}}.
|
||||
|
||||
The field @samp{chksum} contains the octal representation of the value of
|
||||
the simple sum of all bytes in the header logical record. Each byte in the
|
||||
|
@ -775,7 +836,8 @@ file archived:
|
|||
Regular file.
|
||||
|
||||
@item '1'
|
||||
Hard link to another file, of any type, previously archived.
|
||||
Hard link to another file, of any type, previously archived. Hard links must
|
||||
not contain file data.
|
||||
|
||||
@item '2'
|
||||
Symbolic link.
|
||||
|
@ -792,9 +854,9 @@ Directory.
|
|||
FIFO special file.
|
||||
|
||||
@item '7'
|
||||
Reserved to represent a file to which an implementation has associated
|
||||
some high-performance attribute. Tarlz treats this type of file as a
|
||||
regular file (type 0).
|
||||
Reserved to represent a file to which an implementation has associated some
|
||||
high-performance attribute (contiguous file). Tarlz treats this type of file
|
||||
as a regular file (type 0).
|
||||
|
||||
@end table
|
||||
|
||||
|
@ -817,9 +879,9 @@ Tarlz creates safe archives that allow the reliable detection of invalid or
|
|||
corrupt metadata during decoding even when the integrity checking of lzip
|
||||
can't be used because the lzip members are only decompressed partially, as
|
||||
it happens in parallel @samp{--diff}, @samp{--list}, and @samp{--extract}.
|
||||
In order to achieve this goal, tarlz makes some changes to the variant of
|
||||
the pax format that it uses. This chapter describes these changes and the
|
||||
concrete reasons to implement them.
|
||||
In order to achieve this goal and avoid some other flaws in the pax format,
|
||||
tarlz makes some changes to the variant of the pax format that it uses. This
|
||||
chapter describes these changes and the concrete reasons to implement them.
|
||||
|
||||
@sp 1
|
||||
@anchor{crc32}
|
||||
|
@ -857,23 +919,28 @@ to the POSIX-2:1993 standard, POSIX.1-2008 recommends selecting extended
|
|||
header field values that allow such tar to create a regular file containing
|
||||
the extended header records as data. This approach is broken because if the
|
||||
extended header is needed because of a long file name, the fields
|
||||
@samp{prefix} and @samp{name} will be unable to contain the full pathname of
|
||||
the file. Therefore the files corresponding to both the extended header and
|
||||
the overridden ustar header will be extracted using truncated file names,
|
||||
perhaps overwriting existing files or directories. It may be a security risk
|
||||
to extract a file with a truncated file name.
|
||||
@samp{name} and @samp{prefix} will be unable to contain the full file name.
|
||||
(Some tar implementations store the truncated name in the field @samp{name}
|
||||
alone, truncating the name to only 100 bytes instead of 256). Therefore the
|
||||
files corresponding to both the extended header and the overridden ustar
|
||||
header will be extracted using truncated file names, perhaps overwriting
|
||||
existing files or directories. It may be a security risk to extract a file
|
||||
with a truncated file name.
|
||||
|
||||
To avoid this problem, tarlz writes extended headers with all fields zeroed
|
||||
except size, chksum, typeflag, magic and version. This prevents old tar
|
||||
programs from extracting the extended records as a file in the wrong place.
|
||||
Tarlz also sets to zero those fields of the ustar header overridden by
|
||||
extended records. Finally, tarlz skips members without name when decoding
|
||||
except when listing. This is needed to detect certain format violations
|
||||
during parallel extraction.
|
||||
except @samp{size} (which contains the size of the extended records),
|
||||
@samp{chksum}, @samp{typeflag}, @samp{magic}, and @samp{version}. In
|
||||
particular, tarlz sets the fields @samp{name} and @samp{prefix} to zero.
|
||||
This prevents old tar programs from extracting the extended records as a
|
||||
file in the wrong place. Tarlz also sets to zero those fields of the ustar
|
||||
header overridden by extended records. Finally, tarlz skips members with
|
||||
zeroed @samp{name} and @samp{prefix} when decoding, except when listing.
|
||||
This is needed to detect certain format violations during parallel
|
||||
extraction.
|
||||
|
||||
If an extended header is required for any reason (for example a file size
|
||||
larger than @w{8 GiB} or a link name longer than 100 bytes), tarlz moves the
|
||||
file name also to the extended header to prevent an ustar tool from trying
|
||||
If an extended header is required for any reason (for example a file size of
|
||||
@w{8 GiB} or larger, or a link name longer than 100 bytes), tarlz also moves
|
||||
the file name to the extended records to prevent an ustar tool from trying
|
||||
to extract the file or link. This also makes easier during parallel decoding
|
||||
the detection of a tar member split between two lzip members at the boundary
|
||||
between the extended header and the ustar header.
|
||||
|
@ -882,16 +949,38 @@ between the extended header and the ustar header.
|
|||
@section As simple as possible (but not simpler)
|
||||
|
||||
The tarlz format is mainly ustar. Extended pax headers are used only when
|
||||
needed because the length of a file name or link name, or the size of a file
|
||||
exceed the limits of the ustar format. Adding @w{1 KiB} of extended headers
|
||||
to each member just to record subsecond timestamps seems wasteful for a
|
||||
backup format. Moreover, minimizing the overhead may help recovering the
|
||||
archive with lziprecover in case of corruption.
|
||||
needed because the length of a file name or link name, or the size or other
|
||||
attribute of a file exceed the limits of the ustar format. Adding @w{1 KiB}
|
||||
of extended header and records to each member just to save subsecond
|
||||
timestamps seems wasteful for a backup format. Moreover, minimizing the
|
||||
overhead may help recovering the archive with lziprecover in case of
|
||||
corruption.
|
||||
|
||||
Global pax headers are tolerated, but not supported; they are parsed and
|
||||
ignored. Some operations may not behave as expected if the archive contains
|
||||
global headers.
|
||||
|
||||
@sp 1
|
||||
@section Improve reproducibility
|
||||
|
||||
Pax includes by default the process ID of the pax process in the ustar name
|
||||
of the extended headers, making the archive not reproducible. Tarlz stores
|
||||
the true name of the file just once, either in the ustar header or in the
|
||||
extended records, making it easier to produce reproducible archives.
|
||||
|
||||
Pax allows an extended record to have length x-1 or x if x is a power of
|
||||
ten; @samp{99<97_bytes>} or @samp{100<97_bytes>}. Tarlz minimizes the length
|
||||
of the record and always produces a length of x-1 in these cases.
|
||||
|
||||
@sp 1
|
||||
@section No data in hard links
|
||||
|
||||
Tarlz does not allow data in hard link members. The data (if any) must be in
|
||||
the member determining the type of the file (which can't be a link). If all
|
||||
the names of a file are stored as hard links, the type of the file is lost.
|
||||
Not allowing data in hard links also prevents invalid actions like
|
||||
extracting file data for a hard link to a symbolic link or to a directory.
|
||||
|
||||
@sp 1
|
||||
@section Avoid misconversions to/from UTF-8
|
||||
|
||||
|
@ -1047,17 +1136,18 @@ corresponding to the tar member header. This is another reason why the tar
|
|||
headers must provide their own integrity checking.
|
||||
|
||||
@sp 1
|
||||
@anchor{mt-extraction}
|
||||
@section Limitations of multi-threaded extraction
|
||||
|
||||
Multi-threaded extraction may produce different output than single-threaded
|
||||
extraction in some cases:
|
||||
|
||||
During multi-threaded extraction, several independent processes are
|
||||
simultaneously reading the archive and creating files in the file system. The
|
||||
archive is not read sequentially. As a consequence, any error or weirdness
|
||||
in the archive (like a corrupt member or an EOF block in the middle of the
|
||||
archive) won't be usually detected until part of the archive beyond that
|
||||
point has been processed.
|
||||
During multi-threaded extraction, several independent threads are
|
||||
simultaneously reading the archive and creating files in the file system.
|
||||
The archive is not read sequentially. As a consequence, any error or
|
||||
weirdness in the archive (like a corrupt member or an end-of-archive block
|
||||
in the middle of the archive) won't be usually detected until part of the
|
||||
archive beyond that point has been processed.
|
||||
|
||||
If the archive contains two or more tar members with the same name,
|
||||
single-threaded extraction extracts the members in the order they appear in
|
||||
|
@ -1070,6 +1160,9 @@ If the same file is extracted through several paths (different member names
|
|||
resolve to the same file in the file system), the result is undefined.
|
||||
(Probably the resulting file will be mangled).
|
||||
|
||||
Extraction of a hard link may fail if it is extracted before the file it
|
||||
links to.
|
||||
|
||||
|
||||
@node Minimum archive sizes
|
||||
@chapter Minimum archive sizes required for multi-threaded block compression
|
||||
|
@ -1123,8 +1216,8 @@ tarlz -cf archive.tar.lz a b c
|
|||
|
||||
@sp 1
|
||||
@noindent
|
||||
Example 2: Append files @samp{d} and @samp{e} to the multimember
|
||||
compressed archive @samp{archive.tar.lz}.
|
||||
Example 2: Append files @samp{d} and @samp{e} to the multimember compressed
|
||||
archive @samp{archive.tar.lz}.
|
||||
|
||||
@example
|
||||
tarlz -rf archive.tar.lz d e
|
||||
|
@ -1148,7 +1241,7 @@ Example 4: Create a compressed appendable archive containing directories
|
|||
directory. Then append files @samp{a}, @samp{b}, @samp{c}, @samp{d} and
|
||||
@samp{e} to the archive, all of them contained in a single lzip member.
|
||||
The resulting archive @samp{archive.tar.lz} contains 5 lzip members
|
||||
(including the EOF member).
|
||||
(including the end-of-archive member).
|
||||
|
||||
@example
|
||||
tarlz --dsolid -cf archive.tar.lz dir1 dir2 dir3
|
||||
|
@ -1184,11 +1277,11 @@ tarlz -xf archive.tar.lz a c dir1
|
|||
|
||||
@sp 1
|
||||
@noindent
|
||||
Example 8: Copy the contents of directory @samp{sourcedir} to the
|
||||
directory @samp{destdir}.
|
||||
Example 8: Copy the contents of directory @samp{sourcedir} to the directory
|
||||
@samp{destdir}.
|
||||
|
||||
@example
|
||||
tarlz -C sourcedir -c . | tarlz -C destdir -x
|
||||
tarlz -C sourcedir --uncompressed -cf - . | tarlz -C destdir -xf -
|
||||
@end example
|
||||
|
||||
@sp 1
|
||||
|
@ -1202,6 +1295,24 @@ the other members can still be extracted).
|
|||
tarlz -z --no-solid archive.tar
|
||||
@end example
|
||||
|
||||
@sp 1
|
||||
@noindent
|
||||
Example 10: Compress the archive @samp{archive.tar} and write the output to
|
||||
@samp{foo.tar.lz}.
|
||||
|
||||
@example
|
||||
tarlz -z -o foo.tar.lz archive.tar
|
||||
@end example
|
||||
|
||||
@sp 1
|
||||
@noindent
|
||||
Example 11: Concatenate and compress two archives @samp{archive1.tar} and
|
||||
@samp{archive2.tar}, and write the output to @samp{foo.tar.lz}.
|
||||
|
||||
@example
|
||||
tarlz -A archive1.tar archive2.tar | tarlz -z -o foo.tar.lz
|
||||
@end example
|
||||
|
||||
|
||||
@node Problems
|
||||
@chapter Reporting bugs
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue