]> Dogcows Code - chaz/tar/blobdiff - doc/tar.texi
(Other Tars): New node describing how to extract
[chaz/tar] / doc / tar.texi
index 332269a76d00bdde148665ada63dfbf07a511622..1d1131df545dd5fde4648089d43e056a1c4bb145 100644 (file)
 @smallbook
 @c %**end of header
 
+@c Maintenance notes:
+@c  1. Pay attention to @FIXME{}s and @UNREVISED{}s
+@c  2. Before creating final variant:
+@c    1.1. Run `make check-options' to make sure all options are properly
+@c         documented;
+@c    2.1. Run `make master-menu' (see comment before the master menu).
+
 @include rendition.texi
 @include value.texi
 
+@defcodeindex op  
+
 @c Put everything in one index (arbitrarily chosen to be the concept index).
 @syncodeindex fn cp
 @syncodeindex ky cp
 @syncodeindex pg cp
 @syncodeindex vr cp
 
-@defindex op
-
 @copying
 
 This manual is for @acronym{GNU} @command{tar} (version
@@ -79,8 +86,13 @@ The first part of this master menu lists the major nodes in this Info
 document.  The rest of the menu lists all the lower level nodes.
 @end ifnottex
 
-@c The master menu, created with texinfo-master-menu, goes here.
-@c (However, getdate.texi's menu is interpolated by hand.)
+@c The master menu goes here.
+@c
+@c NOTE: To update it from within Emacs, make sure mastermenu.el is
+@c loaded and run texinfo-master-menu.
+@c To update it from the command line, run
+@c
+@c    make master-menu
 
 @menu
 * Introduction::
@@ -97,8 +109,8 @@ Appendices
 
 * Changes::
 * Configuring Help Summary::
+* Tar Internals::
 * Genfile::
-* Snapshot Files::
 * Free Software Needs Free Documentation::
 * Copying This Manual::
 * Index of Command Line Options::
@@ -151,6 +163,7 @@ How to Extract Members from an Archive
 * extracting archives::
 * extracting files::
 * extract dir::
+* extracting untrusted archives::
 * failing commands::
 
 Invoking @GNUTAR{}
@@ -166,7 +179,7 @@ Invoking @GNUTAR{}
 
 The Three Option Styles
 
-* Mnemonic Options::            Mnemonic Option Style
+* Long Options::                Long Option Style
 * Short Options::               Short Option Style
 * Old Options::                 Old Option Style
 * Mixing::                      Mixing Option Styles
@@ -195,7 +208,6 @@ Advanced @GNUTAR{} Operations
 * concatenate::
 * delete::
 * compare::
-* quoting styles::
 
 How to Add Files to Existing Archives: @option{--append}
 
@@ -208,6 +220,7 @@ Updating an Archive
 
 Options Used by @option{--create}
 
+* override::                  Overriding File Metadata.
 * Ignore Failed Read::
 
 Options Used by @option{--extract}
@@ -231,7 +244,9 @@ Changing How @command{tar} Writes Files
 * Recursive Unlink::
 * Data Modification Times::
 * Setting Access Permissions::
+* Directory Modification Times and Permissions::
 * Writing to Standard Output::
+* Writing to an External Program::
 * remove files::
 
 Coping with Scarce Resources
@@ -261,7 +276,9 @@ Choosing Files and Names for @command{tar}
 * Selecting Archive Members::
 * files::                       Reading Names from a File
 * exclude::                     Excluding Some Files
-* Wildcards::                   Wildcards Patterns and Matching
+* wildcards::                   Wildcards Patterns and Matching
+* quoting styles::              Ways of Quoting Special Characters in Names
+* transform::                   Modifying File and Member Names
 * after::                       Operating Only on New Files
 * recurse::                     Descending into Directories
 * one::                         Crossing File System Boundaries
@@ -274,6 +291,10 @@ Excluding Some Files
 
 * problems with exclude::
 
+Wildcards Patterns and Matching
+
+* controlling pattern-matching::
+
 Crossing File System Boundaries
 
 * directory::                   Changing Directory
@@ -284,11 +305,12 @@ Date input formats
 * General date syntax::            Common rules.
 * Calendar date items::            19 Dec 1994.
 * Time of day items::              9:20pm.
-* Time zone items::                @sc{est}, @sc{pdt}, @sc{gmt}, ...
+* Time zone items::                @sc{est}, @sc{pdt}, @sc{gmt}.
 * Day of week items::              Monday and others.
 * Relative items in date strings:: next tuesday, 2 years ago.
 * Pure numbers in date strings::   19931219, 1440.
 * Seconds since the Epoch::        @@1078100502.
+* Specifying time zone rules::     TZ="America/New_York", TZ="UTC0".
 * Authors of get_date::            Bellovin, Eggert, Salz, Berets, et al.
 
 Controlling the Archive Format
@@ -296,8 +318,6 @@ Controlling the Archive Format
 * Portability::                 Making @command{tar} Archives More Portable
 * Compression::                 Using Less Space through Compression
 * Attributes::                  Handling File Attributes
-* Standard::                    The Standard Format
-* Extensions::                  @acronym{GNU} Extensions to the Archive Format
 * cpio::                        Comparison of @command{tar} and @command{cpio}
 
 Making @command{tar} Archives More Portable
@@ -305,9 +325,22 @@ Making @command{tar} Archives More Portable
 * Portable Names::              Portable Names
 * dereference::                 Symbolic Links
 * old::                         Old V7 Archives
+* ustar::                       Ustar Archives
+* gnu::                         GNU and old GNU format archives.
 * posix::                       @acronym{POSIX} archives
 * Checksumming::                Checksumming Problems
 * Large or Negative Values::    Large files, negative time stamps, etc.
+* Other Tars::                  How to Extract GNU-Specific Data Using
+                                Other @command{tar} Implementations
+
+@GNUTAR{} and @acronym{POSIX} @command{tar}
+
+* PAX keywords:: Controlling Extended Header Keywords.
+
+How to Extract GNU-Specific Data Using Other @command{tar} Implementations
+
+* Split Recovery::       Members Split Between Volumes
+* Sparse Recovery::      Sparse Members
 
 Using Less Space through Compression
 
@@ -342,14 +375,29 @@ Using Multiple Tapes
 * Tape Files::                  Tape Files
 * Tarcat::                      Concatenate Volumes into a Single Archive
 
-GNU tar internals and development
 
-* Genfile::
+Tar Internals
+
+* Standard::           Basic Tar Format
+* Extensions::         @acronym{GNU} Extensions to the Archive Format
+* Sparse Formats::     Storing Sparse Files
 * Snapshot Files::
+* Dumpdir::
+
+Storing Sparse Files
+
+* Old GNU Format::
+* PAX 0::                PAX Format, Versions 0.0 and 0.1
+* PAX 1::                PAX Format, Version 1.0
+
+Genfile
+
+* Generate Mode::     File Generation Mode.
+* Status Mode::       File Status Mode.
+* Exec Mode::         Synchronous Execution mode.
 
 Copying This Manual
 
-* Free Software Needs Free Documentation::
 * GNU Free Documentation License::  License for copying this manual
 
 @end detailmenu
@@ -567,10 +615,8 @@ Gorin worked on a tutorial and manual for @GNUTAR{}.
 Fran@,{c}ois Pinard put version 1.11.8 of the manual together by
 taking information from all these sources and merging them.  Melissa
 Weisshaus finally edited and redesigned the book to create version
-1.12.  @FIXME{update version number as necessary; i'm being
-optimistic!} @FIXME{Someone [maybe karl berry?  maybe bob chassell?
-maybe melissa? maybe julie sussman?]  needs to properly index the
-thing.}
+1.12.  The book for versions from 1.14 up to @value{VERSION} were edited
+by the current maintainer, Sergey Poznyakoff.
 
 For version 1.12, Daniel Hagerty contributed a great deal of technical
 consulting.  In particular, he is the primary author of @ref{Backups}.
@@ -709,7 +755,7 @@ you used to seeing them.  (Note that the ``old style'' option forms
 exist in @GNUTAR{} for compatibility with Unix
 @command{tar}.  In this book we present a full discussion of this way
 of writing options and operations (@pxref{Old Options}), and we discuss
-the other two styles of writing options (@xref{Mnemonic Options}, and
+the other two styles of writing options (@xref{Long Options}, and
 @pxref{Short Options}).
 
 In the examples and in the text of this tutorial, we usually use the
@@ -797,7 +843,7 @@ useful in making things more clear and helping you avoid errors.)
 @unnumberedsubsec The @option{--file} Option
 
 @table @option
-@opindex file, tutorial
+@xopindex{file, tutorial}
 @item --file=@var{archive-name}
 @itemx -f @var{archive-name}
 Specify the name of an archive file.
@@ -834,7 +880,7 @@ For more information on using the @option{--file=@var{archive-name}} (@option{-f
 @unnumberedsubsec The @option{--verbose} Option
 
 @table @option
-@opindex verbose, introduced
+@xopindex{verbose, introduced}
 @item --verbose
 @itemx -v
 Show the files being worked on as @command{tar} is running.
@@ -851,24 +897,38 @@ others.  We will use @option{--verbose} at times to help make something
 clear, and we will give many examples both using and not using
 @option{--verbose} to show the differences.
 
-Sometimes, a single instance of @option{--verbose} on the command line
-will show a full, @samp{ls} style listing of an archive or files,
-giving sizes, owners, and similar information. @FIXME{Describe the
-exact output format, e.g., how hard links are displayed.}
-Other times, @option{--verbose} will only show files or members that the particular
-operation is operating on at the time.  In the latter case, you can
-use @option{--verbose} twice in a command to get a listing such as that
-in the former case.  For example, instead of saying
+Each instance of @option{--verbose} on the command line increases the
+verbosity level by one, so if you need more details on the output, 
+specify it twice.
+
+When reading archives (@option{--list}, @option{--extract},
+@option{--diff}), @command{tar} by default prints only the names of
+the members being extracted.  Using @option{--verbose} will show a full,
+@command{ls} style member listing.
+
+In contrast, when writing archives (@option{--create}, @option{--append},
+@option{--update}), @command{tar} does not print file names by
+default.  So, a single @option{--verbose} option shows the file names
+being added to the archive, while two @option{--verbose} options
+enable the full listing.
+   
+For example, to create an archive in verbose mode:
 
 @smallexample
-@kbd{tar -cvf afiles.tar apple angst aspic}
+$ @kbd{tar -cvf afiles.tar apple angst aspic}
+apple
+angst
+aspic
 @end smallexample
 
 @noindent
-above, you might say
+Creating the same archive with the verbosity level 2 could give:
 
 @smallexample
-@kbd{tar -cvvf afiles.tar apple angst aspic}
+$ @kbd{tar -cvvf afiles.tar apple angst aspic}
+-rw-r--r-- gray/staff    62373 2006-06-09 12:06 apple
+-rw-r--r-- gray/staff    11481 2006-06-09 12:06 angst
+-rw-r--r-- gray/staff    23152 2006-06-09 12:06 aspic
 @end smallexample
 
 @noindent
@@ -886,6 +946,93 @@ Note that you must double the hyphens properly each time.
 Later in the tutorial, we will give examples using @w{@option{--verbose
 --verbose}}.
 
+@anchor{verbose member listing}
+The full output consists of six fields:
+
+@itemize @bullet
+@item File type and permissions in symbolic form.
+These are displayed in the same format as the first column of
+@command{ls -l} output (@pxref{What information is listed,
+format=verbose, Verbose listing, fileutils, GNU file utilities}).
+
+@item Owner name and group separated by a slash character.
+If these data are not available (for example, when listing a @samp{v7} format
+archive), numeric ID values are printed instead.
+
+@item Size of the file, in bytes.
+
+@item File modification date in ISO 8601 format.
+
+@item File modification time.
+
+@item File name.
+If the name contains any special characters (white space, newlines,
+etc.) these are displayed in an unambiguous form using so called
+@dfn{quoting style}.  For the detailed discussion of available styles
+and on how to use them, see @ref{quoting styles}.
+
+Depending on the file type, the name can be followed by some
+additional information, described in the following table:
+
+@table @samp
+@item -> @var{link-name}
+The file or archive member is a @dfn{symbolic link} and
+@var{link-name} is the name of file it links to.
+
+@item link to @var{link-name}
+The file or archive member is a @dfn{hard link} and @var{link-name} is
+the name of file it links to.
+
+@item --Long Link--
+The archive member is an old GNU format long link.  You will normally
+not encounter this.
+
+@item --Long Name--
+The archive member is an old GNU format long name.  You will normally
+not encounter this.
+
+@item --Volume Header--
+The archive member is a GNU @dfn{volume header} (@pxref{Tape Files}).
+
+@item --Continued at byte @var{n}--
+Encountered only at the beginning of a multy-volume archive
+(@pxref{Using Multiple Tapes}).  This archive member is a continuation
+from the previous volume. The number @var{n} gives the offset where
+the original file was split.  
+
+@item --Mangled file names--
+This archive member contains @dfn{mangled file names} declarations,
+a special member type that was used by early versions of @GNUTAR{}.
+You probably will never encounter this, unless you are reading a very
+old archive.
+
+@item  unknown file type @var{c}
+An archive member of unknown type. @var{c} is the type character from
+the archive header.  If you encounter such a message, it means that
+either your archive contains proprietary member types @GNUTAR{} is not
+able to handle, or the archive is corrupted.
+@end table
+
+@end itemize
+
+For example, here is an archive listing containing most of the special
+suffixes explained above:
+
+@smallexample
+@group
+V--------- 0/0          1536 2006-06-09 13:07 MyVolume--Volume Header--
+-rw-r--r-- gray/staff 456783 2006-06-09 12:06 aspic--Continued at
+byte 32456--
+-rw-r--r-- gray/staff  62373 2006-06-09 12:06 apple
+lrwxrwxrwx gray/staff      0 2006-06-09 13:01 angst -> apple
+-rw-r--r-- gray/staff  35793 2006-06-09 12:06 blues
+hrw-r--r-- gray/staff      0 2006-06-09 12:06 music link to blues
+@end group
+@end smallexample
+
+@smallexample
+@end smallexample
+
 @node help tutorial
 @unnumberedsubsec Getting Help: Using the @option{--help} Option
 
@@ -972,7 +1119,7 @@ you need to use a different option, such as @option{--append} (@option{-r}); see
 @node Creating the archive
 @subsection Creating the Archive
 
-@opindex create, introduced
+@xopindex{create, introduced}
 To place the files @file{blues}, @file{folk}, and @file{jazz} into an
 archive named @file{collection.tar}, use the following command:
 
@@ -993,8 +1140,8 @@ why we will list the arguments in the order that makes the commands
 easiest to understand (and we encourage you to do the same when you use
 @command{tar}, to avoid errors).
 
-Note that the part of the command which says,
-@w{@option{--file=collection.tar}} is considered to be @emph{one} argument.
+Note that the sequence
+@option{--file=@-collection.tar} is considered to be @emph{one} argument.
 If you substituted any other string of characters for
 @kbd{collection.tar},  then that string would become the name of the
 archive file you create.
@@ -1011,8 +1158,8 @@ is the operation which creates the new archive
 (@file{collection.tar}), and @option{--file} is the option which lets
 you give it the name you chose.  The files, @file{blues}, @file{folk},
 and @file{jazz}, are now members of the archive, @file{collection.tar}
-(they are @dfn{file name arguments} to the @option{--create} operation).
-@FIXME{xref here to the discussion of file name args?}Now that they are
+(they are @dfn{file name arguments} to the @option{--create} operation.
+@xref{Choosing}, for the detailed discussion on these.) Now that they are
 in the archive, they are called @emph{archive members}, not files.
 (@pxref{Definitions,members}).
 
@@ -1043,8 +1190,8 @@ Use @option{--append} (@option{-r}) instead.  @xref{append}.
 @node create verbose
 @subsection Running @option{--create} with @option{--verbose}
 
-@opindex create, using with @option{--verbose}
-@opindex verbose, using with @option{--create}
+@xopindex{create, using with @option{--verbose}}
+@xopindex{verbose, using with @option{--create}}
 If you include the @option{--verbose} (@option{-v}) option on the command line,
 @command{tar} will list the files it is acting on as it is working.  In
 verbose mode, the @code{create} example above would appear as:
@@ -1226,11 +1373,12 @@ of the directory being dumped.
 
 @opindex list
 Frequently, you will find yourself wanting to determine exactly what a
-particular archive contains.  You can use the @option{--list} (@option{-t}) operation
-to get the member names as they currently appear in the archive, as well
-as various attributes of the files at the time they were archived.  For
-example, you can examine the archive @file{collection.tar} that you
-created in the last section with the command,
+particular archive contains.  You can use the @option{--list}
+(@option{-t}) operation to get the member names as they currently
+appear in the archive, as well as various attributes of the files at
+the time they were archived.  For example, you can examine the archive
+@file{collection.tar} that you created in the last section with the
+command, 
 
 @smallexample
 $ @kbd{tar --list --file=collection.tar}
@@ -1259,11 +1407,12 @@ Be sure to use a @option{--file=@var{archive-name}} (@option{-f
 @var{archive-name}}) option just as with @option{--create}
 (@option{-c}) to specify the name of the archive.
 
-@opindex list, using with @option{--verbose}
-@opindex verbose, using with @option{--list}
+@xopindex{list, using with @option{--verbose}}
+@xopindex{verbose, using with @option{--list}}
 If you use the @option{--verbose} (@option{-v}) option with
 @option{--list}, then @command{tar} will print out a listing
-reminiscent of @w{@samp{ls -l}}, showing owner, file size, and so forth.
+reminiscent of @w{@samp{ls -l}}, showing owner, file size, and so
+forth.  This output is described in detail in @ref{verbose member listing}.
 
 If you had used @option{--verbose} (@option{-v}) mode, the example
 above would look like:
@@ -1310,14 +1459,14 @@ Print member (as opposed to @emph{file}) names when creating the archive.
 @end table
 
 @cindex File name arguments, using @option{--list} with
-@opindex list, using with file name arguments
+@xopindex{list, using with file name arguments}
 You can specify one or more individual member names as arguments when
 using @samp{list}.  In this case, @command{tar} will only list the
 names of members you identify.  For example, @w{@kbd{tar --list
 --file=afiles.tar apple}} would only print @file{apple}.
 
 Because @command{tar} preserves paths, file names must be specified as
-they appear in the archive (ie., relative to the directory from which
+they appear in the archive (i.e., relative to the directory from which
 the archive was created).  Therefore, it is essential when specifying
 member names to @command{tar} that you give the exact member names.
 For example, @w{@kbd{tar --list --file=bfiles.tar birds}} would produce an
@@ -1336,7 +1485,7 @@ $ @kbd{tar --list --file=bfiles.tar --wildcards '*b*'}
 @end smallexample
 
 @noindent
-will list all members whose name contains @samp{b}.  @xref{Wildcards},
+will list all members whose name contains @samp{b}.  @xref{wildcards},
 for a detailed discussion of globbing patterns and related
 @command{tar} command line options.
 
@@ -1481,7 +1630,7 @@ Here, @option{--wildcards} instructs @command{tar} to treat
 command line arguments as globbing patterns and @option{--no-anchored}
 informs it that the patterns apply to member names after any @samp{/}
 delimiter.  The use of globbing patterns is discussed in detail in
-@xref{Wildcards}. 
+@xref{wildcards}. 
 
 You can extract a file to standard output by combining the above options
 with the @option{--to-stdout} (@option{-O}) option (@pxref{Writing to Standard
@@ -1711,7 +1860,7 @@ the files in the file system to @command{tar}.
 
 The distinction between file names and archive member names is especially
 important when shell globbing is used, and sometimes a source of confusion
-for newcomers.  @xref{Wildcards}, for more information about globbing.
+for newcomers.  @xref{wildcards}, for more information about globbing.
 The problem is that shells may only glob using existing files in the
 file system.  Only @command{tar} itself may glob on archive members, so when
 needed, you must ensure that wildcard characters reach @command{tar} without
@@ -1827,34 +1976,30 @@ can cause you to overwrite a number of important files.  We urge you
 to note these differences, and only use the option style(s) which
 makes the most sense to you until you feel comfortable with the others.
 
-Some options @emph{may} take an argument (currently, there are
-two such options: @option{--backup} and @option{--occurrence}).  Such
-options may have at most long and short forms, they do not have old style
-equivalent.  The rules for specifying an argument for such options
-are stricter than those for specifying mandatory arguments.  Please,
-pay special attention to them.
+Some options @emph{may} take an argument.  Such options may have at
+most long and short forms, they do not have old style equivalent.  The
+rules for specifying an argument for such options are stricter than
+those for specifying mandatory arguments.  Please, pay special
+attention to them. 
 
 @menu
-* Mnemonic Options::            Mnemonic Option Style
+* Long Options::                Long Option Style
 * Short Options::               Short Option Style
 * Old Options::                 Old Option Style
 * Mixing::                      Mixing Option Styles
 @end menu
 
-@node Mnemonic Options
-@subsection Mnemonic Option Style
-
-@FIXME{have to decide whether or not to replace other occurrences of
-"mnemonic" with "long", or *ugh* vice versa.}
+@node Long Options
+@subsection Long Option Style
 
-Each option has at least one long (or mnemonic) name starting with two
+Each option has at least one @dfn{long} (or @dfn{mnemonic}) name starting with two
 dashes in a row, e.g., @option{--list}.  The long names are more clear than
 their corresponding short or old names.  It sometimes happens that a
-single mnemonic option has many different different names which are
+single long option has many different different names which are
 synonymous, such as @option{--compare} and @option{--diff}.  In addition,
 long option names can be given unique abbreviations.  For example,
 @option{--cre} can be used in place of @option{--create} because there is no
-other mnemonic option which begins with @samp{cre}.  (One way to find
+other long option which begins with @samp{cre}.  (One way to find
 this out is by trying it and seeing what happens; if a particular
 abbreviation could represent more than one option, @command{tar} will tell
 you that that abbreviation is ambiguous and you'll know that that
@@ -1863,7 +2008,7 @@ to see a list of options.  Be aware that if you run @command{tar} with a
 unique abbreviation for the long name of an option you didn't want to
 use, you are stuck; @command{tar} will perform the command as ordered.)
 
-Mnemonic options are meant to be obvious and easy to remember, and their
+Long options are meant to be obvious and easy to remember, and their
 meanings are generally easier to discern than those of their
 corresponding short options (see below).  For example:
 
@@ -1875,7 +2020,7 @@ $ @kbd{tar --create --verbose --blocking-factor=20 --file=/dev/rmt0}
 gives a fairly good set of hints about what the command does, even
 for those not fully acquainted with @command{tar}.
 
-Mnemonic options which require arguments take those arguments
+Long options which require arguments take those arguments
 immediately following the option name.  There are two ways of
 specifying a mandatory argument.  It can be separated from the
 option name either by an equal sign, or by any amount of
@@ -1892,7 +2037,7 @@ as @option{--backup=@var{backup-type}}.
 @node Short Options
 @subsection Short Option Style
 
-Most options also have a short option name.  Short options start with
+Most options also have a @dfn{short option} name.  Short options start with
 a single dash, and are followed by a single character, e.g., @option{-t}
 (which is equivalent to @option{--list}).  The forms are absolutely
 identical in function; they are interchangeable.
@@ -1937,7 +2082,7 @@ end up overwriting files.
 @subsection Old Option Style
 @UNREVISED
 
-Like short options, old options are single letters.  However, old options
+Like short options, @dfn{old options} are single letters.  However, old options
 must be written together as a single clumped set, without spaces separating
 them or dashes preceding them@footnote{Beware that if you precede options
 with a dash, you are announcing the short option style instead of the
@@ -1947,7 +2092,7 @@ of letters must be the first to appear on the command line, after the
 anywhere else.  The letter of an old option is exactly the same letter as
 the corresponding short option.  For example, the old option @samp{t} is
 the same as the short option @option{-t}, and consequently, the same as the
-mnemonic option @option{--list}.  So for example, the command @w{@samp{tar
+long option @option{--list}.  So for example, the command @w{@samp{tar
 cv}} specifies the option @option{-v} in addition to the operation @option{-c}.
 
 When options that need arguments are given together with the command,
@@ -2016,7 +2161,7 @@ equivalent to @w{@samp{tar -c}:} both of them specify the
 All three styles may be intermixed in a single @command{tar} command,
 so long as the rules for each style are fully
 respected@footnote{Before @GNUTAR{} version 1.11.6,
-a bug prevented intermixing old style options with mnemonic options in
+a bug prevented intermixing old style options with long options in
 some cases.}.  Old style options and either of the modern styles of
 options may be mixed within a single @command{tar} command.  However,
 old style options must be introduced as the first arguments only,
@@ -2099,19 +2244,19 @@ a reference for deciphering @command{tar} commands in scripts.
 
 @table @option
 
-@opindex append, summary
+@opsummary{append}
 @item --append
 @itemx -r
 
 Appends files to the end of the archive.  @xref{append}.
 
-@opindex catenate, summary
+@opsummary{catenate}
 @item --catenate
 @itemx -A
 
 Same as @option{--concatenate}.  @xref{concatenate}.
 
-@opindex compare, summary
+@opsummary{compare}
 @item --compare
 @itemx -d
 
@@ -2119,50 +2264,50 @@ Compares archive members with their counterparts in the file
 system, and reports differences in file size, mode, owner,
 modification date and contents.  @xref{compare}.
 
-@opindex concatenate, summary
+@opsummary{concatenate}
 @item --concatenate
 @itemx -A
 
 Appends other @command{tar} archives to the end of the archive.
 @xref{concatenate}.
 
-@opindex create, summary
+@opsummary{create}
 @item --create
 @itemx -c
 
 Creates a new @command{tar} archive.  @xref{create}.
 
-@opindex delete, summary
+@opsummary{delete}
 @item --delete
 
 Deletes members from the archive.  Don't try this on a archive on a
 tape!  @xref{delete}.
 
-@opindex diff, summary
+@opsummary{diff}
 @item --diff
 @itemx -d
 
 Same @option{--compare}.  @xref{compare}.
 
-@opindex extract, summary
+@opsummary{extract}
 @item --extract
 @itemx -x
 
 Extracts members from the archive into the file system.  @xref{extract}.
 
-@opindex get, summary
+@opsummary{get}
 @item --get
 @itemx -x
 
 Same as @option{--extract}.  @xref{extract}.
 
-@opindex list, summary
+@opsummary{list}
 @item --list
 @itemx -t
 
 Lists the members in an archive.  @xref{list}.
 
-@opindex update, summary
+@opsummary{update}
 @item --update
 @itemx -u
 
@@ -2177,7 +2322,7 @@ exist in the archive. @xref{update}.
 
 @table @option
 
-@opindex absolute-names, summary
+@opsummary{absolute-names}
 @item --absolute-names
 @itemx -P
 
@@ -2185,17 +2330,17 @@ Normally when creating an archive, @command{tar} strips an initial
 @samp{/} from member names.  This option disables that behavior.
 @xref{absolute}.
 
-@opindex after-date, summary
+@opsummary{after-date}
 @item --after-date
 
 (See @option{--newer}, @pxref{after})
 
-@opindex anchored, summary
+@opsummary{anchored}
 @item --anchored
 A pattern must match an initial subsequence of the name's components.
 @xref{controlling pattern-matching}.
 
-@opindex atime-preserve, summary
+@opsummary{atime-preserve}
 @item --atime-preserve
 @itemx --atime-preserve=replace
 @itemx --atime-preserve=system
@@ -2235,62 +2380,63 @@ Currently @option{--atime-preserve} with no operand defaults to
 as support for @option{--atime-preserve=system} improves.
 
 If your operating system does not support
-@option{--atime-preserve=system}, you might be able to preserve access
+@option{--atime-preserve=@-system}, you might be able to preserve access
 times reliably by by using the @command{mount} command.  For example,
 you can mount the file system read-only, or access the file system via
 a read-only loopback mount, or use the @samp{noatime} mount option
 available on some systems.  However, mounting typically requires
 superuser privileges and can be a pain to manage.
 
-@opindex backup, summary
+@opsummary{backup}
 @item --backup=@var{backup-type}
 
 Rather than deleting files from the file system, @command{tar} will
 back them up using simple or numbered backups, depending upon
 @var{backup-type}.  @xref{backup}.
 
-@opindex block-number, summary
+@opsummary{block-number}
 @item --block-number
 @itemx -R
 
 With this option present, @command{tar} prints error messages for read errors
 with the block number in the archive file.  @xref{block-number}.
 
-@opindex blocking-factor, summary
+@opsummary{blocking-factor}
 @item --blocking-factor=@var{blocking}
 @itemx -b @var{blocking}
 
 Sets the blocking factor @command{tar} uses to @var{blocking} x 512 bytes per
 record.  @xref{Blocking Factor}.
 
-@opindex bzip2, summary
+@opsummary{bzip2}
 @item --bzip2
 @itemx -j
 
 This option tells @command{tar} to read or write archives through
 @code{bzip2}.  @xref{gzip}.
 
-@opindex checkpoint, summary
-@item --checkpoint
+@opsummary{checkpoint}
+@item --checkpoint[=@var{number}]
 
-This option directs @command{tar} to print periodic checkpoint messages as it
-reads through the archive.  It is intended for when you want a visual
-indication that @command{tar} is still running, but don't want to see
-@option{--verbose} output.  @FIXME-xref{}
+This option directs @command{tar} to print periodic checkpoint
+messages as it reads through the archive.  It is intended for when you
+want a visual indication that @command{tar} is still running, but
+don't want to see @option{--verbose} output.  For a detailed
+description, see @ref{Progress information}.
 
-@opindex check-links, summary
+@opsummary{check-links}
 @item --check-links
 @itemx -l
 If this option was given, @command{tar} will check the number of links
 dumped for each processed file.  If this number does not match the
 total number of hard links for the file, a warning message will be
 output @footnote{Earlier versions of @GNUTAR{} understood @option{-l} as a
-synonym for @option{--one-file-system}.  The current semantics, wich
+synonym for @option{--one-file-system}.  The current semantics, which
 complies to UNIX98, was introduced with version
 1.15.91. @xref{Changes}, for more information.}. 
 
-@opindex compress, summary
-@opindex uncompress, summary
+@opsummary{compress}
+@opsummary{uncompress}
 @item --compress
 @itemx --uncompress
 @itemx -Z
@@ -2299,18 +2445,18 @@ complies to UNIX98, was introduced with version
 writing the archive.  This allows you to directly act on archives
 while saving space.  @xref{gzip}.
 
-@opindex confirmation, summary
+@opsummary{confirmation}
 @item --confirmation
 
 (See @option{--interactive}.)  @xref{interactive}.
 
-@opindex delay-directory-restore, summary
+@opsummary{delay-directory-restore}
 @item --delay-directory-restore
 
 Delay setting modification times and permissions of extracted
 directories until the end of extraction. @xref{Directory Modification Times and Permissions}.
 
-@opindex dereference, summary
+@opsummary{dereference}
 @item --dereference
 @itemx -h
 
@@ -2318,7 +2464,7 @@ When creating a @command{tar} archive, @command{tar} will archive the
 file that a symbolic link points to, rather than archiving the
 symlink.  @xref{dereference}.
 
-@opindex directory, summary
+@opsummary{directory}
 @item --directory=@var{dir}
 @itemx -C @var{dir}
 
@@ -2326,26 +2472,26 @@ When this option is specified, @command{tar} will change its current directory
 to @var{dir} before performing any operations.  When this option is used
 during archive creation, it is order sensitive.  @xref{directory}.
 
-@opindex exclude, summary
+@opsummary{exclude}
 @item --exclude=@var{pattern}
 
 When performing operations, @command{tar} will skip files that match
 @var{pattern}.  @xref{exclude}.
 
-@opindex exclude-from, summary
+@opsummary{exclude-from}
 @item --exclude-from=@var{file}
 @itemx -X @var{file}
 
 Similar to @option{--exclude}, except @command{tar} will use the list of
 patterns in the file @var{file}.  @xref{exclude}.
 
-@opindex exclude-caches, summary
+@opsummary{exclude-caches}
 @item --exclude-caches
 
 Automatically excludes all directories
 containing a cache directory tag.  @xref{exclude}.
 
-@opindex file, summary
+@opsummary{file}
 @item --file=@var{archive}
 @itemx -f @var{archive}
 
@@ -2353,7 +2499,7 @@ containing a cache directory tag.  @xref{exclude}.
 performs operations on, rather than @command{tar}'s compilation dependent
 default.  @xref{file tutorial}.
 
-@opindex files-from, summary
+@opsummary{files-from}
 @item --files-from=@var{file}
 @itemx -T @var{file}
 
@@ -2361,15 +2507,16 @@ default.  @xref{file tutorial}.
 or files to operate on, in addition to those specified on the
 command-line.  @xref{files}.
 
-@opindex force-local, summary
+@opsummary{force-local}
 @item --force-local
 
 Forces @command{tar} to interpret the filename given to @option{--file}
 as a local file, even if it looks like a remote tape drive name.
 @xref{local and remote archives}.
 
-@opindex format, summary
+@opsummary{format}
 @item --format=@var{format}
+@itemx -H @var{format}
 
 Selects output archive format.  @var{Format} may be one of the
 following:
@@ -2397,19 +2544,19 @@ Creates a @acronym{POSIX.1-2001 archive}.
 
 @xref{Formats}, for a detailed discussion of these formats.
 
-@opindex group, summary
+@opsummary{group}
 @item --group=@var{group}
 
 Files added to the @command{tar} archive will have a group id of @var{group},
 rather than the group from the source file.  @var{group} is first decoded
 as a group symbolic name, but if this interpretation fails, it has to be
-a decimal numeric group ID.  @FIXME-xref{}
+a decimal numeric group ID.  @xref{override}.
 
 Also see the comments for the @option{--owner=@var{user}} option.
 
-@opindex gzip, summary
-@opindex gunzip, summary
-@opindex ungzip, summary
+@opsummary{gzip}
+@opsummary{gunzip}
+@opsummary{ungzip}
 @item --gzip
 @itemx --gunzip
 @itemx --ungzip
@@ -2419,35 +2566,36 @@ This option tells @command{tar} to read or write archives through
 @command{gzip}, allowing @command{tar} to directly operate on several
 kinds of compressed archives transparently.  @xref{gzip}.
 
-@opindex help, summary
+@opsummary{help}
 @item --help
+@itemx -?
 
 @command{tar} will print out a short message summarizing the operations and
 options to @command{tar} and exit. @xref{help}.
 
-@opindex ignore-case, summary
+@opsummary{ignore-case}
 @item --ignore-case
 Ignore case when matching member or file names with
 patterns. @xref{controlling pattern-matching}. 
 
-@opindex ignore-command-error, summary
+@opsummary{ignore-command-error}
 @item --ignore-command-error
 Ignore exit codes of subprocesses. @xref{Writing to an External Program}.
 
-@opindex ignore-failed-read, summary
+@opsummary{ignore-failed-read}
 @item --ignore-failed-read
 
 Do not exit unsuccessfully merely because an unreadable file was encountered.
 @xref{Reading}.
 
-@opindex ignore-zeros, summary
+@opsummary{ignore-zeros}
 @item --ignore-zeros
 @itemx -i
 
 With this option, @command{tar} will ignore zeroed blocks in the
 archive, which normally signals EOF.  @xref{Reading}.
 
-@opindex incremental, summary
+@opsummary{incremental}
 @item --incremental
 @itemx -G
 
@@ -2456,13 +2604,13 @@ Used to inform @command{tar} that it is working with an old
 primarily for backwards compatibility only.  @xref{Incremental Dumps},
 for a detailed discussion of incremental archives.
 
-@opindex index-file, summary
+@opsummary{index-file}
 @item --index-file=@var{file}
 
 Send verbose output to @var{file} instead of to standard output.
 
-@opindex info-script, summary
-@opindex new-volume-script, summary
+@opsummary{info-script}
+@opsummary{new-volume-script}
 @item --info-script=@var{script-file}
 @itemx --new-volume-script=@var{script-file}
 @itemx -F @var{script-file}
@@ -2472,7 +2620,7 @@ at the end of each tape.  If @var{script-file} exits with nonzero status,
 @command{tar} fails immediately.  @xref{info-script}, for a detailed
 discussion of @var{script-file}.
 
-@opindex interactive, summary
+@opsummary{interactive}
 @item --interactive
 @itemx --confirmation
 @itemx -w
@@ -2481,20 +2629,20 @@ Specifies that @command{tar} should ask the user for confirmation before
 performing potentially destructive options, such as overwriting files.
 @xref{interactive}.
 
-@opindex keep-newer-files, summary
+@opsummary{keep-newer-files}
 @item --keep-newer-files
 
 Do not replace existing files that are newer than their archive copies
 when extracting files from an archive.
 
-@opindex keep-old-files, summary
+@opsummary{keep-old-files}
 @item --keep-old-files
 @itemx -k
 
 Do not overwrite existing files when extracting files from an archive.
 @xref{Keep Old Files}.
 
-@opindex label, summary
+@opsummary{label}
 @item --label=@var{name}
 @itemx -V @var{name}
 
@@ -2503,7 +2651,7 @@ as a name record in the archive.  When extracting or listing archives,
 @command{tar} will only operate on archives that have a label matching
 the pattern specified in @var{name}.  @xref{Tape Files}.
 
-@opindex listed-incremental, summary
+@opsummary{listed-incremental}
 @item --listed-incremental=@var{snapshot-file}
 @itemx -g @var{snapshot-file}
 
@@ -2513,37 +2661,38 @@ backup, using @var{snapshot-file} to determine which files to backup.
 With other operations, informs @command{tar} that the archive is in
 incremental format.  @xref{Incremental Dumps}.
 
-@opindex mode, summary
+@opsummary{mode}
 @item --mode=@var{permissions}
 
 When adding files to an archive, @command{tar} will use
 @var{permissions} for the archive members, rather than the permissions
-from the files.  The program @command{chmod} and this @command{tar}
-option share the same syntax for what @var{permissions} might be.
-@xref{File permissions, Permissions, File permissions, fileutils,
-@acronym{GNU} file utilities}.  This reference also has useful
-information for those not being overly familiar with the Unix
-permission system.
-
-Of course, @var{permissions} might be plainly specified as an octal number.
-However, by using generic symbolic modifications to mode bits, this allows
-more flexibility.  For example, the value @samp{a+rw} adds read and write
-permissions for everybody, while retaining executable bits on directories
-or on any other file already marked as executable.
+from the files.  @var{permissions} can be specified either as an octal
+number or as symbolic permissions, like with
+@command{chmod}. @xref{override}.
 
-@opindex multi-volume, summary
+@opsummary{mtime}
+@item --mtime=@var{date}
+
+When adding files to an archive, @command{tar} will use @var{date} as
+the modification time of members when creating archives, instead of
+their actual modification times.  The value of @var{date} can be
+either a textual date representation (@pxref{Date input formats}) or a
+name of the existing file, starting with @samp{/} or @samp{.}.  In the
+latter case, the modification time of that file is used. @xref{override}.
+
+@opsummary{multi-volume}
 @item --multi-volume
 @itemx -M
 
 Informs @command{tar} that it should create or otherwise operate on a
 multi-volume @command{tar} archive.  @xref{Using Multiple Tapes}.
 
-@opindex new-volume-script, summary
+@opsummary{new-volume-script}
 @item --new-volume-script
 
 (see --info-script)
 
-@opindex seek, summary
+@opsummary{seek}
 @item --seek
 @itemx -n
 
@@ -2552,7 +2701,7 @@ locations.  Usually @command{tar} determines automatically whether
 the archive can be seeked or not.  This option is intended for use
 in cases when such recognition fails.
 
-@opindex newer, summary
+@opsummary{newer}
 @item --newer=@var{date}
 @itemx --after-date=@var{date}
 @itemx -N
@@ -2562,47 +2711,55 @@ since @var{date}.  If @var{date} begins with @samp{/} or @samp{.}, it
 is taken to be the name of a file whose data modification time specifies
 the date.  @xref{after}.
 
-@opindex newer-mtime, summary
+@opsummary{newer-mtime}
 @item --newer-mtime=@var{date}
 
 Like @option{--newer}, but add only files whose
 contents have changed (as opposed to just @option{--newer}, which will
-also back up files for which any status information has changed).
+also back up files for which any status information has
+changed).  @xref{after}.
 
-@opindex no-anchored, summary
+@opsummary{no-anchored}
 @item --no-anchored
 An exclude pattern can match any subsequence of the name's components.
 @xref{controlling pattern-matching}.
 
-@opindex no-delay-directory-restore, summary
+@opsummary{no-delay-directory-restore}
 @item --no-delay-directory-restore
 
 Setting modification times and permissions of extracted
 directories when all files from this directory has been
 extracted. This is the default. @xref{Directory Modification Times and Permissions}.
 
-@opindex no-ignore-case, summary
+@opsummary{no-ignore-case}
 @item --no-ignore-case
 Use case-sensitive matching.
 @xref{controlling pattern-matching}.
 
-@opindex no-ignore-command-error, summary
+@opsummary{no-ignore-command-error}
 @item --no-ignore-command-error
 Print warnings about subprocesses terminated with a non-zero exit
 code. @xref{Writing to an External Program}.
 
-@opindex no-quote-chars, summary
+@opsummary{no-overwrite-dir}
+@item --no-overwrite-dir
+
+Preserve metadata of existing directories when extracting files
+from an archive.  @xref{Overwrite Old Files}.
+
+@opsummary{no-quote-chars}
 @item --no-quote-chars=@var{string}
-Do not quote characters from @var{string}, even if the selected
-quoting style implies they should be quoted (@pxref{quoting styles}).
+Remove characters listed in @var{string} from the list of quoted
+characters set by the previous @option{--quote-chars} option
+(@pxref{quoting styles}).
 
-@opindex no-recursion, summary
+@opsummary{no-recursion}
 @item --no-recursion
 
 With this option, @command{tar} will not recurse into directories.
 @xref{recurse}.
 
-@opindex no-same-owner, summary
+@opsummary{no-same-owner}
 @item --no-same-owner
 @itemx -o
 
@@ -2610,24 +2767,29 @@ When extracting an archive, do not attempt to preserve the owner
 specified in the @command{tar} archive.  This the default behavior
 for ordinary users.
 
-@opindex no-same-permissions, summary
+@opsummary{no-same-permissions}
 @item --no-same-permissions
 
 When extracting an archive, subtract the user's umask from files from
 the permissions specified in the archive.  This is the default behavior
 for ordinary users.
 
-@opindex no-wildcards, summary
+@opsummary{no-unquote}
+@item --no-unquote
+Treat all input file or member names literally, do not interpret
+escape sequences.  @xref{input name quoting}.
+
+@opsummary{no-wildcards}
 @item --no-wildcards
 Do not use wildcards.
 @xref{controlling pattern-matching}.
 
-@opindex no-wildcards-match-slash, summary
+@opsummary{no-wildcards-match-slash}
 @item --no-wildcards-match-slash
 Wildcards do not match @samp{/}.
 @xref{controlling pattern-matching}.
 
-@opindex null, summary
+@opsummary{null}
 @item --null
 
 When @command{tar} is using the @option{--files-from} option, this option
@@ -2635,7 +2797,7 @@ instructs @command{tar} to expect filenames terminated with @option{NUL}, so
 @command{tar} can correctly work with file names that contain newlines.
 @xref{nul}.
 
-@opindex numeric-owner, summary
+@opsummary{numeric-owner}
 @item --numeric-owner
 
 This option will notify @command{tar} that it should use numeric user
@@ -2643,18 +2805,19 @@ and group IDs when creating a @command{tar} file, rather than names.
 @xref{Attributes}.
 
 @item -o
-When extracting files, this option is a synonym for
+The function of this option depends on the action @command{tar} is
+performing.  When extracting files, @option{-o} is a synonym for
 @option{--no-same-owner}, i.e.  it prevents @command{tar} from
 restoring ownership of files being extracted.
 
-When creating an archive, @option{-o} is a synonym for
+When creating an archive, it is a synonym for
 @option{--old-archive}.  This behavior is for compatibility
 with previous versions of @GNUTAR{}, and will be
 removed in the future releases.
 
 @xref{Changes}, for more information.
 
-@opindex occurrence, summary
+@opsummary{occurrence}
 @item --occurrence[=@var{number}]
 
 This option can be used in conjunction with one of the subcommands
@@ -2670,14 +2833,14 @@ tar -x -f archive.tar --occurrence filename
 @end smallexample
 
 @noindent
-will extract the first occurrence of @file{filename} from @file{archive.tar}
+will extract the first occurrence of the member @file{filename} from @file{archive.tar}
 and will terminate without scanning to the end of the archive.
 
-@opindex old-archive, summary
+@opsummary{old-archive}
 @item --old-archive
 Synonym for @option{--format=v7}.
 
-@opindex one-file-system, summary
+@opsummary{one-file-system}
 @item --one-file-system
 Used when creating an archive.  Prevents @command{tar} from recursing into
 directories that are on different file systems from the current
@@ -2685,40 +2848,54 @@ directory @footnote{Earlier versions of @GNUTAR{} understood @option{-l} as a
 synonym for @option{--one-file-system}.  This has changed in version
 1.15.91. @xref{Changes}, for more information.}.
 
-@opindex overwrite, summary
+@opsummary{overwrite}
 @item --overwrite
 
 Overwrite existing files and directory metadata when extracting files
 from an archive.  @xref{Overwrite Old Files}.
 
-@opindex overwrite-dir, summary
+@opsummary{overwrite-dir}
 @item --overwrite-dir
 
 Overwrite the metadata of existing directories when extracting files
 from an archive.  @xref{Overwrite Old Files}.
 
-@opindex owner, summary
+@opsummary{owner}
 @item --owner=@var{user}
 
 Specifies that @command{tar} should use @var{user} as the owner of members
 when creating archives, instead of the user associated with the source
 file.  @var{user} is first decoded as a user symbolic name, but if
 this interpretation fails, it has to be a decimal numeric user ID.
-@FIXME-xref{}
-
-There is no value indicating a missing number, and @samp{0} usually means
-@code{root}.  Some people like to force @samp{0} as the value to offer in
-their distributions for the owner of files, because the @code{root} user is
-anonymous anyway, so that might as well be the owner of anonymous archives.
+@xref{override}.
 
 This option does not affect extraction from archives.
 
-@opindex quote-chars, summary
+@opsummary{transform}
+@item --transform=@var{sed-expr}
+
+Transform file or member names using @command{sed} replacement expression
+@var{sed-expr}.  For example,
+
+@smallexample
+$ @kbd{tar cf archive.tar --transform 's,^\./,usr/,' .}
+@end smallexample
+
+@noindent
+will add to @file{archive} files from the current working directory,
+replacing initial @samp{./} prefix with @samp{usr/}. For the detailed
+discussion, @xref{transform}.
+
+To see transformed member names in verbose listings, use
+@option{--show-transformed-names} option
+(@pxref{show-transformed-names}).  
+
+@opsummary{quote-chars}
 @item --quote-chars=@var{string}
 Always quote characters from @var{string}, even if the selected
 quoting style would not quote them (@pxref{quoting styles}).
 
-@opindex quoting-style, summary
+@opsummary{quoting-style}
 @item --quoting-style=@var{style}
 Set quoting style to use when printing member and file names
 (@pxref{quoting styles}). Valid @var{style} values are:
@@ -2727,139 +2904,36 @@ Set quoting style to use when printing member and file names
 style is @code{escape}, unless overridden while configuring the
 package.
 
-@opindex pax-option, summary
+@opsummary{pax-option}
 @item --pax-option=@var{keyword-list}
-@FIXME{Such a detailed description does not belong there, move it elsewhere.}
 This option is meaningful only with @acronym{POSIX.1-2001} archives
 (@pxref{posix}).  It modifies the way @command{tar} handles the
 extended header keywords.  @var{Keyword-list} is a comma-separated
-list of keyword options, each keyword option taking one of
-the following forms:
-
-@table @asis
-@item delete=@var{pattern}
-When used with one of archive-creation commands,
-this option instructs @command{tar} to omit from extended header records
-that it produces any keywords matching the string @var{pattern}.
-
-When used in extract or list mode, this option instructs tar
-to ignore any keywords matching the given @var{pattern} in the extended
-header records.  In both cases, matching is performed using the pattern
-matching notation described in @acronym{POSIX 1003.2}, 3.13
-(See @cite{glob(7)}). For example:
-
-@smallexample
---pax-option delete=security.*
-@end smallexample
-
-would suppress security-related information.
-
-@item exthdr.name=@var{string}
-
-This keyword allows user control over the name that is written into the
-ustar header blocks for the extended headers.  The name is obtained
-from @var{string} after making the following substitutions:
-
-@multitable @columnfractions .30 .70
-@headitem Meta-character @tab Replaced By
-@item %d @tab  The directory name of the file, equivalent to the
-result of the @command{dirname} utility on the translated pathname.
-@item %f @tab  The filename of the file, equivalent to the result
-of the @command{basename} utility on the translated pathname.
-@item %p @tab  The process ID of the @command{tar} process.
-@item %% @tab  A @samp{%} character.
-@end multitable
-
-Any other @samp{%} characters in @var{string} produce undefined
-results.
-
-If no option @samp{exthdr.name=string} is specified, @command{tar}
-will use the following default value:
-
-@smallexample
-%d/PaxHeaders.%p/%f
-@end smallexample
-
-@item globexthdr.name=@var{string}
-This keyword allows user control over the name that is written into
-the ustar header blocks for global extended header records.  The name
-is obtained from the contents of @var{string}, after making
-the following substitutions:
-
-@multitable @columnfractions .30 .70
-@headitem Meta-character @tab Replaced By
-@item %n @tab An integer that represents the
-sequence number of the global extended header record in the archive,
-starting at 1.
-@item %p @tab The process ID of the @command{tar} process.
-@item %% @tab A @samp{%} character.
-@end multitable
+list of keyword options.  @xref{PAX keywords}, for a detailed
+discussion.
 
-Any other @samp{%} characters in @var{string} produce undefined results.
-
-If no option @samp{globexthdr.name=string} is specified, @command{tar}
-will use the following default value:
-
-@smallexample
-$TMPDIR/GlobalHead.%p.%n
-@end smallexample
-
-@noindent
-where @samp{$TMPDIR} represents the value of the @var{TMPDIR}
-environment variable.  If @var{TMPDIR} is not set, @command{tar}
-uses @samp{/tmp}.
-
-@item @var{keyword}=@var{value}
-When used with one of archive-creation commands, these keyword/value pairs
-will be included at the beginning of the archive in a global extended
-header record.  When used with one of archive-reading commands,
-@command{tar} will behave as if it has encountered these keyword/value
-pairs at the beginning of the archive in a global extended header
-record.
-
-@item @var{keyword}:=@var{value}
-When used with one of archive-creation commands, these keyword/value pairs
-will be included as records at the beginning of an extended header for
-each file.  This is effectively equivalent to @var{keyword}=@var{value}
-form except that it creates no global extended header records.
-
-When used with one of archive-reading commands, @command{tar} will
-behave as if these keyword/value pairs were included as records at the
-end of each extended header; thus, they will override any global or
-file-specific extended header record keywords of the same names.
-For example, in the command:
-
-@smallexample
-tar --format=posix --create \
-    --file archive --pax-option gname:=user .
-@end smallexample
-
-the group name will be forced to a new value for all files
-stored in the archive.
-@end table
-
-@opindex portability, summary
+@opsummary{portability}
 @item --portability
 @itemx --old-archive
 Synonym for @option{--format=v7}.
 
-@opindex posix, summary
+@opsummary{posix}
 @item --posix
 Same as @option{--format=posix}.
 
-@opindex preserve, summary
+@opsummary{preserve}
 @item --preserve
 
 Synonymous with specifying both @option{--preserve-permissions} and
 @option{--same-order}.  @xref{Setting Access Permissions}.
 
-@opindex preserve-order, summary
+@opsummary{preserve-order}
 @item --preserve-order
 
 (See @option{--same-order}; @pxref{Reading}.)
 
-@opindex preserve-permissions, summary
-@opindex same-permissions, summary
+@opsummary{preserve-permissions}
+@opsummary{same-permissions}
 @item --preserve-permissions
 @itemx --same-permissions
 @itemx -p
@@ -2870,58 +2944,58 @@ that number as the permissions to create the destination file.
 Specifying this option instructs @command{tar} that it should use the
 permissions directly from the archive.  @xref{Setting Access Permissions}.
 
-@opindex read-full-records, summary
+@opsummary{read-full-records}
 @item --read-full-records
 @itemx -B
 
 Specifies that @command{tar} should reblock its input, for reading
 from pipes on systems with buggy implementations.  @xref{Reading}.
 
-@opindex record-size, summary
+@opsummary{record-size}
 @item --record-size=@var{size}
 
 Instructs @command{tar} to use @var{size} bytes per record when accessing the
 archive.  @xref{Blocking Factor}.
 
-@opindex recursion, summary
+@opsummary{recursion}
 @item --recursion
 
 With this option, @command{tar} recurses into directories.
 @xref{recurse}.
 
-@opindex recursive-unlink, summary
+@opsummary{recursive-unlink}
 @item --recursive-unlink
 
 Remove existing
 directory hierarchies before extracting directories of the same name
 from the archive.  @xref{Recursive Unlink}.
 
-@opindex remove-files, summary
+@opsummary{remove-files}
 @item --remove-files
 
 Directs @command{tar} to remove the source file from the file system after
 appending it to an archive.  @xref{remove files}.
 
-@opindex restrict, summary
+@opsummary{restrict}
 @item --restrict
 
 Disable use of some potentially harmful @command{tar} options.
 Currently this option disables shell invocaton from multi-volume menu
 (@pxref{Using Multiple Tapes}).
 
-@opindex rmt-command, summary
+@opsummary{rmt-command}
 @item --rmt-command=@var{cmd}
 
 Notifies @command{tar} that it should use @var{cmd} instead of
 the default @file{/usr/libexec/rmt} (@pxref{Remote Tape Server}).
 
-@opindex rsh-command, summary
+@opsummary{rsh-command}
 @item --rsh-command=@var{cmd}
 
 Notifies @command{tar} that is should use @var{cmd} to communicate with remote
 devices.  @xref{Device}.
 
-@opindex same-order, summary
+@opsummary{same-order}
 @item --same-order
 @itemx --preserve-order
 @itemx -s
@@ -2931,7 +3005,7 @@ small amounts of memory.  It informs @command{tar} that the list of file
 arguments has already been sorted to match the order of files in the
 archive.  @xref{Reading}.
 
-@opindex same-owner, summary
+@opsummary{same-owner}
 @item --same-owner
 
 When extracting an archive, @command{tar} will attempt to preserve the owner
@@ -2939,12 +3013,12 @@ specified in the @command{tar} archive with this option present.
 This is the default behavior for the superuser; this option has an
 effect only for ordinary users.  @xref{Attributes}.
 
-@opindex same-permissions, summary
+@opsummary{same-permissions}
 @item --same-permissions
 
 (See @option{--preserve-permissions}; @pxref{Setting Access Permissions}.)
 
-@opindex show-defaults, summary
+@opsummary{show-defaults}
 @item --show-defaults
 
 Displays the default options used by @command{tar} and exits
@@ -2957,28 +3031,31 @@ $ tar --show-defaults
 --rmt-command=/usr/libexec/rmt --rsh-command=/usr/bin/rsh
 @end smallexample
 
-@opindex show-omitted-dirs, summary
+@opsummary{show-omitted-dirs}
 @item --show-omitted-dirs
 
 Instructs @command{tar} to mention directories its skipping over when
 operating on a @command{tar} archive.  @xref{show-omitted-dirs}.
 
-@opindex show-stored-names, summary
-@item --show-stored-names
+@opsummary{show-transformed-names}
+@opsummary{show-stored-names}
+@item --show-transformed-names
+@itemx --show-stored-names
 
-This option has effect only when used in conjunction with one of
-archive creation operations.  It instructs tar to list the member names
+Display file or member names after applying any transformations
+(@pxref{transform}).  In particular, when used in conjunction with one of
+archive creation operations it instructs tar to list the member names
 stored in the archive, as opposed to the actual file
 names.  @xref{listing member and file names}.
 
-@opindex sparse, summary
+@opsummary{sparse}
 @item --sparse
 @itemx -S
 
 Invokes a @acronym{GNU} extension when adding files to an archive that handles
 sparse files efficiently.  @xref{sparse}.
 
-@opindex starting-file, summary
+@opsummary{starting-file}
 @item --starting-file=@var{name}
 @itemx -K @var{name}
 
@@ -2986,7 +3063,7 @@ This option affects extraction only; @command{tar} will skip extracting
 files in the archive until it finds one that matches @var{name}.
 @xref{Scarce}.
 
-@opindex strip-components, summary
+@opsummary{strip-components}
 @item --strip-components=@var{number}
 Strip given @var{number} of leading components from file names before
 extraction.@footnote{This option was called @option{--strip-path} in
@@ -2998,47 +3075,49 @@ tar --extract --file archive.tar --strip-components=2
 @end smallexample
 
 @noindent
-would extracted this file to file @file{name}.
+would extract this file to file @file{name}.
 
-@opindex suffix, summary
+@opsummary{suffix}, summary
 @item --suffix=@var{suffix}
 
 Alters the suffix @command{tar} uses when backing up files from the default
 @samp{~}.  @xref{backup}.
 
-@opindex tape-length, summary
+@opsummary{tape-length}
 @item --tape-length=@var{num}
 @itemx -L @var{num}
 
 Specifies the length of tapes that @command{tar} is writing as being
 @w{@var{num} x 1024} bytes long.  @xref{Using Multiple Tapes}.
 
-@opindex test-label, summary
+@opsummary{test-label}
 @item --test-label
 
 Reads the volume label.  If an argument is specified, test whether it
 matches the volume label.  @xref{--test-label option}.
 
-@opindex to-command, summary
+@opsummary{to-command}
 @item --to-command=@var{command}
 
 During extraction @command{tar} will pipe extracted files to the
-standard input of @var{command}. @xref{Writing to an External Program}.
+standard input of @var{command}.  @xref{Writing to an External Program}.
 
-@opindex to-stdout, summary
+@opsummary{to-stdout}
 @item --to-stdout
 @itemx -O
 
 During extraction, @command{tar} will extract files to stdout rather
 than to the file system.  @xref{Writing to Standard Output}.
 
-@opindex totals, summary
-@item --totals
+@opsummary{totals}
+@item --totals[=@var{signo}]
 
-Displays the total number of bytes written after creating an archive.
-@xref{verbose}.
+Displays the total number of bytes transferred when processing an
+archive.  If an argument is given, these data are displayed on
+request, when signal @var{signo} is delivered to @command{tar}.
+@xref{totals}.
 
-@opindex touch, summary
+@opsummary{touch}
 @item --touch
 @itemx -m
 
@@ -3046,36 +3125,41 @@ Sets the data modification time of extracted files to the extraction time,
 rather than the data modification time stored in the archive.
 @xref{Data Modification Times}.
 
-@opindex uncompress, summary
+@opsummary{uncompress}
 @item --uncompress
 
 (See @option{--compress}. @pxref{gzip})
 
-@opindex ungzip, summary
+@opsummary{ungzip}
 @item --ungzip
 
 (See @option{--gzip}. @pxref{gzip})
 
-@opindex unlink-first, summary
+@opsummary{unlink-first}
 @item --unlink-first
 @itemx -U
 
 Directs @command{tar} to remove the corresponding file from the file
 system before extracting it from the archive.  @xref{Unlink First}.
 
-@opindex use-compress-program, summary
+@opsummary{unquote}
+@item --unquote
+Enable unquoting input file or member names (default).  @xref{input
+name quoting}.
+
+@opsummary{use-compress-program}
 @item --use-compress-program=@var{prog}
 
 Instructs @command{tar} to access the archive through @var{prog}, which is
 presumed to be a compression program of some sort.  @xref{gzip}.
 
-@opindex utc, summary
+@opsummary{utc}
 @item --utc
 
 Display file modification dates in @acronym{UTC}.  This option implies
 @option{--verbose}.
 
-@opindex verbose, summary
+@opsummary{verbose}
 @item --verbose
 @itemx -v
 
@@ -3084,33 +3168,33 @@ performing.  This option can be specified multiple times for some
 operations to increase the amount of information displayed.
 @xref{verbose}.
 
-@opindex verify, summary
+@opsummary{verify}
 @item --verify
 @itemx -W
 
 Verifies that the archive was correctly written when creating an
 archive.  @xref{verify}.
 
-@opindex version, summary
+@opsummary{version}
 @item --version
 
 Print information about the program's name, version, origin and legal
 status, all on standard output, and then exit successfully.
 @xref{help}.
 
-@opindex volno-file, summary
+@opsummary{volno-file}
 @item --volno-file=@var{file}
 
-Used in conjunction with @option{--multi-volume}.  @command{tar} will keep track
-of which volume of a multi-volume archive its working in @var{file}.
-@xref{volno-file}.
+Used in conjunction with @option{--multi-volume}.  @command{tar} will
+keep track of which volume of a multi-volume archive its working in
+@var{file}.  @xref{volno-file}.
 
-@opindex wildcards, summary
+@opsummary{wildcards}
 @item --wildcards
 Use wildcards when matching member names with patterns.
 @xref{controlling pattern-matching}.
 
-@opindex wildcards-match-slash, summary
+@opsummary{wildcards-match-slash}
 @item --wildcards-match-slash
 Wildcards match @samp{/}.
 @xref{controlling pattern-matching}.
@@ -3122,178 +3206,95 @@ Wildcards match @samp{/}.
 Here is an alphabetized list of all of the short option forms, matching
 them with the equivalent long option.
 
-@table @option
-
-@item -A
-
-@option{--concatenate}
-
-@item -B
-
-@option{--read-full-records}
-
-@item -C
-
-@option{--directory}
-
-@item -F
-
-@option{--info-script}
-
-@item -G
-
-@option{--incremental}
-
-@item -K
-
-@option{--starting-file}
-
-@item -L
-
-@option{--tape-length}
-
-@item -M
-
-@option{--multi-volume}
-
-@item -N
-
-@option{--newer}
-
-@item -O
-
-@option{--to-stdout}
-
-@item -P
-
-@option{--absolute-names}
-
-@item -R
-
-@option{--block-number}
-
-@item -S
-
-@option{--sparse}
-
-@item -T
-
-@option{--files-from}
-
-@item -U
-
-@option{--unlink-first}
+@multitable @columnfractions 0.20 0.80
+@headitem Short Option  @tab Reference
 
-@item -V
-
-@option{--label}
-
-@item -W
+@item -A @tab @ref{--concatenate}.
 
-@option{--verify}
+@item -B @tab @ref{--read-full-records}.
 
-@item -X
+@item -C @tab @ref{--directory}.
 
-@option{--exclude-from}
+@item -F @tab @ref{--info-script}.
 
-@item -Z
+@item -G @tab @ref{--incremental}.
 
-@option{--compress}
+@item -K @tab @ref{--starting-file}.
 
-@item -b
+@item -L @tab @ref{--tape-length}.
 
-@option{--blocking-factor}
+@item -M @tab @ref{--multi-volume}.
 
-@item -c
+@item -N @tab @ref{--newer}.
 
-@option{--create}
+@item -O @tab @ref{--to-stdout}.
 
-@item -d
+@item -P @tab @ref{--absolute-names}.
 
-@option{--compare}
+@item -R @tab @ref{--block-number}.
 
-@item -f
+@item -S @tab @ref{--sparse}.
 
-@option{--file}
+@item -T @tab @ref{--files-from}.
 
-@item -g
+@item -U @tab @ref{--unlink-first}.
 
-@option{--listed-incremental}
+@item -V @tab @ref{--label}.
 
-@item -h
+@item -W @tab @ref{--verify}.
 
-@option{--dereference}
+@item -X @tab @ref{--exclude-from}.
 
-@item -i
+@item -Z @tab @ref{--compress}.
 
-@option{--ignore-zeros}
+@item -b @tab @ref{--blocking-factor}.
 
-@item -j
+@item -c @tab @ref{--create}.
 
-@option{--bzip2}
+@item -d @tab @ref{--compare}.
 
-@item -k
+@item -f @tab @ref{--file}.
 
-@option{--keep-old-files}
+@item -g @tab @ref{--listed-incremental}.
 
-@item -l
+@item -h @tab @ref{--dereference}.
 
-@option{--one-file-system}.  Use of this short option is deprecated.  It
-is retained for compatibility with the earlier versions of GNU
-@command{tar}, and will be changed in future releases.
+@item -i @tab @ref{--ignore-zeros}.
 
-@xref{Changes}, for more information.
+@item -j @tab @ref{--bzip2}.
 
-@item -m
+@item -k @tab @ref{--keep-old-files}.
 
-@option{--touch}
+@item -l @tab @ref{--check-links}.
 
-@item -o
+@item -m @tab @ref{--touch}.
 
-When creating --- @option{--no-same-owner}, when extracting ---
-@option{--portability}.
+@item -o @tab When creating, @ref{--no-same-owner}, when extracting ---
+@ref{--portability}. 
 
 The later usage is deprecated.  It is retained for compatibility with
 the earlier versions of @GNUTAR{}.  In the future releases
 @option{-o} will be equivalent to @option{--no-same-owner} only.
 
-@item -p
-
-@option{--preserve-permissions}
-
-@item -r
-
-@option{--append}
+@item -p @tab @ref{--preserve-permissions}.
 
-@item -s
+@item -r @tab @ref{--append}.
 
-@option{--same-order}
+@item -s @tab @ref{--same-order}.
 
-@item -t
+@item -t @tab @ref{--list}.
 
-@option{--list}
+@item -u @tab @ref{--update}.
 
-@item -u
+@item -v @tab @ref{--verbose}.
 
-@option{--update}
+@item -w @tab @ref{--interactive}.
 
-@item -v
+@item -x @tab @ref{--extract}.
 
-@option{--verbose}
+@item -z @tab @ref{--gzip}.
 
-@item -w
-
-@option{--interactive}
-
-@item -x
-
-@option{--extract}
-
-@item -z
-
-@option{--gzip}
-
-@end table
+@end multitable
 
 @node help
 @section @GNUTAR{} documentation
@@ -3308,10 +3309,10 @@ origin and legal status, all on standard output, and then exit
 successfully.  For example, @w{@samp{tar --version}} might print:
 
 @smallexample
-tar (GNU tar) 1.15.2
+tar (GNU tar) @value{VERSION}
 Copyright (C) 2006 Free Software Foundation, Inc.
-This is free software.  You may redistribute copies of it under the terms of
-the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
+This is free software.  You may redistribute copies of it under the terms
+of the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
 There is NO WARRANTY, to the extent permitted by law.
 
 Written by John Gilmore and Jay Fenlason.
@@ -3331,7 +3332,7 @@ paxutils) 3.2}}}.
 
 @cindex Obtaining help
 @cindex Listing all @command{tar} options
-@opindex help, introduction
+@xopindex{help, introduction}
 Another thing you might want to do is checking the spelling or meaning
 of some particular @command{tar} option, without resorting to this
 manual, for once you have carefully read it.  @GNUTAR{}
@@ -3374,7 +3375,7 @@ The short help output is quite succinct, and you might have to get
 back to the full documentation for precise points.  If you are reading
 this paragraph, you already have the @command{tar} manual in some
 form.  This manual is available in a variety of forms from
-@url{http://www.gnu.org/software/tar/manual}.  It may printed out of the @GNUTAR{}
+@url{http://www.gnu.org/software/tar/manual}.  It may be printed out of the @GNUTAR{}
 distribution, provided you have @TeX{} already installed somewhere,
 and a laser printer around.  Just configure the distribution, execute
 the command @w{@samp{make dvi}}, then print @file{doc/tar.dvi} the
@@ -3405,10 +3406,15 @@ values in the form of @command{tar} command line options:
 @smallexample
 @group
 @kbd{tar --show-defaults}
---format=gnu -f- -b20 --rmt-command=/etc/rmt --rsh-command=/usr/bin/rsh
+--format=gnu -f- -b20 --quoting-style=escape 
+--rmt-command=/etc/rmt --rsh-command=/usr/bin/rsh
 @end group
 @end smallexample
 
+@noindent
+Notice, that this option outputs only one line.  The example output above
+has been split to fit page boundaries.
+
 @noindent
 The above output shows that this version of @GNUTAR{} defaults to
 using @samp{gnu} archive format (@pxref{Formats}), it uses standard
@@ -3446,11 +3452,11 @@ monitoring @command{tar}.
 With @option{--create} or @option{--extract}, @option{--verbose} used
 once just prints the names of the files or members as they are processed.
 Using it twice causes @command{tar} to print a longer listing
-(reminiscent of @samp{ls -l}) for each member.  Since @option{--list}
-already prints  the names of the members, @option{--verbose} used once
-with @option{--list} causes @command{tar} to print an @samp{ls -l}
-type listing of the files in the archive.  The following examples both
-extract members with long list output:
+(@xref{verbose member listing}, for the description) for each member.
+Since @option{--list} already prints  the names of the members,
+@option{--verbose} used once with @option{--list} causes @command{tar}
+to print an @samp{ls -l} type listing of the files in the archive.
+The following examples both extract members with long list output:
 
 @smallexample
 $ @kbd{tar --extract --file=archive.tar --verbose --verbose}
@@ -3467,35 +3473,101 @@ If @option{--index-file=@var{file}} is specified, @command{tar} sends
 verbose output to @var{file} rather than to standard output or standard
 error.
 
+@anchor{totals}
 @cindex Obtaining total status information
 @opindex totals
-The @option{--totals} option---which is only meaningful when used with
-@option{--create} (@option{-c})---causes @command{tar} to print the total
-amount written to the archive, after it has been fully created.
+The @option{--totals} option causes @command{tar} to print on the
+standard error the total amount of bytes transferred when processing
+an archive.  When creating or appending to an archive, this option
+prints the number of bytes written to the archive and the average
+speed at which they have been written, e.g.:
 
-@cindex Progress information
-@opindex checkpoint
-The @option{--checkpoint} option prints an occasional message
-as @command{tar} reads or writes the archive.  In fact, it prints
-a message each 10 records read or written.  It is designed for
-those who don't need the more detailed (and voluminous) output of
-@option{--block-number} (@option{-R}), but do want visual confirmation
-that @command{tar} is actually making forward progress.
+@smallexample
+@group
+$ @kbd{tar -c -f archive.tar --totals /home}
+Total bytes written: 7924664320 (7.4GiB, 85MiB/s)
+@end group
+@end smallexample
 
-@FIXME{There is some confusion here.  It seems that -R once wrote a
-message at @samp{every} record read or written.}
+When reading an archive, this option displays the number of bytes
+read:
 
-@opindex show-omitted-dirs
-@anchor{show-omitted-dirs}
-The @option{--show-omitted-dirs} option, when reading an archive---with
-@option{--list} or @option{--extract}, for example---causes a message
-to be printed for each directory in the archive which is skipped.
-This happens regardless of the reason for skipping: the directory might
-not have been named on the command line (implicitly or explicitly),
-it might be excluded by the use of the @option{--exclude=@var{pattern}} option, or
-some other reason.
+@smallexample
+@group
+$ @kbd{tar -x -f archive.tar --totals}
+Total bytes read: 7924664320 (7.4GiB, 95MiB/s)
+@end group
+@end smallexample
 
-@opindex block-number
+Finally, when deleting from an archive, the @option{--totals} option
+displays both numbers plus number of bytes removed from the archive:
+
+@smallexample
+@group
+$ @kbd{tar --delete -f foo.tar --totals --wildcards '*~'}
+Total bytes read: 9543680 (9.2MiB, 201MiB/s)
+Total bytes written: 3829760 (3.7MiB, 81MiB/s)
+Total bytes deleted: 1474048
+@end group
+@end smallexample
+
+You can also obtain this information on request.  When
+@option{--totals} is used with an argument, this argument is
+interpreted as a symbolic name of a signal, upon delivery of which the
+statistics is to be printed:
+
+@table @option
+@item --totals=@var{signo}
+Print statistics upon delivery of signal @var{signo}.  Valid arguments
+are: @code{SIGHUP}, @code{SIGQUIT}, @code{SIGINT}, @code{SIGUSR1} and
+@code{SIGUSR2}.  Shortened names without @samp{SIG} prefix are also
+accepted. 
+@end table
+
+Both forms of @option{--totals} option can be used simultaneously.
+Thus, @kbd{tar -x --totals --totals=USR1} instructs @command{tar} to
+extract all members from its default archive and print statistics
+after finishing the extraction, as well as when receiving signal
+@code{SIGUSR1}. 
+
+@anchor{Progress information}
+@cindex Progress information
+@opindex checkpoint
+The @option{--checkpoint} option prints an occasional message
+as @command{tar} reads or writes the archive.  It is designed for
+those who don't need the more detailed (and voluminous) output of
+@option{--block-number} (@option{-R}), but do want visual confirmation
+that @command{tar} is actually making forward progress.  By default it
+prints a message each 10 records read or written.  This can be changed
+by giving it a numeric argument after an equal sign:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000} /var
+tar: Write checkpoint 1000
+tar: Write checkpoint 2000
+tar: Write checkpoint 3000
+@end smallexample
+
+This example shows the default checkpoint message used by
+@command{tar}.  If you place a dot immediately after the equal
+sign, it will print a @samp{.} at each checkpoint.  For example:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=.1000} /var
+...
+@end smallexample
+
+@opindex show-omitted-dirs
+@anchor{show-omitted-dirs}
+The @option{--show-omitted-dirs} option, when reading an archive---with
+@option{--list} or @option{--extract}, for example---causes a message
+to be printed for each directory in the archive which is skipped.
+This happens regardless of the reason for skipping: the directory might
+not have been named on the command line (implicitly or explicitly),
+it might be excluded by the use of the
+@option{--exclude=@var{pattern}} option, or some other reason.
+
+@opindex block-number
 @cindex Block number where error occurred
 @anchor{block-number}
 If @option{--block-number} (@option{-R}) is used, @command{tar} prints, along with
@@ -3579,7 +3651,7 @@ chapter of this manual.  This section provides some complementary notes
 for these operations.
 
 @table @option
-@opindex create, complementary notes
+@xopindex{create, complementary notes}
 @item --create
 @itemx -c
 
@@ -3626,7 +3698,7 @@ the following commands:
 @kbd{tar cfT empty-archive.tar /dev/null}
 @end smallexample
 
-@opindex extract, complementary notes
+@xopindex{extract, complementary notes}
 @item --extract
 @itemx --get
 @itemx -x
@@ -3642,7 +3714,7 @@ be made available again with full date localization support, once
 ready.  In the meantime, programs not being localizable for dates
 should prefer international dates, that's really the way to go.
 
-Look up @url{http://www.ft.uni-erlangen.de/~mskuhn/iso-time.html} if you
+Look up @url{http://www.cl.cam.ac.uk/@/~mgk25/@/iso-time.html} if you
 are curious, it contains a detailed explanation of the ISO 8601 standard.
 
 @end table
@@ -3671,7 +3743,6 @@ it still introduces the info in the chapter correctly : ).}
 * concatenate::
 * delete::
 * compare::
-* quoting styles::
 @end menu
 
 @node Operations
@@ -3693,8 +3764,8 @@ in the last chapter.  As you may recall, the directory is called
 @samp{collection.tar} and @samp{music.tar}.
 
 We will also use the archive files @samp{afiles.tar} and
-@samp{bfiles.tar}.  @samp{afiles.tar} contains the members @samp{apple},
-@samp{angst}, and @samp{aspic} @samp{bfiles.tar} contains the members
+@samp{bfiles.tar}.  The archive @samp{afiles.tar} contains the members @samp{apple},
+@samp{angst}, and @samp{aspic}; @samp{bfiles.tar} contains the members
 @samp{./birds}, @samp{baboon}, and @samp{./box}.
 
 Unless we state otherwise, all practicing you do and examples you follow
@@ -3849,7 +3920,7 @@ $ @kbd{tar --list --file=collection.tar}
 @end smallexample
 
 @node multiple
-@subsubsection Multiple Files with the Same Name
+@subsubsection Multiple Members with the Same Name
 
 You can use @option{--append} (@option{-r}) to add copies of files
 which have been updated since the archive was created.  (However, we
@@ -3938,8 +4009,7 @@ charles and/or mib/thomas/dave shevett..}
 Both @option{--update} and @option{--append} work by adding to the end
 of the archive.  When you extract a file from the archive, only the
 version stored last will wind up in the file system, unless you use
-the @option{--backup} option.  @FIXME-ref{Multiple Members with the
-Same Name}
+the @option{--backup} option.  @xref{multiple}, for a detailed discussion.
 
 @menu
 * how to update::
@@ -4007,9 +4077,8 @@ To use @option{--concatenate}, give the first archive with
 @option{--file} option and name the rest of archives to be
 concatenated on the command line.  The members, and their member
 names, will be copied verbatim from those archives to the first one.
-@FIXME-ref{This can cause multiple members to have the same name, for
-information on how this affects reading the archive, Multiple
-Members with the Same Name.}
+@footnote{This can cause multiple members to have the same name, for
+information on how this affects reading the archive, @ref{multiple}.}
 The new, concatenated archive will be called by the same name as the
 one given with the @option{--file} option.  As usual, if you omit
 @option{--file}, @command{tar} will use the value of the environment
@@ -4173,139 +4242,127 @@ blues
 tar: funk not found in archive
 @end smallexample
 
-The spirit behind the @option{--compare} (@option{--diff}, @option{-d}) option is to check whether the
-archive represents the current state of files on disk, more than validating
-the integrity of the archive media.  For this later goal, @xref{verify}.
+The spirit behind the @option{--compare} (@option{--diff},
+@option{-d}) option is to check whether the archive represents the
+current state of files on disk, more than validating the integrity of
+the archive media.  For this later goal, @xref{verify}. 
 
-@node quoting styles
-@subsection Quoting Member Names
-@UNREVISED{}
+@node create options
+@section Options Used by @option{--create}
 
-@smallexample
-@group
-$ @kbd{ls}
-a\ttab
-a\nnewline
-a\ space
-a"double"quote
-a'single'quote
-a\\backslash
-$ @kbd{tar cf arch .}
-@end group
-@end smallexample
+@xopindex{create, additional options}
+The previous chapter described the basics of how to use
+@option{--create} (@option{-c}) to create an archive from a set of files.
+@xref{create}.  This section described advanced options to be used with
+@option{--create}.
 
-@smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=literal}
-./
-./a space
-./a'single'quote
-./a"double"quote
-./a\backslash
-./a    tab
-./a
-newline
-@end group
-@end smallexample
+@menu
+* override::                  Overriding File Metadata.
+* Ignore Failed Read::
+@end menu
 
-@smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=shell}
-./
-'./a space'
-'./a'\''single'\''quote'
-'./a"double"quote'
-'./a\backslash'
-'./a   tab'
-'./a
-newline'
-@end group
-@end smallexample
+@node override
+@subsection Overriding File Metadata
 
-@smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=shell-always}
-'./'
-'./a space'
-'./a'\''single'\''quote'
-'./a"double"quote'
-'./a\backslash'
-'./a   tab'
-'./a
-newline'
-@end group
-@end smallexample
+As described above, a @command{tar} archive keeps, for each member it contains,
+its @dfn{metadata}, such as modification time, mode and ownership of
+the file.  @GNUTAR{} allows to replace these data with other values
+when adding files to the archive.  The options described in this
+section affect creation of archives of any type.  For POSIX archives,
+see also @ref{PAX keywords}, for additional ways of controlling
+metadata, stored in the archive.
+
+@table @option
+@opindex mode
+@item --mode=@var{permissions}
+
+When adding files to an archive, @command{tar} will use
+@var{permissions} for the archive members, rather than the permissions
+from the files.  @var{permissions} can be specified either as an octal
+number or as symbolic permissions, like with
+@command{chmod} (@xref{File permissions, Permissions, File
+permissions, fileutils, @acronym{GNU} file utilities}.  This reference
+also has useful information for those not being overly familiar with
+the UNIX permission system).  Using latter syntax allows for
+more flexibility.  For example, the value @samp{a+rw} adds read and write
+permissions for everybody, while retaining executable bits on directories
+or on any other file already marked as executable:
 
 @smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=c}
-"./"
-"./a space"
-"./a'single'quote"
-"./a\"double\"quote"
-"./a\\backslash"
-"./a\ttab"
-"./a\nnewline"
-@end group
+$ @kbd{tar -c -f archive.tar --mode='a+rw' .}
 @end smallexample
 
+@item --mtime=@var{date}
+@opindex mtime
+
+When adding files to an archive, @command{tar} will use @var{date} as
+the modification time of members when creating archives, instead of
+their actual modification times.  The argument @var{date} can be
+either a textual date representation in almost arbitrary format
+(@pxref{Date input formats}) or a name of the existing file, starting
+with @samp{/} or @samp{.}.  In the latter case, the modification time
+of that file will be used.
+
+The following example will set the modification date to 00:00:00 UTC,
+January 1, 1970:
+
 @smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=escape}
-./
-./a space
-./a'single'quote
-./a"double"quote
-./a\\backslash
-./a\ttab
-./a\nnewline
-@end group
+$ @kbd{tar -c -f archive.tar --mtime='1970-01-01' .}
 @end smallexample
 
+@noindent
+When used with @option{--verbose} (@pxref{verbose tutorial}) @GNUTAR{}
+will try to convert the specified date back to its textual
+representation and compare it with the one given with
+@option{--mtime} options.  If the two dates differ, @command{tar} will
+print a warning saying what date it will use.  This is to help user
+ensure he is using the right date.
+
+For example:
+
 @smallexample
-@group
-$ @kbd{tar tf arch --quoting-style=locale}
-`./'
-`./a space'
-`./a\'single\'quote'
-`./a"double"quote'
-`./a\\backslash'
-`./a\ttab'
-`./a\nnewline'
-@end group
+$ @kbd{tar -c -f archive.tar -v --mtime=yesterday .}
+tar: Option --mtime: Treating date `yesterday' as 2006-06-20
+13:06:29.152478
+@dots{}
 @end smallexample
 
+@item --owner=@var{user}
+@opindex owner
+
+Specifies that @command{tar} should use @var{user} as the owner of members
+when creating archives, instead of the user associated with the source
+file.  The argument @var{user} can be either an existing user symbolic
+name, or a decimal numeric user ID.
+
+There is no value indicating a missing number, and @samp{0} usually means
+@code{root}.  Some people like to force @samp{0} as the value to offer in
+their distributions for the owner of files, because the @code{root} user is
+anonymous anyway, so that might as well be the owner of anonymous
+archives.  For example:
+
 @smallexample
 @group
-$ @kbd{tar tf arch --quoting-style=clocale}
-"./"
-"./a space"
-"./a'single'quote"
-"./a\"double\"quote"
-"./a\\backslash"
-"./a\ttab"
-"./a\nnewline"
+$ @kbd{tar -c -f archive.tar --owner=0 .}
+# @r{Or:}
+$ @kbd{tar -c -f archive.tar --owner=root .}
 @end group
 @end smallexample
 
-@node create options
-@section Options Used by @option{--create}
-
-@opindex create, additional options
-The previous chapter described the basics of how to use
-@option{--create} (@option{-c}) to create an archive from a set of files.
-@xref{create}.  This section described advanced options to be used with
-@option{--create}.
+@item --group=@var{group}
+@opindex group
 
-@menu
-* Ignore Failed Read::
-@end menu
+Files added to the @command{tar} archive will have a group id of @var{group},
+rather than the group from the source file.  The argument @var{group}
+can be either an existing group symbolic name, or a decimal numeric group ID.
+@end table
 
 @node Ignore Failed Read
 @subsection Ignore Fail Read
 
 @table @option
 @item --ignore-failed-read
+@opindex ignore-failed-read
 Do not exit with nonzero on unreadable files or directories.
 @end table
 
@@ -4313,7 +4370,7 @@ Do not exit with nonzero on unreadable files or directories.
 @section Options Used by @option{--extract}
 @UNREVISED
 
-@opindex extract, additional options
+@xopindex{extract, additional options}
 The previous chapter showed how to use @option{--extract} to extract
 an archive into the file system.  Various options cause @command{tar} to
 extract more information than just file contents, such as the owner,
@@ -4431,7 +4488,7 @@ encountered while reading an archive.  Use in conjunction with
 @node Dealing with Old Files
 @unnumberedsubsubsec Options Controlling the Overwriting of Existing Files
 
-@opindex overwrite-dir, introduced
+@xopindex{overwrite-dir, introduced}
 When extracting files, if @command{tar} discovers that the extracted
 file already exists, it normally replaces the file by removing it before
 extracting it, to prevent confusion in the presence of hard or symbolic
@@ -4443,14 +4500,14 @@ default behavior.  To be more cautious and preserve the metadata of
 such a directory, use the @option{--no-overwrite-dir} option.
 
 @cindex Overwriting old files, prevention
-@opindex keep-old-files, introduced
+@xopindex{keep-old-files, introduced}
 To be even more cautious and prevent existing files from being replaced, use
 the @option{--keep-old-files} (@option{-k}) option.  It causes @command{tar} to refuse
 to replace or update a file that already exists, i.e., a file with the
 same name as an archive member prevents extraction of that archive
 member.  Instead, it reports an error.
 
-@opindex overwrite, introduced
+@xopindex{overwrite, introduced}
 To be more aggressive about altering existing files, use the
 @option{--overwrite} option.  It causes @command{tar} to overwrite
 existing files and to follow existing symbolic links when extracting.
@@ -4474,7 +4531,7 @@ example, but @emph{only if} @option{--recursive-unlink} is specified
 to allow this behavior.  In any case, single files are silently
 removed.
 
-@opindex unlink-first, introduced
+@xopindex{unlink-first, introduced}
 Finally, the @option{--unlink-first} (@option{-U}) option can improve performance in
 some cases by causing @command{tar} to remove files unconditionally
 before extracting them.
@@ -4598,10 +4655,10 @@ in conjunction with the @option{--extract} (@option{--get},
 @option{-x}) operation.  
 
 @table @option
-@opindex preserve-permission
-@opindex same-permission
-@item --preserve-permission
-@itemx --same-permission
+@opindex preserve-permissions
+@opindex same-permissions
+@item --preserve-permissions
+@itemx --same-permissions
 @c @itemx --ignore-umask
 @itemx -p
 Set modes of extracted archive members to those recorded in the
@@ -5004,17 +5061,6 @@ set, the default is @samp{~}, just as in Emacs.
 
 @end table
 
-Some people express the desire to @emph{always} use the @option{--backup}
-option, by defining some kind of alias or script.  This is not as easy
-as one may think, due to the fact that old style options should appear first
-and consume arguments a bit unpredictably for an alias or script.  But,
-if you are ready to give up using old style options, you may resort to
-using something like (a Bourne shell function here):
-
-@smallexample
-tar () @{ /usr/local/bin/tar --backup $*; @}
-@end smallexample
-
 @node Applications
 @section Notable @command{tar} Usages
 @UNREVISED
@@ -5318,8 +5364,8 @@ to be a better way to go.
 Note that incremental archives use @command{tar} extensions and may
 not be readable by non-@acronym{GNU} versions of the @command{tar} program.
 
-@opindex listed-incremental, using with @option{--extract}
-@opindex extract, using with @option{--listed-incremental}
+@xopindex{listed-incremental, using with @option{--extract}}
+@xopindex{extract, using with @option{--listed-incremental}}
 To extract from the incremental dumps, use
 @option{--listed-incremental} together with @option{--extract}
 option (@pxref{extracting files}).  In this case, @command{tar} does
@@ -5362,10 +5408,10 @@ combined with two @option{--verbose} options@footnote{Two
 verbose listing output (@option{--list --verbose}) when using in
 scripts.
 
-@opindex incremental, using with @option{--list}
-@opindex listed-incremental, using with @option{--list}
-@opindex list, using with @option{--incremental}
-@opindex list, using with @option{--listed-incremental}
+@xopindex{incremental, using with @option{--list}}
+@xopindex{listed-incremental, using with @option{--list}}
+@xopindex{list, using with @option{--incremental}}
+@xopindex{list, using with @option{--listed-incremental}}
 Versions of @GNUTAR{} up to 1.15.1 used to dump verbatim binary
 contents of the DUMPDIR header (with terminating nulls) when
 @option{--incremental} or @option{--listed-incremental} option was
@@ -5390,7 +5436,8 @@ unambiguous for a program: each file name is printed as
 where @var{x} is a letter describing the status of the file: @samp{Y}
 if the file  is present in the archive, @samp{N} if the file is not
 included in the archive, or a @samp{D} if the file is a directory (and
-is included in the archive).@FIXME-xref{dumpdir format}.  Each such
+is included in the archive).  @xref{Dumpdir}, for the detailed
+description of dumpdirs and status codes.  Each such
 line is terminated by a newline character.  The last line is followed
 by an additional newline to indicate the end of the data.
 
@@ -5520,7 +5567,7 @@ normally be the host that actually contains the file system.  However,
 the host machine must have @GNUTAR{} installed, and
 must be able to access the directory containing the backup scripts and
 their support files using the same file name that is used on the
-machine where the scripts are run (ie.  what @command{pwd} will print
+machine where the scripts are run (i.e.  what @command{pwd} will print
 when in that directory on that machine).  If the host that contains
 the file system does not have this capability, you can specify another
 host as long as it can access the file system through NFS.
@@ -5603,9 +5650,10 @@ This variable affects only @code{backup}.
 
 Script to be run when it's time to insert a new tape in for the next
 volume.  Administrators may want to tailor this script for their site.
-If this variable isn't set, @GNUTAR{} will display its built-in prompt
-@FIXME-xref{describe it somewhere!}, and will expect confirmation from
-the console.
+If this variable isn't set, @GNUTAR{} will display its built-in
+prompt, and will expect confirmation from the console.  For the
+description of the default prompt, see @ref{change volume prompt}.
+
 @end defvr
 
 @defvr {Backup variable} SLEEP_MESSAGE
@@ -5943,8 +5991,8 @@ first volume of the archive mounted.  The script will prompt for other
 volumes as they are needed.  If the archive is on tape, you don't need
 to rewind the tape to to its beginning---if the tape head is
 positioned past the beginning of the archive, the script will rewind
-the tape as needed.  @FIXME-xref{Media, for a discussion of tape
-positioning.}
+the tape as needed.  @xref{Tape Positioning}, for a discussion of tape
+positioning.
 
 @quotation
 @strong{Warning:} The script will delete files from the active file
@@ -5971,7 +6019,9 @@ This chapter discusses these options in detail.
 * Selecting Archive Members::
 * files::                       Reading Names from a File
 * exclude::                     Excluding Some Files
-* Wildcards::                   Wildcards Patterns and Matching
+* wildcards::                   Wildcards Patterns and Matching
+* quoting styles::              Ways of Quoting Special Characters in Names
+* transform::                   Modifying File and Member Names
 * after::                       Operating Only on New Files
 * recurse::                     Descending into Directories
 * one::                         Crossing File System Boundaries
@@ -5996,7 +6046,7 @@ option allows you to either specify or name a file to use as the archive
 instead of the default archive file location.
 
 @table @option
-@opindex file, short description
+@xopindex{file, short description}
 @item --file=@var{archive-name}
 @itemx -f @var{archive-name}
 Name the archive to create or operate on.  Use in conjunction with
@@ -6026,7 +6076,7 @@ floppy disk, or CD write drive.
 If you do not name the archive, @command{tar} uses the value of the
 environment variable @env{TAPE} as the file name for the archive.  If
 that is not available, @command{tar} uses a default, compiled-in archive
-name, usually that for tape unit zero (ie.  @file{/dev/tu00}).
+name, usually that for tape unit zero (i.e.  @file{/dev/tu00}).
 
 @cindex Standard input and output
 @cindex tar to standard input and output
@@ -6115,6 +6165,40 @@ If a file name begins with dash (@samp{-}), precede it with
 @option{--add-file} option to prevent it from being treated as an
 option.
 
+@anchor{input name quoting}
+By default @GNUTAR{} attempts to @dfn{unquote} each file or member
+name, replacing @dfn{escape sequences} according to the following
+table:
+
+@multitable @columnfractions 0.20 0.60
+@headitem Escape @tab Replaced with    
+@item \a         @tab Audible bell (ASCII 7)
+@item \b         @tab Backspace (ASCII 8)  
+@item \f         @tab Form feed (ASCII 12)
+@item \n         @tab New line (ASCII 10)
+@item \r         @tab Carriage return (ASCII 13)
+@item \t         @tab Horizontal tabulation (ASCII 9)
+@item \v         @tab Vertical tabulation (ASCII 11)
+@item \?         @tab ASCII 127
+@item \@var{n}   @tab ASCII @var{n} (@var{n} should be an octal number
+                 of up to 3 digits)
+@end multitable
+
+A backslash followed by any other symbol is retained.
+
+This default behavior is controlled by the following command line
+option:
+
+@table @option
+@opindex unquote
+@item --unquote
+Enable unquoting input file or member names (default).
+
+@opindex no-unquote
+@item --no-unquote
+Disable unquoting input file or member names.
+@end table
+
 If you specify a directory name as a file name argument, all the files
 in that directory are operated on by @command{tar}.
 
@@ -6230,7 +6314,7 @@ libc.a
 @end smallexample
 
 @noindent
-@opindex directory, using in @option{--files-from} argument
+@xopindex{directory, using in @option{--files-from} argument}
 Notice that the option parsing algorithm used with @option{-T} is
 stricter than the one used by shell.  Namely, when specifying option
 arguments, you should observe the following rules:
@@ -6383,7 +6467,7 @@ more easily excluded from backups.
 @node problems with exclude
 @unnumberedsubsec Problems with Using the @code{exclude} Options
 
-@opindex exclude, potential problems with
+@xopindex{exclude, potential problems with}
 Some users find @samp{exclude} options confusing.  Here are some common
 pitfalls:
 
@@ -6444,7 +6528,7 @@ file.
 
 @end itemize
 
-@node Wildcards
+@node wildcards
 @section Wildcards Patterns and Matching
 
 @dfn{Globbing} is the operation by which @dfn{wildcard} characters,
@@ -6523,7 +6607,7 @@ By default, inclusion members are compared with archive members
 literally @footnote{Notice that earlier @GNUTAR{} versions used 
 globbing for inclusion members, which contradicted to UNIX98
 specification and was not documented. @xref{Changes}, for more
-information on this and other changes} and exclusion members are
+information on this and other changes.} and exclusion members are
 treated as globbing patterns.  For example:
 
 @smallexample
@@ -6597,6 +6681,7 @@ below.  These options accumulate.  For example:
 --ignore-case --exclude='makefile' --no-ignore-case ---exclude='readme'
 @end smallexample
 
+@noindent
 ignores case when excluding @samp{makefile}, but not when excluding
 @samp{readme}.
 
@@ -6640,448 +6725,934 @@ The following table summarizes pattern-matching default values:
 @item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash}
 @end multitable
 
-@node after
-@section Operating Only on New Files
-@UNREVISED
-
-@cindex Excluding file by age
-@cindex Data Modification time, excluding files by
-@cindex Modification time, excluding files by
-@cindex Age, excluding files by
-The @option{--after-date=@var{date}} (@option{--newer=@var{date}},
-@option{-N @var{date}}) option causes @command{tar} to only work on
-files whose data modification or status change times are newer than
-the @var{date} given.  If @var{date} starts with @samp{/} or @samp{.},
-it is taken to be a file name; the data modification time of that file
-is used as the date. If you use this option when creating or appending
-to an archive, the archive will only include new files.  If you use
-@option{--after-date} when extracting an archive, @command{tar} will
-only extract files newer than the @var{date} you specify.
+@node quoting styles
+@section Quoting Member Names
 
-If you only want @command{tar} to make the date comparison based on
-modification of the file's data (rather than status
-changes), then use the @option{--newer-mtime=@var{date}} option.
+When displaying member names, @command{tar} takes care to avoid
+ambiguities caused by certain characters.  This is called @dfn{name
+quoting}.  The characters in question are:
 
-You may use these options with any operation.  Note that these options
-differ from the @option{--update} (@option{-u}) operation in that they
-allow you to specify a particular date against which @command{tar} can
-compare when deciding whether or not to archive the files.
+@itemize @bullet
+@item Non-printable control characters:
+
+@multitable @columnfractions 0.20 0.10 0.60
+@headitem Character @tab ASCII @tab Character name
+@item \a @tab 7  @tab Audible bell
+@item \b @tab 8  @tab Backspace
+@item \f @tab 12 @tab Form feed
+@item \n @tab 10 @tab New line
+@item \r @tab 13 @tab Carriage return
+@item \t @tab 9  @tab Horizontal tabulation
+@item \v @tab 11 @tab Vertical tabulation
+@end multitable
 
-@table @option
-@opindex after-date
-@opindex newer
-@item --after-date=@var{date}
-@itemx --newer=@var{date}
-@itemx -N @var{date}
-Only store files newer than @var{date}.
+@item Space (ASCII 32)
 
-Acts on files only if their data modification or status change times are
-later than @var{date}.  Use in conjunction with any operation.
+@item Single and double quotes (@samp{'} and @samp{"})
 
-If @var{date} starts with @samp{/} or @samp{.}, it is taken to be a file
-name; the data modification time of that file is used as the date.
+@item Backslash (@samp{\})
+@end itemize
 
-@opindex newer-mtime
-@item --newer-mtime=@var{date}
-Acts like @option{--after-date}, but only looks at data modification times.
-@end table
+The exact way @command{tar} uses to quote these characters depends on
+the @dfn{quoting style}.  The default quoting style, called
+@dfn{escape} (see below), uses backslash notation to represent control
+characters, space and backslash.  Using this quoting style, control
+characters are represented as listed in column @samp{Character} in the
+above table, a space is printed as @samp{\ } and a backslash as @samp{\\}.
 
-These options limit @command{tar} to operate only on files which have
-been modified after the date specified.  A file's status is considered to have
-changed if its contents have been modified, or if its owner,
-permissions, and so forth, have been changed.  (For more information on
-how to specify a date, see @ref{Date input formats}; remember that the
-entire date argument must be quoted if it contains any spaces.)
+@GNUTAR{} offers seven distinct quoting styles, which can be selected
+using @option{--quoting-style} option:
 
-Gurus would say that @option{--after-date} tests both the data
-modification time (@code{mtime}, the time the contents of the file
-were last modified) and the status change time (@code{ctime}, the time
-the file's status was last changed: owner, permissions, etc.@:)
-fields, while @option{--newer-mtime} tests only the @code{mtime}
-field.
+@table @option
+@item --quoting-style=@var{style}
+@opindex quoting-style
 
-To be precise, @option{--after-date} checks @emph{both} @code{mtime} and
-@code{ctime} and processes the file if either one is more recent than
-@var{date}, while @option{--newer-mtime} only checks @code{mtime} and
-disregards @code{ctime}.  Neither does it use @code{atime} (the last time the
-contents of the file were looked at).
+Sets quoting style.  Valid values for @var{style} argument are:
+literal, shell, shell-always, c, escape, locale, clocale.
+@end table
 
-Date specifiers can have embedded spaces.  Because of this, you may need
-to quote date arguments to keep the shell from parsing them as separate
-arguments.  For example, the following command will add to the archive
-all the files modified less than two days ago:
+These styles are described in detail below.  To illustrate their
+effect, we will use an imaginary tar archive @file{arch.tar}
+containing the following members:
 
 @smallexample
-$ @kbd{tar -cf foo.tar --newer-mtime '2 days ago'}
+@group
+# 1. Contains horizontal tabulation character.
+a       tab
+# 2. Contains newline character
+a
+newline
+# 3. Contains a space
+a space
+# 4. Contains double quotes
+a"double"quote
+# 5. Contains single quotes
+a'single'quote
+# 6. Contains a backslash character:
+a\backslash
+@end group
 @end smallexample
 
-@quotation
-@strong{Please Note:} @option{--after-date} and @option{--newer-mtime}
-should not be used for incremental backups.  @xref{Incremental Dumps},
-for proper way of creating incremental backups.
-@end quotation
+Here is how usual @command{ls} command would have listed them, if they
+had existed in the current working directory:
 
-@node recurse
-@section Descending into Directories
-@UNREVISED
-@cindex Avoiding recursion in directories
-@cindex Descending directories, avoiding
-@cindex Directories, avoiding recursion
-@cindex Recursion in directories, avoiding
+@smallexample
+@group
+$ @kbd{ls}
+a\ttab
+a\nnewline
+a\ space
+a"double"quote
+a'single'quote
+a\\backslash
+@end group
+@end smallexample
 
-@FIXME{arrggh!  this is still somewhat confusing to me. :-< }
+Quoting styles:
 
-Usually, @command{tar} will recursively explore all directories (either
-those given on the command line or through the @option{--files-from}
-option) for the various files they contain.  However, you may not always
-want @command{tar} to act this way.
+@table @samp
+@item literal
+No quoting, display each character as is:
 
-@opindex no-recursion
-The @option{--no-recursion} option inhibits @command{tar}'s recursive descent
-into specified directories.  If you specify @option{--no-recursion}, you can
-use the @command{find} utility for hunting through levels of directories to
-construct a list of file names which you could then pass to @command{tar}.
-@command{find} allows you to be more selective when choosing which files to
-archive; see @ref{files}, for more information on using @command{find} with
-@command{tar}, or look.
+@smallexample
+@group 
+$ @kbd{tar tf arch.tar --quoting-style=literal}
+./
+./a space
+./a'single'quote
+./a"double"quote
+./a\backslash
+./a    tab
+./a
+newline
+@end group
+@end smallexample
 
-@table @option
-@item --no-recursion
-Prevents @command{tar} from recursively descending directories.
+@item shell
+Display characters the same way Bourne shell does:
+control characters, except @samp{\t} and @samp{\n}, are printed using
+backslash escapes, @samp{\t} and @samp{\n} are printed as is, and a
+single quote is printed as @samp{\'}.  If a name contains any quoted
+characters, it is enclosed in single quotes.  In particular, if a name
+contains single quotes, it is printed as several single-quoted strings:
 
-@opindex recursion
-@item --recursion
-Requires @command{tar} to recursively descend directories.
-This is the default.
-@end table
+@smallexample
+@group
+$ @kbd{tar tf arch.tar --quoting-style=shell}
+./
+'./a space'
+'./a'\''single'\''quote'
+'./a"double"quote'
+'./a\backslash'
+'./a   tab'
+'./a
+newline'
+@end group
+@end smallexample
 
-When you use @option{--no-recursion}, @GNUTAR{} grabs
-directory entries themselves, but does not descend on them
-recursively.  Many people use @command{find} for locating files they
-want to back up, and since @command{tar} @emph{usually} recursively
-descends on directories, they have to use the @samp{@w{-not -type d}}
-test in their @command{find} invocation (@pxref{Type, Type, Type test,
-find, Finding Files}), as they usually do not want all the files in a
-directory. They then use the @option{--files-from} option to archive
-the files located via @command{find}.
+@item shell-always
+Same as @samp{shell}, but the names are always enclosed in single
+quotes:
 
-The problem when restoring files archived in this manner is that the
-directories themselves are not in the archive; so the
-@option{--same-permissions} (@option{--preserve-permissions},
-@option{-p}) option does not affect them---while users might really
-like it to.  Specifying @option{--no-recursion} is a way to tell
-@command{tar} to grab only the directory entries given to it, adding
-no new files on its own.  To summarize, if you use @command{find} to
-create a list of files to be stored in an archive, use it as follows:
+@smallexample
+@group
+$ @kbd{tar tf arch.tar --quoting-style=shell-always}
+'./'
+'./a space'
+'./a'\''single'\''quote'
+'./a"double"quote'
+'./a\backslash'
+'./a   tab'
+'./a
+newline'
+@end group
+@end smallexample
+
+@item c
+Use the notation of the C programming language.  All names are
+enclosed in double quotes.  Control characters are quoted using
+backslash notations, double quotes are represented as @samp{\"},
+backslash characters are represented as @samp{\\}.  Single quotes and
+spaces are not quoted:
 
 @smallexample
 @group
-$ @kbd{find @var{dir} @var{tests} | \
-  tar -cf @var{archive} -T - --no-recursion}
+$ @kbd{tar tf arch.tar --quoting-style=c}
+"./"
+"./a space"
+"./a'single'quote"
+"./a\"double\"quote"
+"./a\\backslash"
+"./a\ttab"
+"./a\nnewline"
 @end group
 @end smallexample
 
-The @option{--no-recursion} option also applies when extracting: it
-causes @command{tar} to extract only the matched directory entries, not
-the files under those directories.
+@item escape
+Control characters are printed using backslash notation, a space is
+printed as @samp{\ } and a backslash as @samp{\\}.  This is the
+default quoting style, unless it was changed when configured the
+package.
 
-The @option{--no-recursion} option also affects how globbing patterns
-are interpreted (@pxref{controlling pattern-matching}).
+@smallexample
+@group
+$ @kbd{tar tf arch.tar --quoting-style=escape}
+./
+./a space
+./a'single'quote
+./a"double"quote
+./a\\backslash
+./a\ttab
+./a\nnewline
+@end group
+@end smallexample
 
-The @option{--no-recursion} and @option{--recursion} options apply to
-later options and operands, and can be overridden by later occurrences
-of @option{--no-recursion} and @option{--recursion}.  For example:
+@item locale
+Control characters, single quote and backslash are printed using
+backslash notation.  All names are quoted using left and right
+quotation marks, appropriate to the current locale.  If it does not
+define quotation marks, use @samp{`} as left and @samp{'} as right
+quotation marks.  Any occurrences of the right quotation mark in a
+name are escaped with @samp{\}, for example:
+
+For example:
 
 @smallexample
-$ @kbd{tar -cf jams.tar --no-recursion grape --recursion grape/concord}
+@group
+$ @kbd{tar tf arch.tar --quoting-style=locale}
+`./'
+`./a space'
+`./a\'single\'quote'
+`./a"double"quote'
+`./a\\backslash'
+`./a\ttab'
+`./a\nnewline'
+@end group
 @end smallexample
 
-@noindent
-creates an archive with one entry for @file{grape}, and the recursive
-contents of @file{grape/concord}, but no entries under @file{grape}
-other than @file{grape/concord}.
+@item clocale
+Same as @samp{locale}, but @samp{"} is used for both left and right
+quotation marks, if not provided by the currently selected locale:
 
-@node one
-@section Crossing File System Boundaries
-@cindex File system boundaries, not crossing
-@UNREVISED
+@smallexample
+@group
+$ @kbd{tar tf arch.tar --quoting-style=clocale}
+"./"
+"./a space"
+"./a'single'quote"
+"./a\"double\"quote"
+"./a\\backslash"
+"./a\ttab"
+"./a\nnewline"
+@end group
+@end smallexample
+@end table
 
-@command{tar} will normally automatically cross file system boundaries in
-order to archive files which are part of a directory tree.  You can
-change this behavior by running @command{tar} and specifying
-@option{--one-file-system}.  This option only affects files that are
-archived because they are in a directory that is being archived;
-@command{tar} will still archive files explicitly named on the command line
-or through @option{--files-from}, regardless of where they reside.
+You can specify which characters should be quoted in addition to those
+implied by the current quoting style:
 
 @table @option
-@opindex one-file-system
-@item --one-file-system
-Prevents @command{tar} from crossing file system boundaries when
-archiving.  Use in conjunction with any write operation.
+@item --quote-chars=@var{string}
+Always quote characters from @var{string}, even if the selected
+quoting style would not quote them.
 @end table
 
-The @option{--one-file-system} option causes @command{tar} to modify its
-normal behavior in archiving the contents of directories.  If a file in
-a directory is not on the same file system as the directory itself, then
-@command{tar} will not archive that file.  If the file is a directory
-itself, @command{tar} will not archive anything beneath it; in other words,
-@command{tar} will not cross mount points.
+For example, using @samp{escape} quoting (compare with the usual
+escape listing above): 
 
-This option is useful for making full or incremental archival backups of
-a file system.  If this option is used in conjunction with
-@option{--verbose} (@option{-v}), files that are excluded are
-mentioned by name on the standard error.
+@smallexample
+@group
+$ @kbd{tar tf arch.tar --quoting-style=escape --quote-chars=' "'}
+./
+./a\ space
+./a'single'quote
+./a\"double\"quote
+./a\\backslash
+./a\ttab
+./a\nnewline
+@end group
+@end smallexample
 
-@menu
-* directory::                   Changing Directory
-* absolute::                    Absolute File Names
-@end menu
+To disable quoting of such additional characters, use the following
+option:
 
-@node directory
-@subsection Changing the Working Directory
-@UNREVISED
+@table @option
+@item --no-quote-chars=@var{string}
+Remove characters listed in @var{string} from the list of quoted
+characters set by the previous @option{--quote-chars} option.
+@end table
 
-@FIXME{need to read over this node now for continuity; i've switched
-things around some.}
+This option is particularly useful if you have added
+@option{--quote-chars} to your @env{TAR_OPTIONS} (@pxref{TAR_OPTIONS})
+and wish to disable it for the current invocation.
+
+Note, that @option{--no-quote-chars} does @emph{not} disable those
+characters that are quoted by default in the selected quoting style.
+
+@node transform
+@section Modifying File and Member Names
+
+@command{Tar} archives contain detailed information about files stored
+in them and full file names are part of that information.  When
+storing file to an archive, its file name is recorded in the archive
+along with the actual file contents.  When restoring from an archive,
+a file is created on disk with exactly the same name as that stored
+in the archive.  In the majority of cases this is the desired behavior
+of a file archiver.  However, there are some cases when it is not.
+
+First of all, it is often unsafe to extract archive members with
+absolute file names or those that begin with a @file{../}.  @GNUTAR{}
+takes special precautions when extracting such names and provides a
+special option for handling them, which is described in
+@ref{absolute}.
+
+Secondly, you may wish to extract file names without some leading
+directory components, or with otherwise modified names.  In other
+cases it is desirable to store files under differing names in the
+archive.
 
-@cindex Changing directory mid-stream
-@cindex Directory, changing mid-stream
-@cindex Working directory, specifying
-To change the working directory in the middle of a list of file names,
-either on the command line or in a file specified using
-@option{--files-from} (@option{-T}), use @option{--directory} (@option{-C}).
-This will change the working directory to the specified directory
-after that point in the list.
+@GNUTAR{} provides two options for these needs.
 
 @table @option
-@opindex directory
-@item --directory=@var{directory}
-@itemx -C @var{directory}
-Changes the working directory in the middle of a command line.
+@opindex strip-components
+@item --strip-components=@var{number}
+Strip given @var{number} of leading components from file names before
+extraction.
 @end table
 
-For example,
+For example, suppose you have archived whole @file{/usr} hierarchy to
+a tar archive named @file{usr.tar}.  Among other files, this archive
+contains @file{usr/include/stdlib.h}, which you wish to extract to
+the current working directory.  To do so, you type:
 
 @smallexample
-$ @kbd{tar -c -f jams.tar grape prune -C food cherry}
+$ @kbd{tar -xf usr.tar --strip=2 usr/include/stdlib.h}
 @end smallexample
 
+The option @option{--strip=2} instructs @command{tar} to strip the
+two leading components (@file{usr/} and @file{include/}) off the file
+name. 
+
+If you add to the above invocation @option{--verbose} (@option{-v})
+option, you will note that the verbose listing still contains the
+full file name, with the two removed components still in place.  This
+can be inconvenient, so @command{tar} provides a special option for
+altering this behavior:
+
+@anchor{show-transformed-names}
+@table @option
+@opindex show-transformed-names
+@item --show-transformed-names
+Display file or member names with all requested transformations
+applied.
+@end table
+
 @noindent
-will place the files @file{grape} and @file{prune} from the current
-directory into the archive @file{jams.tar}, followed by the file
-@file{cherry} from the directory @file{food}.  This option is especially
-useful when you have several widely separated files that you want to
-store in the same archive.
+For example:
 
-Note that the file @file{cherry} is recorded in the archive under the
-precise name @file{cherry}, @emph{not} @file{food/cherry}.  Thus, the
-archive will contain three files that all appear to have come from the
-same directory; if the archive is extracted with plain @samp{tar
---extract}, all three files will be written in the current directory.
+@smallexample
+@group
+$ @kbd{tar -xf usr.tar -v --strip=2 usr/include/stdlib.h}
+usr/include/stdlib.h
+$ @kbd{tar -xf usr.tar -v --strip=2 --show-transformed usr/include/stdlib.h}
+stdlib.h
+@end group
+@end smallexample
 
-Contrast this with the command,
+Notice that in both cases the file is @file{stdlib.h} extracted to the
+current working directory, @option{--show-transformed-names} affects
+only the way its name is displayed.
+
+This option is especially useful for verifying whether the invocation
+will have the desired effect.  Thus, before running
 
 @smallexample
-$ @kbd{tar -c -f jams.tar grape prune -C food red/cherry}
+$ @kbd{tar -x --strip=@var{n}}
 @end smallexample
 
 @noindent
-which records the third file in the archive under the name
-@file{red/cherry} so that, if the archive is extracted using
-@samp{tar --extract}, the third file will be written in a subdirectory
-named @file{orange-colored}.
-
-You can use the @option{--directory} option to make the archive
-independent of the original name of the directory holding the files.
-The following command places the files @file{/etc/passwd},
-@file{/etc/hosts}, and @file{/lib/libc.a} into the archive
-@file{foo.tar}:
+it is often advisable to run
 
 @smallexample
-$ @kbd{tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a}
+$ @kbd{tar -t -v --show-transformed --strip=@var{n}}
 @end smallexample
 
 @noindent
-However, the names of the archive members will be exactly what they were
-on the command line: @file{passwd}, @file{hosts}, and @file{libc.a}.
-They will not appear to be related by file name to the original
-directories where those files were located.
+to make sure the command will produce the intended results.
 
-Note that @option{--directory} options are interpreted consecutively.  If
-@option{--directory} specifies a relative file name, it is interpreted
-relative to the then current directory, which might not be the same as
-the original current working directory of @command{tar}, due to a previous
-@option{--directory} option.
+In case you need to apply more complex modifications to the file name,
+@GNUTAR{} provides a general-purpose transformation option:
 
-When using @option{--files-from} (@pxref{files}), you can put various
-@command{tar} options (including @option{-C}) in the file list.  Notice,
-however, that in this case the option and its argument may not be
-separated by whitespace.  If you use short option, its argument must
-either follow the option letter immediately, without any intervening
-whitespace, or occupy the next line.  Otherwise, if you use long
-option, separate its argument by an equal sign.
+@table @option
+@opindex transform
+@item --transform=@var{expression}
+Modify file names using supplied @var{expression}.
+@end table
 
-For instance, the file list for the above example will be:
+@noindent
+The @var{expression} is a @command{sed}-like replace expression of the
+form:
+
+@smallexample
+s/@var{regexp}/@var{replace}/[@var{flags}]
+@end smallexample
+
+@noindent
+where @var{regexp} is a @dfn{regular expression}, @var{replace} is a
+replacement for each file name part that matches @var{regexp}.  Both
+@var{regexp} and @var{replace} are described in detail in
+@ref{The "s" Command, The "s" Command, The `s' Command, sed, GNU sed}.
+
+Supported @var{flags} are:
+
+@table @samp
+@item g
+Apply the replacement to @emph{all} matches to the @var{regexp}, not
+just the first.
+
+@item i
+Use case-insensitive matching
+
+@item x
+@var{regexp} is an @dfn{extended regular expression} (@pxref{Extended
+regexps, Extended regular expressions, Extended regular expressions,
+sed, GNU sed}).
+
+@item @var{number}
+Only replace the @var{number}th match of the @var{regexp}.
+
+Note: the @var{posix} standard does not specify what should happen
+when you mix the @samp{g} and @var{number} modifiers.  @GNUTAR{}
+follows the GNU @command{sed} implementation in this regard, so
+the the interaction is defined to be: ignore matches before the
+@var{number}th, and then match and replace all matches from the
+@var{number}th on.
+                                   
+@end table
+
+Any delimiter can be used in lieue of @samp{/}, the only requirement being
+that it be used consistently throughout the expression. For example,
+the following two expressions are equivalent:
 
 @smallexample
 @group
--C
-/etc
-passwd
-hosts
--C
-/lib
-libc.a
+s/one/two/
+s,one,two,
 @end group
 @end smallexample
 
-@noindent
-To use it, you would invoke @command{tar} as follows:
+Changing delimiters is often useful when the @var{regex} contains
+slashes.  For example, it is more convenient to write @code{s,/,-,} than
+@code{s/\//-/}.
+
+Here are several examples of @option{--transform} usage:
+
+@enumerate
+@item Extract @file{usr/} hierarchy into @file{usr/local/}:
 
 @smallexample
-$ @kbd{tar -c -f foo.tar --files-from list}
+$ @kbd{tar --transform='s,usr/,usr/local/,' -x -f arch.tar}
 @end smallexample
 
-Notice also that you can only use the short option variant in the file
-list, i.e., always use @option{-C}, not @option{--directory}.
+@item Strip two leading directory components (equivalent to
+@option{--strip-components=2}):
 
-The interpretation of @option{--directory} is disabled by
-@option{--null} option.
+@smallexample
+$ @kbd{tar --transform='s,/*[^/]*/[^/]*/,,' -x -f arch.tar}
+@end smallexample
 
-@node absolute
-@subsection Absolute File Names
-@UNREVISED
+@item Prepend @file{/prefix/}  to each file name:
 
-@table @option
-@opindex absolute-names
-@item --absolute-names
-@itemx -P
-Do not strip leading slashes from file names, and permit file names
-containing a @file{..} file name component.
-@end table
+@smallexample
+$ @kbd{tar --transform 's,^,/prefix/,' -x -f arch.tar}
+@end smallexample
 
-By default, @GNUTAR{} drops a leading @samp{/} on
-input or output, and complains about file names containing a @file{..}
-component.  This option turns off this behavior.
+@item Convert each file name to lower case:
 
-When @command{tar} extracts archive members from an archive, it strips any
-leading slashes (@samp{/}) from the member name.  This causes absolute
-member names in the archive to be treated as relative file names.  This
-allows you to have such members extracted wherever you want, instead of
-being restricted to extracting the member in the exact directory named
-in the archive.  For example, if the archive member has the name
-@file{/etc/passwd}, @command{tar} will extract it as if the name were
-really @file{etc/passwd}.
+@smallexample
+$ @kbd{tar --transform 's/.*/\L&/' -x -f arch.tar}
+@end smallexample
 
-File names containing @file{..} can cause problems when extracting, so
-@command{tar} normally warns you about such files when creating an
-archive, and rejects attempts to extracts such files.
+@end enumerate
 
-Other @command{tar} programs do not do this.  As a result, if you
-create an archive whose member names start with a slash, they will be
-difficult for other people with a non-@GNUTAR{}
-program to use.  Therefore, @GNUTAR{} also strips
-leading slashes from member names when putting members into the
-archive.  For example, if you ask @command{tar} to add the file
-@file{/bin/ls} to an archive, it will do so, but the member name will
-be @file{bin/ls}.@footnote{A side effect of this is that when
-@option{--create} is used with @option{--verbose} the resulting output
-is not, generally speaking, the same as the one you'd get running
-@kbd{tar --list} command.  This may be important if you use some
-scripts for comparing both outputs.  @xref{listing member and file names},
-for the information on how to handle this case.}
+Unlike @option{--strip-components}, @option{--transform} can be used
+in any @GNUTAR{} operation mode.  For example, the following command
+adds files to the archive while replacing the leading @file{usr/}
+component with @file{var/}:
 
-If you use the @option{--absolute-names} (@option{-P}) option,
-@command{tar} will do none of these transformations.
+@smallexample
+$ @kbd{tar -cf arch.tar --transform='s,^usr/,var/,' /}
+@end smallexample
 
-To archive or extract files relative to the root directory, specify
-the @option{--absolute-names} (@option{-P}) option.
+To test @option{--transform} effect we suggest using
+@option{--show-transformed-names} option:
 
-Normally, @command{tar} acts on files relative to the working
-directory---ignoring superior directory names when archiving, and
-ignoring leading slashes when extracting.
+@smallexample
+$ @kbd{tar -cf arch.tar --transform='s,^usr/,var/,' \
+       --verbose --show-transformed-names /}
+@end smallexample
 
-When you specify @option{--absolute-names} (@option{-P}),
-@command{tar} stores file names including all superior directory
-names, and preserves leading slashes.  If you only invoked
-@command{tar} from the root directory you would never need the
-@option{--absolute-names} option, but using this option
-may be more convenient than switching to root.
+If both @option{--strip-components} and @option{--transform} are used
+together, then @option{--transform} is applied first, and the required
+number of components is then stripped from its result.
+    
+@node after
+@section Operating Only on New Files
+@UNREVISED
 
-@FIXME{Should be an example in the tutorial/wizardry section using this
-to transfer files between systems.}
+@cindex Excluding file by age
+@cindex Data Modification time, excluding files by
+@cindex Modification time, excluding files by
+@cindex Age, excluding files by
+The @option{--after-date=@var{date}} (@option{--newer=@var{date}},
+@option{-N @var{date}}) option causes @command{tar} to only work on
+files whose data modification or status change times are newer than
+the @var{date} given.  If @var{date} starts with @samp{/} or @samp{.},
+it is taken to be a file name; the data modification time of that file
+is used as the date. If you use this option when creating or appending
+to an archive, the archive will only include new files.  If you use
+@option{--after-date} when extracting an archive, @command{tar} will
+only extract files newer than the @var{date} you specify.
 
-@FIXME{Is write access an issue?}
+If you only want @command{tar} to make the date comparison based on
+modification of the file's data (rather than status
+changes), then use the @option{--newer-mtime=@var{date}} option.
+
+You may use these options with any operation.  Note that these options
+differ from the @option{--update} (@option{-u}) operation in that they
+allow you to specify a particular date against which @command{tar} can
+compare when deciding whether or not to archive the files.
 
 @table @option
-@item --absolute-names
-Preserves full file names (including superior directory names) when
-archiving files.  Preserves leading slash when extracting files.
+@opindex after-date
+@opindex newer
+@item --after-date=@var{date}
+@itemx --newer=@var{date}
+@itemx -N @var{date}
+Only store files newer than @var{date}.
+
+Acts on files only if their data modification or status change times are
+later than @var{date}.  Use in conjunction with any operation.
 
+If @var{date} starts with @samp{/} or @samp{.}, it is taken to be a file
+name; the data modification time of that file is used as the date.
+
+@opindex newer-mtime
+@item --newer-mtime=@var{date}
+Acts like @option{--after-date}, but only looks at data modification times.
 @end table
 
-@FIXME{this is still horrible; need to talk with dan on monday.}
+These options limit @command{tar} to operate only on files which have
+been modified after the date specified.  A file's status is considered to have
+changed if its contents have been modified, or if its owner,
+permissions, and so forth, have been changed.  (For more information on
+how to specify a date, see @ref{Date input formats}; remember that the
+entire date argument must be quoted if it contains any spaces.)
 
-@command{tar} prints out a message about removing the @samp{/} from
-file names.  This message appears once per @GNUTAR{}
-invocation.  It represents something which ought to be told; ignoring
-what it means can cause very serious surprises, later.
+Gurus would say that @option{--after-date} tests both the data
+modification time (@code{mtime}, the time the contents of the file
+were last modified) and the status change time (@code{ctime}, the time
+the file's status was last changed: owner, permissions, etc.@:)
+fields, while @option{--newer-mtime} tests only the @code{mtime}
+field.
 
-Some people, nevertheless, do not want to see this message.  Wanting to
-play really dangerously, one may of course redirect @command{tar} standard
-error to the sink.  For example, under @command{sh}:
+To be precise, @option{--after-date} checks @emph{both} @code{mtime} and
+@code{ctime} and processes the file if either one is more recent than
+@var{date}, while @option{--newer-mtime} only checks @code{mtime} and
+disregards @code{ctime}.  Neither does it use @code{atime} (the last time the
+contents of the file were looked at).
+
+Date specifiers can have embedded spaces.  Because of this, you may need
+to quote date arguments to keep the shell from parsing them as separate
+arguments.  For example, the following command will add to the archive
+all the files modified less than two days ago:
 
 @smallexample
-$ @kbd{tar -c -f archive.tar /home 2> /dev/null}
+$ @kbd{tar -cf foo.tar --newer-mtime '2 days ago'}
 @end smallexample
 
-@noindent
-Another solution, both nicer and simpler, would be to change to
-the @file{/} directory first, and then avoid absolute notation.
-For example:
+When any of these options is used with the option @option{--verbose}
+(@pxref{verbose tutorial}) @GNUTAR{} will try to convert the specified
+date back to its textual representation and compare that with the
+one given with the option.  If the two dates differ, @command{tar} will
+print a warning saying what date it will use.  This is to help user
+ensure he is using the right date.  For example:
 
 @smallexample
-$ @kbd{(cd / && tar -c -f archive.tar home)}
-# @i{or}:
-$ @kbd{tar -c -f archive.tar -C  / home}
+@group
+$ @kbd{tar -c -f archive.tar --after-date='10 days ago' .}
+tar: Option --after-date: Treating date `10 days ago' as 2006-06-11
+13:19:37.232434
+@end group
 @end smallexample
 
-@include getdate.texi
+@quotation
+@strong{Please Note:} @option{--after-date} and @option{--newer-mtime}
+should not be used for incremental backups.  @xref{Incremental Dumps},
+for proper way of creating incremental backups.
+@end quotation
 
-@node Formats
-@chapter Controlling the Archive Format
+@node recurse
+@section Descending into Directories
+@UNREVISED
+@cindex Avoiding recursion in directories
+@cindex Descending directories, avoiding
+@cindex Directories, avoiding recursion
+@cindex Recursion in directories, avoiding
 
-@cindex Tar archive formats
-Due to historical reasons, there are several formats of tar archives.
-All of them are based on the same principles, but have some subtle
-differences that often make them incompatible with each other.
+@FIXME{arrggh!  this is still somewhat confusing to me. :-< }
 
-GNU tar is able to create and handle archives in a variety of formats.
-The most frequently used formats are (in alphabetical order):
+Usually, @command{tar} will recursively explore all directories (either
+those given on the command line or through the @option{--files-from}
+option) for the various files they contain.  However, you may not always
+want @command{tar} to act this way.
 
-@table @asis
-@item gnu
-Format used by @GNUTAR{} versions up to 1.13.25.  This format derived
-from an early @acronym{POSIX} standard, adding some improvements such as
-sparse file handling and incremental archives.  Unfortunately these
-features were implemented in a way incompatible with other archive
-formats.
+@opindex no-recursion
+The @option{--no-recursion} option inhibits @command{tar}'s recursive descent
+into specified directories.  If you specify @option{--no-recursion}, you can
+use the @command{find} utility for hunting through levels of directories to
+construct a list of file names which you could then pass to @command{tar}.
+@command{find} allows you to be more selective when choosing which files to
+archive; see @ref{files}, for more information on using @command{find} with
+@command{tar}, or look.
 
-Archives in @samp{gnu} format are able to hold pathnames of unlimited
-length.
+@table @option
+@item --no-recursion
+Prevents @command{tar} from recursively descending directories.
 
-@item oldgnu
-Format used by @GNUTAR{} of versions prior to 1.12.
+@opindex recursion
+@item --recursion
+Requires @command{tar} to recursively descend directories.
+This is the default.
+@end table
 
-@item v7
-Archive format, compatible with the V7 implementation of tar.  This
-format imposes a number of limitations.  The most important of them
-are:
+When you use @option{--no-recursion}, @GNUTAR{} grabs
+directory entries themselves, but does not descend on them
+recursively.  Many people use @command{find} for locating files they
+want to back up, and since @command{tar} @emph{usually} recursively
+descends on directories, they have to use the @samp{@w{-not -type d}}
+test in their @command{find} invocation (@pxref{Type, Type, Type test,
+find, Finding Files}), as they usually do not want all the files in a
+directory. They then use the @option{--files-from} option to archive
+the files located via @command{find}.
 
-@enumerate
-@item The maximum length of a file name is limited to 99 characters.
-@item The maximum length of a symbolic link is limited to 99 characters.
+The problem when restoring files archived in this manner is that the
+directories themselves are not in the archive; so the
+@option{--same-permissions} (@option{--preserve-permissions},
+@option{-p}) option does not affect them---while users might really
+like it to.  Specifying @option{--no-recursion} is a way to tell
+@command{tar} to grab only the directory entries given to it, adding
+no new files on its own.  To summarize, if you use @command{find} to
+create a list of files to be stored in an archive, use it as follows:
+
+@smallexample
+@group
+$ @kbd{find @var{dir} @var{tests} | \
+  tar -cf @var{archive} -T - --no-recursion}
+@end group
+@end smallexample
+
+The @option{--no-recursion} option also applies when extracting: it
+causes @command{tar} to extract only the matched directory entries, not
+the files under those directories.
+
+The @option{--no-recursion} option also affects how globbing patterns
+are interpreted (@pxref{controlling pattern-matching}).
+
+The @option{--no-recursion} and @option{--recursion} options apply to
+later options and operands, and can be overridden by later occurrences
+of @option{--no-recursion} and @option{--recursion}.  For example:
+
+@smallexample
+$ @kbd{tar -cf jams.tar --no-recursion grape --recursion grape/concord}
+@end smallexample
+
+@noindent
+creates an archive with one entry for @file{grape}, and the recursive
+contents of @file{grape/concord}, but no entries under @file{grape}
+other than @file{grape/concord}.
+
+@node one
+@section Crossing File System Boundaries
+@cindex File system boundaries, not crossing
+@UNREVISED
+
+@command{tar} will normally automatically cross file system boundaries in
+order to archive files which are part of a directory tree.  You can
+change this behavior by running @command{tar} and specifying
+@option{--one-file-system}.  This option only affects files that are
+archived because they are in a directory that is being archived;
+@command{tar} will still archive files explicitly named on the command line
+or through @option{--files-from}, regardless of where they reside.
+
+@table @option
+@opindex one-file-system
+@item --one-file-system
+Prevents @command{tar} from crossing file system boundaries when
+archiving.  Use in conjunction with any write operation.
+@end table
+
+The @option{--one-file-system} option causes @command{tar} to modify its
+normal behavior in archiving the contents of directories.  If a file in
+a directory is not on the same file system as the directory itself, then
+@command{tar} will not archive that file.  If the file is a directory
+itself, @command{tar} will not archive anything beneath it; in other words,
+@command{tar} will not cross mount points.
+
+This option is useful for making full or incremental archival backups of
+a file system.  If this option is used in conjunction with
+@option{--verbose} (@option{-v}), files that are excluded are
+mentioned by name on the standard error.
+
+@menu
+* directory::                   Changing Directory
+* absolute::                    Absolute File Names
+@end menu
+
+@node directory
+@subsection Changing the Working Directory
+@UNREVISED
+
+@FIXME{need to read over this node now for continuity; i've switched
+things around some.}
+
+@cindex Changing directory mid-stream
+@cindex Directory, changing mid-stream
+@cindex Working directory, specifying
+To change the working directory in the middle of a list of file names,
+either on the command line or in a file specified using
+@option{--files-from} (@option{-T}), use @option{--directory} (@option{-C}).
+This will change the working directory to the specified directory
+after that point in the list.
+
+@table @option
+@opindex directory
+@item --directory=@var{directory}
+@itemx -C @var{directory}
+Changes the working directory in the middle of a command line.
+@end table
+
+For example,
+
+@smallexample
+$ @kbd{tar -c -f jams.tar grape prune -C food cherry}
+@end smallexample
+
+@noindent
+will place the files @file{grape} and @file{prune} from the current
+directory into the archive @file{jams.tar}, followed by the file
+@file{cherry} from the directory @file{food}.  This option is especially
+useful when you have several widely separated files that you want to
+store in the same archive.
+
+Note that the file @file{cherry} is recorded in the archive under the
+precise name @file{cherry}, @emph{not} @file{food/cherry}.  Thus, the
+archive will contain three files that all appear to have come from the
+same directory; if the archive is extracted with plain @samp{tar
+--extract}, all three files will be written in the current directory.
+
+Contrast this with the command,
+
+@smallexample
+$ @kbd{tar -c -f jams.tar grape prune -C food red/cherry}
+@end smallexample
+
+@noindent
+which records the third file in the archive under the name
+@file{red/cherry} so that, if the archive is extracted using
+@samp{tar --extract}, the third file will be written in a subdirectory
+named @file{orange-colored}.
+
+You can use the @option{--directory} option to make the archive
+independent of the original name of the directory holding the files.
+The following command places the files @file{/etc/passwd},
+@file{/etc/hosts}, and @file{/lib/libc.a} into the archive
+@file{foo.tar}:
+
+@smallexample
+$ @kbd{tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a}
+@end smallexample
+
+@noindent
+However, the names of the archive members will be exactly what they were
+on the command line: @file{passwd}, @file{hosts}, and @file{libc.a}.
+They will not appear to be related by file name to the original
+directories where those files were located.
+
+Note that @option{--directory} options are interpreted consecutively.  If
+@option{--directory} specifies a relative file name, it is interpreted
+relative to the then current directory, which might not be the same as
+the original current working directory of @command{tar}, due to a previous
+@option{--directory} option.
+
+When using @option{--files-from} (@pxref{files}), you can put various
+@command{tar} options (including @option{-C}) in the file list.  Notice,
+however, that in this case the option and its argument may not be
+separated by whitespace.  If you use short option, its argument must
+either follow the option letter immediately, without any intervening
+whitespace, or occupy the next line.  Otherwise, if you use long
+option, separate its argument by an equal sign.
+
+For instance, the file list for the above example will be:
+
+@smallexample
+@group
+-C
+/etc
+passwd
+hosts
+-C
+/lib
+libc.a
+@end group
+@end smallexample
+
+@noindent
+To use it, you would invoke @command{tar} as follows:
+
+@smallexample
+$ @kbd{tar -c -f foo.tar --files-from list}
+@end smallexample
+
+Notice also that you can only use the short option variant in the file
+list, i.e., always use @option{-C}, not @option{--directory}.
+
+The interpretation of @option{--directory} is disabled by
+@option{--null} option.
+
+@node absolute
+@subsection Absolute File Names
+@UNREVISED
+
+@table @option
+@opindex absolute-names
+@item --absolute-names
+@itemx -P
+Do not strip leading slashes from file names, and permit file names
+containing a @file{..} file name component.
+@end table
+
+By default, @GNUTAR{} drops a leading @samp{/} on
+input or output, and complains about file names containing a @file{..}
+component.  This option turns off this behavior.
+
+When @command{tar} extracts archive members from an archive, it strips any
+leading slashes (@samp{/}) from the member name.  This causes absolute
+member names in the archive to be treated as relative file names.  This
+allows you to have such members extracted wherever you want, instead of
+being restricted to extracting the member in the exact directory named
+in the archive.  For example, if the archive member has the name
+@file{/etc/passwd}, @command{tar} will extract it as if the name were
+really @file{etc/passwd}.
+
+File names containing @file{..} can cause problems when extracting, so
+@command{tar} normally warns you about such files when creating an
+archive, and rejects attempts to extracts such files.
+
+Other @command{tar} programs do not do this.  As a result, if you
+create an archive whose member names start with a slash, they will be
+difficult for other people with a non-@GNUTAR{}
+program to use.  Therefore, @GNUTAR{} also strips
+leading slashes from member names when putting members into the
+archive.  For example, if you ask @command{tar} to add the file
+@file{/bin/ls} to an archive, it will do so, but the member name will
+be @file{bin/ls}.@footnote{A side effect of this is that when
+@option{--create} is used with @option{--verbose} the resulting output
+is not, generally speaking, the same as the one you'd get running
+@kbd{tar --list} command.  This may be important if you use some
+scripts for comparing both outputs.  @xref{listing member and file names},
+for the information on how to handle this case.}
+
+If you use the @option{--absolute-names} (@option{-P}) option,
+@command{tar} will do none of these transformations.
+
+To archive or extract files relative to the root directory, specify
+the @option{--absolute-names} (@option{-P}) option.
+
+Normally, @command{tar} acts on files relative to the working
+directory---ignoring superior directory names when archiving, and
+ignoring leading slashes when extracting.
+
+When you specify @option{--absolute-names} (@option{-P}),
+@command{tar} stores file names including all superior directory
+names, and preserves leading slashes.  If you only invoked
+@command{tar} from the root directory you would never need the
+@option{--absolute-names} option, but using this option
+may be more convenient than switching to root.
+
+@FIXME{Should be an example in the tutorial/wizardry section using this
+to transfer files between systems.}
+
+@FIXME{Is write access an issue?}
+
+@table @option
+@item --absolute-names
+Preserves full file names (including superior directory names) when
+archiving files.  Preserves leading slash when extracting files.
+
+@end table
+
+@FIXME{this is still horrible; need to talk with dan on monday.}
+
+@command{tar} prints out a message about removing the @samp{/} from
+file names.  This message appears once per @GNUTAR{}
+invocation.  It represents something which ought to be told; ignoring
+what it means can cause very serious surprises, later.
+
+Some people, nevertheless, do not want to see this message.  Wanting to
+play really dangerously, one may of course redirect @command{tar} standard
+error to the sink.  For example, under @command{sh}:
+
+@smallexample
+$ @kbd{tar -c -f archive.tar /home 2> /dev/null}
+@end smallexample
+
+@noindent
+Another solution, both nicer and simpler, would be to change to
+the @file{/} directory first, and then avoid absolute notation.
+For example:
+
+@smallexample
+$ @kbd{(cd / && tar -c -f archive.tar home)}
+# @i{or}:
+$ @kbd{tar -c -f archive.tar -C  / home}
+@end smallexample
+
+@include getdate.texi
+
+@node Formats
+@chapter Controlling the Archive Format
+
+@cindex Tar archive formats
+Due to historical reasons, there are several formats of tar archives.
+All of them are based on the same principles, but have some subtle
+differences that often make them incompatible with each other.
+
+GNU tar is able to create and handle archives in a variety of formats.
+The most frequently used formats are (in alphabetical order):
+
+@table @asis
+@item gnu
+Format used by @GNUTAR{} versions up to 1.13.25.  This format derived
+from an early @acronym{POSIX} standard, adding some improvements such as
+sparse file handling and incremental archives.  Unfortunately these
+features were implemented in a way incompatible with other archive
+formats.
+
+Archives in @samp{gnu} format are able to hold pathnames of unlimited
+length.
+
+@item oldgnu
+Format used by @GNUTAR{} of versions prior to 1.12.
+
+@item v7
+Archive format, compatible with the V7 implementation of tar.  This
+format imposes a number of limitations.  The most important of them
+are:
+
+@enumerate
+@item The maximum length of a file name is limited to 99 characters.
+@item The maximum length of a symbolic link is limited to 99 characters.
 @item It is impossible to store special files (block and character
 devices, fifos etc.)
 @item Maximum value of user or group ID is limited to 2097151 (7777777
@@ -7090,301 +7661,767 @@ octal)
 and group name of the file owner).
 @end enumerate
 
-This format has traditionally been used by Automake when producing
-Makefiles.  This practice will change in the future, in the meantime,
-however this means that projects containing filenames more than 99
-characters long will not be able to use @GNUTAR{} @value{VERSION} and
-Automake prior to 1.9.
+This format has traditionally been used by Automake when producing
+Makefiles.  This practice will change in the future, in the meantime,
+however this means that projects containing filenames more than 99
+characters long will not be able to use @GNUTAR{} @value{VERSION} and
+Automake prior to 1.9.
+
+@item ustar
+Archive format defined by @acronym{POSIX.1-1988} specification.  It stores
+symbolic ownership information.  It is also able to store
+special files.  However, it imposes several restrictions as well:
+
+@enumerate
+@item The maximum length of a file name is limited to 256 characters,
+provided that the filename can be split at directory separator in
+two parts, first of them being at most 155 bytes long.  So, in most
+cases the maximum file name length will be shorter than 256
+characters.
+@item The maximum length of a symbolic link name is limited to
+100 characters.
+@item Maximum size of a file the archive is able to accomodate
+is 8GB
+@item Maximum value of UID/GID is 2097151.
+@item Maximum number of bits in device major and minor numbers is 21.
+@end enumerate
+
+@item star
+Format used by J@"org Schilling @command{star}
+implementation.  @GNUTAR{} is able to read @samp{star} archives but
+currently does not produce them.
+
+@item posix
+Archive format defined by @acronym{POSIX.1-2001} specification.  This is the
+most flexible and feature-rich format.  It does not impose any
+restrictions on file sizes or filename lengths.  This format is quite
+recent, so not all tar implementations are able to handle it properly.
+However, this format is designed in such a way that any tar
+implementation able to read @samp{ustar} archives will be able to read
+most @samp{posix} archives as well, with the only exception that any
+additional information (such as long file names etc.) will in such
+case be extracted as plain text files along with the files it refers to.
+
+This archive format will be the default format for future versions
+of @GNUTAR{}.
+
+@end table
+
+The following table summarizes the limitations of each of these
+formats:
+
+@multitable @columnfractions .10 .20 .20 .20 .20
+@headitem Format @tab UID @tab File Size @tab Path Name @tab Devn
+@item gnu    @tab 1.8e19 @tab Unlimited @tab Unlimited @tab 63
+@item oldgnu @tab 1.8e19 @tab Unlimited @tab Unlimited @tab 63
+@item v7     @tab 2097151 @tab 8GB @tab 99 @tab n/a
+@item ustar  @tab 2097151 @tab 8GB @tab 256 @tab 21
+@item posix  @tab Unlimited @tab Unlimited @tab Unlimited @tab Unlimited
+@end multitable
+
+The default format for @GNUTAR{} is defined at compilation
+time.  You may check it by running @command{tar --help}, and examining
+the last lines of its output.  Usually, @GNUTAR{} is configured
+to create archives in @samp{gnu} format, however, future version will
+switch to @samp{posix}.
+
+@menu
+* Portability::                 Making @command{tar} Archives More Portable
+* Compression::                 Using Less Space through Compression
+* Attributes::                  Handling File Attributes
+* cpio::                        Comparison of @command{tar} and @command{cpio}
+@end menu
+
+@node Portability
+@section Making @command{tar} Archives More Portable
+
+Creating a @command{tar} archive on a particular system that is meant to be
+useful later on many other machines and with other versions of @command{tar}
+is more challenging than you might think.  @command{tar} archive formats
+have been evolving since the first versions of Unix.  Many such formats
+are around, and are not always compatible with each other.  This section
+discusses a few problems, and gives some advice about making @command{tar}
+archives more portable.
+
+One golden rule is simplicity.  For example, limit your @command{tar}
+archives to contain only regular files and directories, avoiding
+other kind of special files.  Do not attempt to save sparse files or
+contiguous files as such.  Let's discuss a few more problems, in turn.
+
+@FIXME{Discuss GNU extensions (incremental backups, multi-volume
+archives and archive labels) in GNU and PAX formats.}
+
+@menu
+* Portable Names::              Portable Names
+* dereference::                 Symbolic Links
+* old::                         Old V7 Archives
+* ustar::                       Ustar Archives
+* gnu::                         GNU and old GNU format archives.
+* posix::                       @acronym{POSIX} archives
+* Checksumming::                Checksumming Problems
+* Large or Negative Values::    Large files, negative time stamps, etc.
+* Other Tars::                  How to Extract GNU-Specific Data Using
+                                Other @command{tar} Implementations
+@end menu
+
+@node Portable Names
+@subsection Portable Names
+
+Use portable file and member names.  A name is portable if it contains
+only ASCII letters and digits, @samp{/}, @samp{.}, @samp{_}, and
+@samp{-}; it cannot be empty, start with @samp{-} or @samp{//}, or
+contain @samp{/-}.  Avoid deep directory nesting.  For portability to
+old Unix hosts, limit your file name components to 14 characters or
+less.
+
+If you intend to have your @command{tar} archives to be read under
+MSDOS, you should not rely on case distinction for file names, and you
+might use the @acronym{GNU} @command{doschk} program for helping you
+further diagnosing illegal MSDOS names, which are even more limited
+than System V's.
+
+@node dereference
+@subsection Symbolic Links
+@cindex File names, using symbolic links
+@cindex Symbolic link as file name
+
+@opindex dereference
+Normally, when @command{tar} archives a symbolic link, it writes a
+block to the archive naming the target of the link.  In that way, the
+@command{tar} archive is a faithful record of the file system contents.
+@option{--dereference} (@option{-h}) is used with @option{--create} (@option{-c}), and causes
+@command{tar} to archive the files symbolic links point to, instead of
+the links themselves.  When this option is used, when @command{tar}
+encounters a symbolic link, it will archive the linked-to file,
+instead of simply recording the presence of a symbolic link.
+
+The name under which the file is stored in the file system is not
+recorded in the archive.  To record both the symbolic link name and
+the file name in the system, archive the file under both names.  If
+all links were recorded automatically by @command{tar}, an extracted file
+might be linked to a file name that no longer exists in the file
+system.
+
+If a linked-to file is encountered again by @command{tar} while creating
+the same archive, an entire second copy of it will be stored.  (This
+@emph{might} be considered a bug.)
+
+So, for portable archives, do not archive symbolic links as such,
+and use @option{--dereference} (@option{-h}): many systems do not support
+symbolic links, and moreover, your distribution might be unusable if
+it contains unresolved symbolic links.
+
+@node old
+@subsection Old V7 Archives
+@cindex Format, old style
+@cindex Old style format
+@cindex Old style archives
+@cindex v7 archive format
+
+Certain old versions of @command{tar} cannot handle additional
+information recorded by newer @command{tar} programs.  To create an
+archive in V7 format (not ANSI), which can be read by these old
+versions, specify the @option{--format=v7} option in
+conjunction with the @option{--create} (@option{-c}) (@command{tar} also
+accepts @option{--portability} or @samp{op-old-archive} for this
+option).  When you specify it,
+@command{tar} leaves out information about directories, pipes, fifos,
+contiguous files, and device files, and specifies file ownership by
+group and user IDs instead of group and user names.
+
+When updating an archive, do not use @option{--format=v7}
+unless the archive was created using this option.
+
+In most cases, a @emph{new} format archive can be read by an @emph{old}
+@command{tar} program without serious trouble, so this option should
+seldom be needed.  On the other hand, most modern @command{tar}s are
+able to read old format archives, so it might be safer for you to
+always use @option{--format=v7} for your distributions.
+
+@node ustar
+@subsection Ustar Archive Format
+
+@cindex ustar archive format
+Archive format defined by @acronym{POSIX}.1-1988 specification is called
+@code{ustar}.  Although it is more flexible than the V7 format, it
+still has many restrictions (@xref{Formats,ustar}, for the detailed
+description of @code{ustar} format).  Along with V7 format,
+@code{ustar} format is a good choice for archives intended to be read
+with other implementations of @command{tar}.
+
+To create archive in @code{ustar} format, use @option{--format=ustar}
+option in conjunction with the @option{--create} (@option{-c}).
+
+@node gnu
+@subsection @acronym{GNU} and old @GNUTAR{} format
+
+@cindex GNU archive format
+@cindex Old GNU archive format
+@GNUTAR{} was based on an early draft of the
+@acronym{POSIX} 1003.1 @code{ustar} standard.  @acronym{GNU} extensions to
+@command{tar}, such as the support for file names longer than 100
+characters, use portions of the @command{tar} header record which were
+specified in that @acronym{POSIX} draft as unused.  Subsequent changes in
+@acronym{POSIX} have allocated the same parts of the header record for
+other purposes.  As a result, @GNUTAR{} format is
+incompatible with the current @acronym{POSIX} specification, and with
+@command{tar} programs that follow it.
+
+In the majority of cases, @command{tar} will be configured to create
+this format by default.  This will change in the future releases, since
+we plan to make @samp{posix} format the default.
+
+To force creation a @GNUTAR{} archive, use option
+@option{--format=gnu}.
+
+@node posix
+@subsection @GNUTAR{} and @acronym{POSIX} @command{tar}
+
+@cindex POSIX archive format
+@cindex PAX archive format
+Starting from version 1.14 @GNUTAR{} features full support for
+@acronym{POSIX.1-2001} archives.
+
+A @acronym{POSIX} conformant archive will be created if @command{tar}
+was given @option{--format=posix} (@option{--format=pax}) option.  No
+special option is required to read and extract from a @acronym{POSIX}
+archive. 
+
+@menu
+* PAX keywords:: Controlling Extended Header Keywords.
+@end menu
+
+@node PAX keywords
+@subsubsection Controlling Extended Header Keywords
+
+@table @option
+@opindex pax-option
+@item --pax-option=@var{keyword-list}
+Handle keywords in @acronym{PAX} extended headers.  This option is
+equivalent to @option{-o} option of the @command{pax} utility.
+@end table
+
+@var{Keyword-list} is a comma-separated
+list of keyword options, each keyword option taking one of
+the following forms:
+
+@table @code
+@item delete=@var{pattern}
+When used with one of archive-creation commands,
+this option instructs @command{tar} to omit from extended header records
+that it produces any keywords matching the string @var{pattern}.
+
+When used in extract or list mode, this option instructs tar
+to ignore any keywords matching the given @var{pattern} in the extended
+header records.  In both cases, matching is performed using the pattern
+matching notation described in @acronym{POSIX 1003.2}, 3.13
+(@pxref{wildcards}). For example:
+
+@smallexample
+--pax-option delete=security.*
+@end smallexample
+
+would suppress security-related information.
+
+@item exthdr.name=@var{string}
+
+This keyword allows user control over the name that is written into the
+ustar header blocks for the extended headers.  The name is obtained
+from @var{string} after making the following substitutions:
+
+@multitable @columnfractions .25 .55
+@headitem Meta-character @tab Replaced By
+@item %d @tab  The directory name of the file, equivalent to the
+result of the @command{dirname} utility on the translated pathname.
+@item %f @tab  The filename of the file, equivalent to the result
+of the @command{basename} utility on the translated pathname.
+@item %p @tab  The process ID of the @command{tar} process.
+@item %% @tab  A @samp{%} character.
+@end multitable
+
+Any other @samp{%} characters in @var{string} produce undefined
+results.
+
+If no option @samp{exthdr.name=string} is specified, @command{tar}
+will use the following default value:
+
+@smallexample
+%d/PaxHeaders.%p/%f
+@end smallexample
+
+@item globexthdr.name=@var{string}
+This keyword allows user control over the name that is written into
+the ustar header blocks for global extended header records.  The name
+is obtained from the contents of @var{string}, after making
+the following substitutions:
+
+@multitable @columnfractions .25 .55
+@headitem Meta-character @tab Replaced By
+@item %n @tab An integer that represents the
+sequence number of the global extended header record in the archive,
+starting at 1.
+@item %p @tab The process ID of the @command{tar} process.
+@item %% @tab A @samp{%} character.
+@end multitable
+
+Any other @samp{%} characters in @var{string} produce undefined results.
+
+If no option @samp{globexthdr.name=string} is specified, @command{tar}
+will use the following default value:
+
+@smallexample
+$TMPDIR/GlobalHead.%p.%n
+@end smallexample
+
+@noindent
+where @samp{$TMPDIR} represents the value of the @var{TMPDIR}
+environment variable.  If @var{TMPDIR} is not set, @command{tar}
+uses @samp{/tmp}.
+
+@item @var{keyword}=@var{value}
+When used with one of archive-creation commands, these keyword/value pairs
+will be included at the beginning of the archive in a global extended
+header record.  When used with one of archive-reading commands,
+@command{tar} will behave as if it has encountered these keyword/value
+pairs at the beginning of the archive in a global extended header
+record.
+
+@item @var{keyword}:=@var{value}
+When used with one of archive-creation commands, these keyword/value pairs
+will be included as records at the beginning of an extended header for
+each file.  This is effectively equivalent to @var{keyword}=@var{value}
+form except that it creates no global extended header records.
+
+When used with one of archive-reading commands, @command{tar} will
+behave as if these keyword/value pairs were included as records at the
+end of each extended header; thus, they will override any global or
+file-specific extended header record keywords of the same names.
+For example, in the command:
+
+@smallexample
+tar --format=posix --create \
+    --file archive --pax-option gname:=user .
+@end smallexample
+
+the group name will be forced to a new value for all files
+stored in the archive.
+@end table
+
+@node Checksumming
+@subsection Checksumming Problems
+
+SunOS and HP-UX @command{tar} fail to accept archives created using
+@GNUTAR{} and containing non-ASCII file names, that
+is, file names having characters with the eight bit set, because they
+use signed checksums, while @GNUTAR{} uses unsigned
+checksums while creating archives, as per @acronym{POSIX} standards.  On
+reading, @GNUTAR{} computes both checksums and
+accept any.  It is somewhat worrying that a lot of people may go
+around doing backup of their files using faulty (or at least
+non-standard) software, not learning about it until it's time to
+restore their missing files with an incompatible file extractor, or
+vice versa.
+
+@GNUTAR{} compute checksums both ways, and accept
+any on read, so @acronym{GNU} tar can read Sun tapes even with their
+wrong checksums.  @GNUTAR{} produces the standard
+checksum, however, raising incompatibilities with Sun.  That is to
+say, @GNUTAR{} has not been modified to
+@emph{produce} incorrect archives to be read by buggy @command{tar}'s.
+I've been told that more recent Sun @command{tar} now read standard
+archives, so maybe Sun did a similar patch, after all?
+
+The story seems to be that when Sun first imported @command{tar}
+sources on their system, they recompiled it without realizing that
+the checksums were computed differently, because of a change in
+the default signing of @code{char}'s in their compiler.  So they
+started computing checksums wrongly.  When they later realized their
+mistake, they merely decided to stay compatible with it, and with
+themselves afterwards.  Presumably, but I do not really know, HP-UX
+has chosen that their @command{tar} archives to be compatible with Sun's.
+The current standards do not favor Sun @command{tar} format.  In any
+case, it now falls on the shoulders of SunOS and HP-UX users to get
+a @command{tar} able to read the good archives they receive.
+
+@node Large or Negative Values
+@subsection Large or Negative Values
+@cindex large values
+@cindex future time stamps
+@cindex negative time stamps
+@UNREVISED{}
+
+The above sections suggest to use @samp{oldest possible} archive
+format if in doubt.  However, sometimes it is not possible.  If you
+attempt to archive a file whose metadata cannot be represented using
+required format, @GNUTAR{} will print error message and ignore such a
+file.  You will than have to switch to a format that is able to
+handle such values.  The format summary table (@pxref{Formats}) will
+help you to do so.
 
-@item ustar
-Archive format defined by @acronym{POSIX.1-1988} specification.  It stores
-symbolic ownership information.  It is also able to store
-special files.  However, it imposes several restrictions as well:
+In particular, when trying to archive files larger than 8GB or with
+timestamps not in the range 1970-01-01 00:00:00 through 2242-03-16
+12:56:31 @sc{utc}, you will have to chose between @acronym{GNU} and
+@acronym{POSIX} archive formats.  When considering which format to
+choose, bear in mind that the @acronym{GNU} format uses
+two's-complement base-256 notation to store values that do not fit
+into standard @acronym{ustar} range.  Such archives can generally be
+read only by a @GNUTAR{} implementation.  Moreover, they sometimes
+cannot be correctly restored on another hosts even by @GNUTAR{}. For
+example, using two's complement representation for negative time
+stamps that assumes a signed 32-bit @code{time_t} generates archives
+that are not portable to hosts with differing @code{time_t}
+representations.
 
-@enumerate
-@item The maximum length of a file name is limited to 256 characters,
-provided that the filename can be split at directory separator in
-two parts, first of them being at most 155 bytes long.  So, in most
-cases the maximum file name length will be shorter than 256
-characters.
-@item The maximum length of a symbolic link name is limited to
-100 characters.
-@item Maximum size of a file the archive is able to accomodate
-is 8GB
-@item Maximum value of UID/GID is 2097151.
-@item Maximum number of bits in device major and minor numbers is 21.
-@end enumerate
+On the other hand, @acronym{POSIX} archives, generally speaking, can
+be extracted by any tar implementation that understands older
+@acronym{ustar} format.  The only exception are files larger than 8GB.
 
-@item star
-Format used by J@"org Schilling @command{star}
-implementation.  @GNUTAR{} is able to read @samp{star} archives but
-currently does not produce them.
+@FIXME{Describe how @acronym{POSIX} archives are extracted by non
+POSIX-aware tars.}
 
-@item posix
-Archive format defined by @acronym{POSIX.1-2001} specification.  This is the
-most flexible and feature-rich format.  It does not impose any
-restrictions on file sizes or filename lengths.  This format is quite
-recent, so not all tar implementations are able to handle it properly.
-However, this format is designed in such a way that any tar
-implementation able to read @samp{ustar} archives will be able to read
-most @samp{posix} archives as well, with the only exception that any
-additional information (such as long file names etc.) will in such
-case be extracted as plain text files along with the files it refers to.
+@node Other Tars
+@subsection How to Extract GNU-Specific Data Using Other @command{tar} Implementations
 
-This archive format will be the default format for future versions
-of @GNUTAR{}.
+In previous sections you became acquainted with various quircks
+necessary to make your archives portable.  Sometimes you may need to
+extract archives containing GNU-specific members using some
+third-party @command{tar} implementation or an older version of
+@GNUTAR{}.  Of course your best bet is to have @GNUTAR{} installed,
+but if it is for some reason impossible, this section will explain
+how to cope without it. 
 
-@end table
+When we speak about @dfn{GNU-specific} members we mean two classes of
+them: members split between the volumes of a multi-volume archive and
+sparse members.  You will be able to always recover such members if
+the archive is in PAX format.  In addition split members can be
+recovered from archives in old GNU format.  The following subsections
+describe the required procedures in detail.
 
-The following table summarizes the limitations of each of these
-formats:
+@menu
+* Split Recovery::       Members Split Between Volumes
+* Sparse Recovery::      Sparse Members
+@end menu
 
-@multitable @columnfractions .10 .20 .20 .20 .20
-@headitem Format @tab UID @tab File Size @tab Path Name @tab Devn
-@item gnu    @tab 1.8e19 @tab Unlimited @tab Unlimited @tab 63
-@item oldgnu @tab 1.8e19 @tab Unlimited @tab Unlimited @tab 63
-@item v7     @tab 2097151 @tab 8GB @tab 99 @tab n/a
-@item ustar  @tab 2097151 @tab 8GB @tab 256 @tab 21
-@item posix  @tab Unlimited @tab Unlimited @tab Unlimited @tab Unlimited
+@node Split Recovery
+@subsubsection Extracting Members Split Between Volumes
+
+If a member is split between several volumes of an old GNU format archive
+most third party @command{tar} implementation will fail to extract
+it.  To extract it, use @command{tarcat} program (@pxref{Tarcat}).
+This program is available from
+@uref{http://www.gnu.org/@/software/@/tar/@/utils/@/tarcat, @GNUTAR{}
+home page}.  It concatenates several archive volumes into a single
+valid archive.  For example, if you have three volumes named from
+@file{vol-1.tar} to @file{vol-2.tar}, you can do the following to
+extract them using a third-party @command{tar}:
+
+@smallexample
+$ @kbd{tarcat vol-1.tar vol-2.tar vol-3.tar | tar xf -}
+@end smallexample
+
+You could use this approach for many (although not all) PAX
+format archives as well.  However, extracting split members from a PAX
+archive is a much easier task, because PAX volumes are constructed in
+such a way that each part of a split member is extracted as a
+different file by @command{tar} implementations that are not aware of
+GNU extensions.  More specifically, the very first part retains its
+original name, and all subsequent parts are named using the pattern:
+
+@smallexample
+%d/GNUFileParts.%p/%f.%n
+@end smallexample
+
+@noindent
+where symbols preceeded by @samp{%} are @dfn{macro characters} that
+have the following meaning:
+
+@multitable @columnfractions .25 .55
+@headitem Meta-character @tab Replaced By
+@item %d @tab  The directory name of the file, equivalent to the
+result of the @command{dirname} utility on its full name.
+@item %f @tab  The file name of the file, equivalent to the result
+of the @command{basename} utility on its full name.
+@item %p @tab  The process ID of the @command{tar} process that
+created the archive.
+@item %n @tab  Ordinal number of this particular part.
 @end multitable
 
-The default format for @GNUTAR{} is defined at compilation
-time.  You may check it by running @command{tar --help}, and examining
-the last lines of its output.  Usually, @GNUTAR{} is configured
-to create archives in @samp{gnu} format, however, future version will
-switch to @samp{posix}.
+For example, if, a file @file{var/longfile} was split during archive
+creation between three volumes, and the creator @command{tar} process
+had process ID @samp{27962}, then the member names will be:
 
-@menu
-* Portability::                 Making @command{tar} Archives More Portable
-* Compression::                 Using Less Space through Compression
-* Attributes::                  Handling File Attributes
-* Standard::                    The Standard Format
-* Extensions::                  @acronym{GNU} Extensions to the Archive Format
-* cpio::                        Comparison of @command{tar} and @command{cpio}
-@end menu
+@smallexample
+var/longfile
+var/GNUFileParts.27962/longfile.1
+var/GNUFileParts.27962/longfile.2
+@end smallexample
 
-@node Portability
-@section Making @command{tar} Archives More Portable
+When you extract your archive using a third-party @command{tar}, these
+files will be created on your disk, and the only thing you will need
+to do to restore your file in its original form is concatenate them in
+the proper order, for example:
 
-Creating a @command{tar} archive on a particular system that is meant to be
-useful later on many other machines and with other versions of @command{tar}
-is more challenging than you might think.  @command{tar} archive formats
-have been evolving since the first versions of Unix.  Many such formats
-are around, and are not always compatible with each other.  This section
-discusses a few problems, and gives some advice about making @command{tar}
-archives more portable.
+@smallexample
+@group
+$ @kbd{cd var}
+$ @kbd{cat GNUFileParts.27962/longfile.1 \
+  GNUFileParts.27962/longfile.2 >> longfile}
+$ rm -f GNUFileParts.27962
+@end group
+@end smallexample
 
-One golden rule is simplicity.  For example, limit your @command{tar}
-archives to contain only regular files and directories, avoiding
-other kind of special files.  Do not attempt to save sparse files or
-contiguous files as such.  Let's discuss a few more problems, in turn.
+Notice, that if the @command{tar} implementation you use supports PAX
+format archives, it will probably emit warnings about unknown keywords
+during extraction.  They will lool like this:
 
-@FIXME{Discuss GNU extensions (incremental backups, multi-volume
-archives and archive labels) in GNU and PAX formats.}
+@smallexample
+@group
+Tar file too small
+Unknown extended header keyword 'GNU.volume.filename' ignored.
+Unknown extended header keyword 'GNU.volume.size' ignored.
+Unknown extended header keyword 'GNU.volume.offset' ignored.
+@end group
+@end smallexample
 
-@menu
-* Portable Names::              Portable Names
-* dereference::                 Symbolic Links
-* old::                         Old V7 Archives
-* ustar::                       Ustar Archives
-* gnu::                         GNU and old GNU format archives.
-* posix::                       @acronym{POSIX} archives
-* Checksumming::                Checksumming Problems
-* Large or Negative Values::    Large files, negative time stamps, etc.
-@end menu
+@noindent
+You can safely ignore these warnings.
 
-@node Portable Names
-@subsection Portable Names
+If your @command{tar} implementation is not PAX-aware, you will get
+more warnigns and more files generated on your disk, e.g.:
 
-Use portable file and member names.  A name is portable if it contains
-only ASCII letters and digits, @samp{/}, @samp{.}, @samp{_}, and
-@samp{-}; it cannot be empty, start with @samp{-} or @samp{//}, or
-contain @samp{/-}.  Avoid deep directory nesting.  For portability to
-old Unix hosts, limit your file name components to 14 characters or
-less.
+@smallexample
+@group
+$ @kbd{tar xf vol-1.tar}
+var/PaxHeaders.27962/longfile: Unknown file type 'x', extracted as
+normal file 
+Unexpected EOF in archive
+$ @kbd{tar xf vol-2.tar}
+tmp/GlobalHead.27962.1: Unknown file type 'g', extracted as normal file
+GNUFileParts.27962/PaxHeaders.27962/sparsefile.1: Unknown file type
+'x', extracted as normal file
+@end group
+@end smallexample
 
-If you intend to have your @command{tar} archives to be read under
-MSDOS, you should not rely on case distinction for file names, and you
-might use the @acronym{GNU} @command{doschk} program for helping you
-further diagnosing illegal MSDOS names, which are even more limited
-than System V's.
+Ignore these warnings.  The @file{PaxHeaders.*} directories created
+will contain files with @dfn{extended header keywords} describing the
+extracted files.  You can delete them, unless they describe sparse
+members.  Read further to learn more about them.
 
-@node dereference
-@subsection Symbolic Links
-@cindex File names, using symbolic links
-@cindex Symbolic link as file name
+@node Sparse Recovery
+@subsubsection Extracting Sparse Members
 
-@opindex dereference
-Normally, when @command{tar} archives a symbolic link, it writes a
-block to the archive naming the target of the link.  In that way, the
-@command{tar} archive is a faithful record of the file system contents.
-@option{--dereference} (@option{-h}) is used with @option{--create} (@option{-c}), and causes
-@command{tar} to archive the files symbolic links point to, instead of
-the links themselves.  When this option is used, when @command{tar}
-encounters a symbolic link, it will archive the linked-to file,
-instead of simply recording the presence of a symbolic link.
+Any @command{tar} implementation will be able to extract sparse members from a
+PAX archive.  However, the extracted files will be @dfn{condensed},
+i.e. any zero blocks will be removed from them.  When we restore such
+a condensed file to its original form, by adding zero bloks (or
+@dfn{holes}) back to their original locations, we call this process
+@dfn{expanding} a compressed sparse file.
 
-The name under which the file is stored in the file system is not
-recorded in the archive.  To record both the symbolic link name and
-the file name in the system, archive the file under both names.  If
-all links were recorded automatically by @command{tar}, an extracted file
-might be linked to a file name that no longer exists in the file
-system.
+To expand a file, you will need a simple auxiliary program called
+@command{xsparse}.  It is available in source form from
+@uref{http://www.gnu.org/@/software/@/tar/@/utils/@/xsparse, @GNUTAR{}
+home page}.
 
-If a linked-to file is encountered again by @command{tar} while creating
-the same archive, an entire second copy of it will be stored.  (This
-@emph{might} be considered a bug.)
+Let's begin with archive members in @dfn{sparse format
+version 1.0}@footnote{@xref{PAX 1}.}, which are the easiest to expand.
+The condensed file will contain both file map and file data, so no
+additional data will be needed to restore it.  If the original file
+name was @file{@var{dir}/@var{name}}, then the condensed file will be
+named @file{@var{dir}/@/GNUSparseFile.@var{n}/@/@var{name}}, where 
+@var{n} is a decimal number@footnote{technically speaking, @var{n} is a
+@dfn{process ID} of the @command{tar} process which created the
+archive (@pxref{PAX keywords}).}.
 
-So, for portable archives, do not archive symbolic links as such,
-and use @option{--dereference} (@option{-h}): many systems do not support
-symbolic links, and moreover, your distribution might be unusable if
-it contains unresolved symbolic links.
+To expand a version 1.0 file, run @command{xsparse} as follows:
 
-@node old
-@subsection Old V7 Archives
-@cindex Format, old style
-@cindex Old style format
-@cindex Old style archives
-@cindex v7 archive format
+@smallexample
+$ @kbd{xsparse @file{cond-file}}
+@end smallexample
 
-Certain old versions of @command{tar} cannot handle additional
-information recorded by newer @command{tar} programs.  To create an
-archive in V7 format (not ANSI), which can be read by these old
-versions, specify the @option{--format=v7} option in
-conjunction with the @option{--create} (@option{-c}) (@command{tar} also
-accepts @option{--portability} or @samp{op-old-archive} for this
-option).  When you specify it,
-@command{tar} leaves out information about directories, pipes, fifos,
-contiguous files, and device files, and specifies file ownership by
-group and user IDs instead of group and user names.
+@noindent
+where @file{cond-file} is the name of the condensed file.  The utility
+will deduce the name for the resulting expanded file using the
+following algorithm:
+
+@enumerate 1
+@item If @file{cond-file} does not contain any directories,
+@file{../cond-file} will be used;
+
+@item If @file{cond-file} has the form
+@file{@var{dir}/@var{t}/@var{name}}, where both @var{t} and @var{name}
+are simple names, with no @samp{/} characters in them, the output file
+name will be @file{@var{dir}/@var{name}}.
+
+@item Otherwise, if @file{cond-file} has the form
+@file{@var{dir}/@var{name}}, the output file name will be
+@file{@var{name}}.
+@end enumerate
 
-When updating an archive, do not use @option{--format=v7}
-unless the archive was created using this option.
+In the unlikely case when this algorithm does not suite your needs,
+you can explicitely specify output file name as a second argument to
+the command:
 
-In most cases, a @emph{new} format archive can be read by an @emph{old}
-@command{tar} program without serious trouble, so this option should
-seldom be needed.  On the other hand, most modern @command{tar}s are
-able to read old format archives, so it might be safer for you to
-always use @option{--format=v7} for your distributions.
+@smallexample
+$ @kbd{xsparse @file{cond-file}}
+@end smallexample
 
-@node ustar
-@subsection Ustar Archive Format
+It is often a good idea to run @command{xsparse} in @dfn{dry run} mode
+first.  In this mode, the command does not actually expand the file,
+but verbosely lists all actions it would be taking to do so.  The dry
+run mode is enabled by @option{-n} command line argument:
 
-@cindex ustar archive format
-Archive format defined by @acronym{POSIX}.1-1988 specification is called
-@code{ustar}.  Although it is more flexible than the V7 format, it
-still has many restrictions (@xref{Formats,ustar}, for the detailed
-description of @code{ustar} format).  Along with V7 format,
-@code{ustar} format is a good choice for archives intended to be read
-with other implementations of @command{tar}.
+@smallexample
+@group
+$ @kbd{xsparse -n /home/gray/GNUSparseFile.6058/sparsefile}
+Reading v.1.0 sparse map
+Expanding file `/home/gray/GNUSparseFile.6058/sparsefile' to
+`/home/gray/sparsefile'
+Finished dry run
+@end group
+@end smallexample
 
-To create archive in @code{ustar} format, use @option{--format=ustar}
-option in conjunction with the @option{--create} (@option{-c}).
+To actually expand the file, you would run:
 
-@node gnu
-@subsection @acronym{GNU} and old @GNUTAR{} format
+@smallexample
+$ @kbd{xsparse /home/gray/GNUSparseFile.6058/sparsefile}
+@end smallexample
 
-@cindex GNU archive format
-@cindex Old GNU archive format
-@GNUTAR{} was based on an early draft of the
-@acronym{POSIX} 1003.1 @code{ustar} standard.  @acronym{GNU} extensions to
-@command{tar}, such as the support for file names longer than 100
-characters, use portions of the @command{tar} header record which were
-specified in that @acronym{POSIX} draft as unused.  Subsequent changes in
-@acronym{POSIX} have allocated the same parts of the header record for
-other purposes.  As a result, @GNUTAR{} format is
-incompatible with the current @acronym{POSIX} specification, and with
-@command{tar} programs that follow it.
+@noindent
+The program behaves the same way all UNIX utilities do: it will keep
+quiet unless it has simething important to tell you (e.g. an error
+condition or something).  If you wish it to produce verbose output,
+similar to that from the dry run mode, give it @option{-v} option:
 
-In the majority of cases, @command{tar} will be configured to create
-this format by default.  This will change in the future releases, since
-we plan to make @samp{posix} format the default.
+@smallexample
+@group
+$ @kbd{xsparse -v /home/gray/GNUSparseFile.6058/sparsefile}
+Reading v.1.0 sparse map
+Expanding file `/home/gray/GNUSparseFile.6058/sparsefile' to
+`/home/gray/sparsefile'
+Done
+@end group
+@end smallexample
 
-To force creation a @GNUTAR{} archive, use option
-@option{--format=gnu}.
+Additionally, if your @command{tar} implementation has extracted the
+@dfn{extended headers} for this file, you can instruct @command{xstar}
+to use them in order to verify the integrity of the expanded file.
+The option @option{-x} sets the name of the extended header file to
+use.  Continuing our example:
+
+@smallexample
+@group
+$ @kbd{xsparse -v -x /home/gray/PaxHeaders.6058/sparsefile \
+  /home/gray/GNUSparseFile.6058/sparsefile}
+Reading extended header file
+Found variable GNU.sparse.major = 1
+Found variable GNU.sparse.minor = 0
+Found variable GNU.sparse.name = sparsefile
+Found variable GNU.sparse.realsize = 217481216
+Reading v.1.0 sparse map
+Expanding file `/home/gray/GNUSparseFile.6058/sparsefile' to
+`/home/gray/sparsefile'
+Done
+@end group
+@end smallexample
+
+An @dfn{extended header} is a special @command{tar} archive header
+that precedes an archive member and contains a set of
+@dfn{variables}, describing the member properties that cannot be
+stored in the standard @code{ustar} header.  While optional for
+expanding sparse version 1.0 members, use of extended headers is
+mandatory when expanding sparse members in older sparse formats: v.0.0
+and v.0.1 (The sparse formats are described in detail in @pxref{Sparse
+Formats}).  So, for this format, the question is: how to obtain
+extended headers from the archive? 
+
+If you use a @command{tar} implementation that does not support PAX
+format, extended headers for each member will be extracted as a 
+separate file.  If we represent the member name as
+@file{@var{dir}/@var{name}}, then the extended header file will be
+named @file{@var{dir}/@/PaxHeaders.@var{n}/@/@var{name}}, where
+@var{n} is an integer number.
+
+Things become more difficult if your @command{tar} implementation
+does support PAX headers, because in this case you will have to
+manually extract the headers.  We recommend the following algorithm:
+
+@enumerate 1
+@item 
+Consult the documentation for your @command{tar} implementation for an
+option that will print @dfn{block numbers} along with the archive
+listing (analogous to @GNUTAR{}'s @option{-R} option).  For example,
+@command{star} has @option{-block-number}.
 
-@node posix
-@subsection @GNUTAR{} and @acronym{POSIX} @command{tar}
+@item
+Obtain the verbose listing using the @samp{block number} option, and
+find the position of the sparse member in question and the member
+immediately following it.  For example, running @command{star} on our
+archive we obtain:
 
-@cindex POSIX archive format
-@cindex PAX archive format
-The version @value{VERSION} of @GNUTAR{} is able
-to read and create archives conforming to @acronym{POSIX.1-2001} standard.
+@smallexample
+@group
+$ @kbd{star -t -v -block-number -f arc.tar}
+@dots{}
+star: Unknown extended header keyword 'GNU.sparse.size' ignored.
+star: Unknown extended header keyword 'GNU.sparse.numblocks' ignored.
+star: Unknown extended header keyword 'GNU.sparse.name' ignored.
+star: Unknown extended header keyword 'GNU.sparse.map' ignored.
+block        56:  425984 -rw-r--r--  gray/users Jun 25 14:46 2006 GNUSparseFile.28124/sparsefile
+block       897:   65391 -rw-r--r--  gray/users Jun 24 20:06 2006 README
+@dots{}
+@end group
+@end smallexample
 
-A @acronym{POSIX} conformant archive will be created if @command{tar}
-was given @option{--format=posix} option.
+@noindent
+(as usual, ignore the warnings about unknown keywords.)
 
-@node Checksumming
-@subsection Checksumming Problems
+@item
+Let the size of the sparse member be @var{size}, its block number be
+@var{Bs} and the block number of the next member be @var{Bn}.
+Compute: 
 
-SunOS and HP-UX @command{tar} fail to accept archives created using
-@GNUTAR{} and containing non-ASCII file names, that
-is, file names having characters with the eight bit set, because they
-use signed checksums, while @GNUTAR{} uses unsigned
-checksums while creating archives, as per @acronym{POSIX} standards.  On
-reading, @GNUTAR{} computes both checksums and
-accept any.  It is somewhat worrying that a lot of people may go
-around doing backup of their files using faulty (or at least
-non-standard) software, not learning about it until it's time to
-restore their missing files with an incompatible file extractor, or
-vice versa.
+@smallexample
+@var{N} = @var{Bs} - @var{Bn} - @var{size}/512 - 2
+@end smallexample
 
-@GNUTAR{} compute checksums both ways, and accept
-any on read, so @acronym{GNU} tar can read Sun tapes even with their
-wrong checksums.  @GNUTAR{} produces the standard
-checksum, however, raising incompatibilities with Sun.  That is to
-say, @GNUTAR{} has not been modified to
-@emph{produce} incorrect archives to be read by buggy @command{tar}'s.
-I've been told that more recent Sun @command{tar} now read standard
-archives, so maybe Sun did a similar patch, after all?
+@noindent
+This number gives the size of the extended header part in tar @dfn{blocks}.
+In our example, this formula gives: @code{897 - 56 - 425984 / 512 - 2
+= 7}.
 
-The story seems to be that when Sun first imported @command{tar}
-sources on their system, they recompiled it without realizing that
-the checksums were computed differently, because of a change in
-the default signing of @code{char}'s in their compiler.  So they
-started computing checksums wrongly.  When they later realized their
-mistake, they merely decided to stay compatible with it, and with
-themselves afterwards.  Presumably, but I do not really know, HP-UX
-has chosen that their @command{tar} archives to be compatible with Sun's.
-The current standards do not favor Sun @command{tar} format.  In any
-case, it now falls on the shoulders of SunOS and HP-UX users to get
-a @command{tar} able to read the good archives they receive.
+@item
+Use @command{dd} to extract the headers:
 
-@node Large or Negative Values
-@subsection Large or Negative Values
-@cindex large values
-@cindex future time stamps
-@cindex negative time stamps
-@UNREVISED{}
+@smallexample
+@kbd{dd if=@var{archive} of=@var{hname} bs=512 skip=@var{Bs} count=@var{N}}
+@end smallexample
 
-The above sections suggest to use @samp{oldest possible} archive
-format if in doubt.  However, sometimes it is not possible.  If you
-attempt to archive a file whose metadata cannot be represented using
-required format, @GNUTAR{} will print error message and ignore such a
-file.  You will than have to switch to a format that is able to
-handle such values.  The format summary table (@pxref{Formats}) will
-help you to do so.
+@noindent
+where @var{archive} is the archive name, @var{hname} is a name of the
+file to store the extended header in, @var{Bs} and @var{N} are
+computed in previous steps.
 
-In particular, when trying to archive files larger than 8GB or with
-timestamps not in the range 1970-01-01 00:00:00 through 2242-03-16
-12:56:31 @sc{utc}, you will have to chose between @acronym{GNU} and
-@acronym{POSIX} archive formats.  When considering which format to
-choose, bear in mind that the @acronym{GNU} format uses
-two's-complement base-256 notation to store values that do not fit
-into standard @acronym{ustar} range.  Such archives can generally be
-read only by a @GNUTAR{} implementation.  Moreover, they sometimes
-cannot be correctly restored on another hosts even by @GNUTAR{}. For
-example, using two's complement representation for negative time
-stamps that assumes a signed 32-bit @code{time_t} generates archives
-that are not portable to hosts with differing @code{time_t}
-representations.
+In our example, this command will be
 
-On the other hand, @acronym{POSIX} archives, generally speaking, can
-be extracted by any tar implementation that understands older
-@acronym{ustar} format.  The only exception are files larger than 8GB.
+@smallexample
+$ @kbd{dd if=arc.tar of=xhdr bs=512 skip=56 count=7}
+@end smallexample
+@end enumerate
 
-@FIXME{Describe how @acronym{POSIX} archives are extracted by non
-POSIX-aware tars.}
+Finally, you can expand the condensed file, using the obtained header:
+
+@smallexample
+@group
+$ @kbd{xsparse -v -x xhdr GNUSparseFile.6058/sparsefile}
+Reading extended header file
+Found variable GNU.sparse.size = 217481216
+Found variable GNU.sparse.numblocks = 208
+Found variable GNU.sparse.name = sparsefile
+Found variable GNU.sparse.map = 0,2048,1050624,2048,@dots{}
+Expanding file `GNUSparseFile.28124/sparsefile' to `sparsefile'
+Done
+@end group
+@end smallexample
 
 @node Compression
 @section Using Less Space through Compression
@@ -7539,8 +8576,8 @@ The @option{--use-compress-program} option, in particular, lets you
 implement your own filters, not necessarily dealing with
 compression/decomression.  For example, suppose you wish to implement
 PGP encryption on top of compression, using @command{gpg} (@pxref{Top,
-gpg, gpg ---- encryption and signing tool, gpg}).  The following
-script does that: 
+gpg, gpg ---- encryption and signing tool, gpg, GNU Privacy Guard
+Manual}).  The following script does that:  
 
 @smallexample
 @group
@@ -7630,7 +8667,7 @@ treatment of sparse files may be done automatically with any special
 @acronym{GNU} options.  For now, it is an option needing to be specified on
 the command line with the creation or updating of an archive.
 
-Files in the file system occasionally have ``holes.''  A hole in a file
+Files in the file system occasionally have @dfn{holes}.  A @dfn{hole} in a file
 is a section of the file's contents which was never written.  The
 contents of a hole read as all zeros.  On many operating systems,
 actual disk storage is not allocated for holes, but they are counted
@@ -7836,8 +8873,8 @@ This is not the good way, I think.  @GNUTAR{} is
 already crowded with options and moreover, the approach just explained
 gives you a great deal of control already.
 
-@opindex same-permissions, short description
-@opindex preserve-permissions, short description
+@xopindex{same-permissions, short description}
+@xopindex{preserve-permissions, short description}
 @item -p
 @itemx --same-permissions
 @itemx --preserve-permissions
@@ -7864,316 +8901,6 @@ Neither do I. --Sergey}
 
 @end table
 
-@node Standard
-@section Basic Tar Format
-@UNREVISED
-
-While an archive may contain many files, the archive itself is a
-single ordinary file.  Like any other file, an archive file can be
-written to a storage device such as a tape or disk, sent through a
-pipe or over a network, saved on the active file system, or even
-stored in another archive.  An archive file is not easy to read or
-manipulate without using the @command{tar} utility or Tar mode in
-@acronym{GNU} Emacs.
-
-Physically, an archive consists of a series of file entries terminated
-by an end-of-archive entry, which consists of two 512 blocks of zero
-bytes.  A file
-entry usually describes one of the files in the archive (an
-@dfn{archive member}), and consists of a file header and the contents
-of the file.  File headers contain file names and statistics, checksum
-information which @command{tar} uses to detect file corruption, and
-information about file types.
-
-Archives are permitted to have more than one member with the same
-member name.  One way this situation can occur is if more than one
-version of a file has been stored in the archive.  For information
-about adding new versions of a file to an archive, see @ref{update}.
-@FIXME-xref{To learn more about having more than one archive member with the
-same name, see -backup node, when it's written.}
-
-In addition to entries describing archive members, an archive may
-contain entries which @command{tar} itself uses to store information.
-@xref{label}, for an example of such an archive entry.
-
-A @command{tar} archive file contains a series of blocks.  Each block
-contains @code{BLOCKSIZE} bytes.  Although this format may be thought
-of as being on magnetic tape, other media are often used.
-
-Each file archived is represented by a header block which describes
-the file, followed by zero or more blocks which give the contents
-of the file.  At the end of the archive file there are two 512-byte blocks
-filled with binary zeros as an end-of-file marker.  A reasonable system
-should write such end-of-file marker at the end of an archive, but
-must not assume that such a block exists when reading an archive.  In
-particular @GNUTAR{} always issues a warning if it does not encounter it.
-
-The blocks may be @dfn{blocked} for physical I/O operations.
-Each record of @var{n} blocks (where @var{n} is set by the
-@option{--blocking-factor=@var{512-size}} (@option{-b @var{512-size}}) option to @command{tar}) is written with a single
-@w{@samp{write ()}} operation.  On magnetic tapes, the result of
-such a write is a single record.  When writing an archive,
-the last record of blocks should be written at the full size, with
-blocks after the zero block containing all zeros.  When reading
-an archive, a reasonable system should properly handle an archive
-whose last record is shorter than the rest, or which contains garbage
-records after a zero block.
-
-The header block is defined in C as follows.  In the @GNUTAR{}
-distribution, this is part of file @file{src/tar.h}:
-
-@smallexample
-@include header.texi
-@end smallexample
-
-All characters in header blocks are represented by using 8-bit
-characters in the local variant of ASCII.  Each field within the
-structure is contiguous; that is, there is no padding used within
-the structure.  Each character on the archive medium is stored
-contiguously.
-
-Bytes representing the contents of files (after the header block
-of each file) are not translated in any way and are not constrained
-to represent characters in any character set.  The @command{tar} format
-does not distinguish text files from binary files, and no translation
-of file contents is performed.
-
-The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and
-@code{gname} are null-terminated character strings.  All other fields
-are zero-filled octal numbers in ASCII.  Each numeric field of width
-@var{w} contains @var{w} minus 1 digits, and a null.
-
-The @code{name} field is the file name of the file, with directory names
-(if any) preceding the file name, separated by slashes.
-
-@FIXME{how big a name before field overflows?}
-
-The @code{mode} field provides nine bits specifying file permissions
-and three bits to specify the Set UID, Set GID, and Save Text
-(@dfn{sticky}) modes.  Values for these bits are defined above.
-When special permissions are required to create a file with a given
-mode, and the user restoring files from the archive does not hold such
-permissions, the mode bit(s) specifying those special permissions
-are ignored.  Modes which are not supported by the operating system
-restoring files from the archive will be ignored.  Unsupported modes
-should be faked up when creating or updating an archive; e.g., the
-group permission could be copied from the @emph{other} permission.
-
-The @code{uid} and @code{gid} fields are the numeric user and group
-ID of the file owners, respectively.  If the operating system does
-not support numeric user or group IDs, these fields should be ignored.
-
-The @code{size} field is the size of the file in bytes; linked files
-are archived with this field specified as zero.  @FIXME-xref{Modifiers, in
-particular the @option{--incremental} (@option{-G}) option.}
-
-The @code{mtime} field is the data modification time of the file at
-the time it was archived.  It is the ASCII representation of the octal
-value of the last time the file's contents were modified, represented
-as an integer number of
-seconds since January 1, 1970, 00:00 Coordinated Universal Time.
-
-The @code{chksum} field is the ASCII representation of the octal value
-of the simple sum of all bytes in the header block.  Each 8-bit
-byte in the header is added to an unsigned integer, initialized to
-zero, the precision of which shall be no less than seventeen bits.
-When calculating the checksum, the @code{chksum} field is treated as
-if it were all blanks.
-
-The @code{typeflag} field specifies the type of file archived.  If a
-particular implementation does not recognize or permit the specified
-type, the file will be extracted as if it were a regular file.  As this
-action occurs, @command{tar} issues a warning to the standard error.
-
-The @code{atime} and @code{ctime} fields are used in making incremental
-backups; they store, respectively, the particular file's access and
-status change times.
-
-The @code{offset} is used by the @option{--multi-volume} (@option{-M}) option, when
-making a multi-volume archive.  The offset is number of bytes into
-the file that we need to restart at to continue the file on the next
-tape, i.e., where we store the location that a continued file is
-continued at.
-
-The following fields were added to deal with sparse files.  A file
-is @dfn{sparse} if it takes in unallocated blocks which end up being
-represented as zeros, i.e., no useful data.  A test to see if a file
-is sparse is to look at the number blocks allocated for it versus the
-number of characters in the file; if there are fewer blocks allocated
-for the file than would normally be allocated for a file of that
-size, then the file is sparse.  This is the method @command{tar} uses to
-detect a sparse file, and once such a file is detected, it is treated
-differently from non-sparse files.
-
-Sparse files are often @code{dbm} files, or other database-type files
-which have data at some points and emptiness in the greater part of
-the file.  Such files can appear to be very large when an @samp{ls
--l} is done on them, when in truth, there may be a very small amount
-of important data contained in the file.  It is thus undesirable
-to have @command{tar} think that it must back up this entire file, as
-great quantities of room are wasted on empty blocks, which can lead
-to running out of room on a tape far earlier than is necessary.
-Thus, sparse files are dealt with so that these empty blocks are
-not written to the tape.  Instead, what is written to the tape is a
-description, of sorts, of the sparse file: where the holes are, how
-big the holes are, and how much data is found at the end of the hole.
-This way, the file takes up potentially far less room on the tape,
-and when the file is extracted later on, it will look exactly the way
-it looked beforehand.  The following is a description of the fields
-used to handle a sparse file:
-
-The @code{sp} is an array of @code{struct sparse}.  Each @code{struct
-sparse} contains two 12-character strings which represent an offset
-into the file and a number of bytes to be written at that offset.
-The offset is absolute, and not relative to the offset in preceding
-array element.
-
-The header can hold four of these @code{struct sparse} at the moment;
-if more are needed, they are not stored in the header.
-
-The @code{isextended} flag is set when an @code{extended_header}
-is needed to deal with a file.  Note that this means that this flag
-can only be set when dealing with a sparse file, and it is only set
-in the event that the description of the file will not fit in the
-allotted room for sparse structures in the header.  In other words,
-an extended_header is needed.
-
-The @code{extended_header} structure is used for sparse files which
-need more sparse structures than can fit in the header.  The header can
-fit 4 such structures; if more are needed, the flag @code{isextended}
-gets set and the next block is an @code{extended_header}.
-
-Each @code{extended_header} structure contains an array of 21
-sparse structures, along with a similar @code{isextended} flag
-that the header had.  There can be an indeterminate number of such
-@code{extended_header}s to describe a sparse file.
-
-@table @asis
-
-@item @code{REGTYPE}
-@itemx @code{AREGTYPE}
-These flags represent a regular file.  In order to be compatible
-with older versions of @command{tar}, a @code{typeflag} value of
-@code{AREGTYPE} should be silently recognized as a regular file.
-New archives should be created using @code{REGTYPE}.  Also, for
-backward compatibility, @command{tar} treats a regular file whose name
-ends with a slash as a directory.
-
-@item @code{LNKTYPE}
-This flag represents a file linked to another file, of any type,
-previously archived.  Such files are identified in Unix by each
-file having the same device and inode number.  The linked-to name is
-specified in the @code{linkname} field with a trailing null.
-
-@item @code{SYMTYPE}
-This represents a symbolic link to another file.  The linked-to name
-is specified in the @code{linkname} field with a trailing null.
-
-@item @code{CHRTYPE}
-@itemx @code{BLKTYPE}
-These represent character special files and block special files
-respectively.  In this case the @code{devmajor} and @code{devminor}
-fields will contain the major and minor device numbers respectively.
-Operating systems may map the device specifications to their own
-local specification, or may ignore the entry.
-
-@item @code{DIRTYPE}
-This flag specifies a directory or sub-directory.  The directory
-name in the @code{name} field should end with a slash.  On systems where
-disk allocation is performed on a directory basis, the @code{size} field
-will contain the maximum number of bytes (which may be rounded to
-the nearest disk block allocation unit) which the directory may
-hold.  A @code{size} field of zero indicates no such limiting.  Systems
-which do not support limiting in this manner should ignore the
-@code{size} field.
-
-@item @code{FIFOTYPE}
-This specifies a FIFO special file.  Note that the archiving of a
-FIFO file archives the existence of this file and not its contents.
-
-@item @code{CONTTYPE}
-This specifies a contiguous file, which is the same as a normal
-file except that, in operating systems which support it, all its
-space is allocated contiguously on the disk.  Operating systems
-which do not allow contiguous allocation should silently treat this
-type as a normal file.
-
-@item @code{A} @dots{} @code{Z}
-These are reserved for custom implementations.  Some of these are
-used in the @acronym{GNU} modified format, as described below.
-
-@end table
-
-Other values are reserved for specification in future revisions of
-the P1003 standard, and should not be used by any @command{tar} program.
-
-The @code{magic} field indicates that this archive was output in
-the P1003 archive format.  If this field contains @code{TMAGIC},
-the @code{uname} and @code{gname} fields will contain the ASCII
-representation of the owner and group of the file respectively.
-If found, the user and group IDs are used rather than the values in
-the @code{uid} and @code{gid} fields.
-
-For references, see ISO/IEC 9945-1:1990 or IEEE Std 1003.1-1990, pages
-169-173 (section 10.1) for @cite{Archive/Interchange File Format}; and
-IEEE Std 1003.2-1992, pages 380-388 (section 4.48) and pages 936-940
-(section E.4.48) for @cite{pax - Portable archive interchange}.
-
-@node Extensions
-@section @acronym{GNU} Extensions to the Archive Format
-@UNREVISED
-
-The @acronym{GNU} format uses additional file types to describe new types of
-files in an archive.  These are listed below.
-
-@table @code
-@item GNUTYPE_DUMPDIR
-@itemx 'D'
-This represents a directory and a list of files created by the
-@option{--incremental} (@option{-G}) option.  The @code{size} field gives the total
-size of the associated list of files.  Each file name is preceded by
-either a @samp{Y} (the file should be in this archive) or an @samp{N}.
-(The file is a directory, or is not stored in the archive.)  Each file
-name is terminated by a null.  There is an additional null after the
-last file name.
-
-@item GNUTYPE_MULTIVOL
-@itemx 'M'
-This represents a file continued from another volume of a multi-volume
-archive created with the @option{--multi-volume} (@option{-M}) option.  The original
-type of the file is not given here.  The @code{size} field gives the
-maximum size of this piece of the file (assuming the volume does
-not end before the file is written out).  The @code{offset} field
-gives the offset from the beginning of the file where this part of
-the file begins.  Thus @code{size} plus @code{offset} should equal
-the original size of the file.
-
-@item GNUTYPE_SPARSE
-@itemx 'S'
-This flag indicates that we are dealing with a sparse file.  Note
-that archiving a sparse file requires special operations to find
-holes in the file, which mark the positions of these holes, along
-with the number of bytes of data to be found after the hole.
-
-@item GNUTYPE_VOLHDR
-@itemx 'V'
-This file type is used to mark the volume header that was given with
-the @option{--label=@var{archive-label}} (@option{-V @var{archive-label}}) option when the archive was created.  The @code{name}
-field contains the @code{name} given after the @option{--label=@var{archive-label}} (@option{-V @var{archive-label}}) option.
-The @code{size} field is zero.  Only the first file in each volume
-of an archive should have this type.
-
-@end table
-
-You may have trouble reading a @acronym{GNU} format archive on a
-non-@acronym{GNU} system if the options @option{--incremental} (@option{-G}),
-@option{--multi-volume} (@option{-M}), @option{--sparse} (@option{-S}), or @option{--label=@var{archive-label}} (@option{-V @var{archive-label}}) were
-used when writing the archive.  In general, if @command{tar} does not
-use the @acronym{GNU}-added fields of the header, other versions of
-@command{tar} should be able to read the archive.  Otherwise, the
-@command{tar} program will give an error, the most likely one being a
-checksum error.
-
 @node cpio
 @section Comparison of @command{tar} and @command{cpio}
 @UNREVISED
@@ -8403,7 +9130,7 @@ too.  The installer could also check for @samp{DEFTAPE} in
 @file{<sys/mtio.h>}.
 
 @table @option
-@opindex force-local, short description
+@xopindex{force-local, short description}
 @item --force-local
 Archive file is local even if it contains a colon.
 
@@ -8423,7 +9150,7 @@ variable @env{RSH} @emph{at installation time}.
 @item -[0-7][lmh]
 Specify drive and density.
 
-@opindex multi-volume, short description
+@xopindex{multi-volume, short description}
 @item -M
 @itemx --multi-volume
 Create/list/extract multi-volume archive.
@@ -8432,7 +9159,7 @@ This option causes @command{tar} to write a @dfn{multi-volume} archive---one
 that may be larger than will fit on the medium used to hold it.
 @xref{Multi-Volume Archives}.
 
-@opindex tape-length, short description
+@xopindex{tape-length, short description}
 @item -L @var{num}
 @itemx --tape-length=@var{num}
 Change tape after writing @var{num} x 1024 bytes.
@@ -8441,8 +9168,8 @@ This option might be useful when your tape drivers do not properly
 detect end of physical tapes.  By being slightly conservative on the
 maximum tape length, you might avoid the problem entirely.
 
-@opindex info-script, short description
-@opindex new-volume-script, short description
+@xopindex{info-script, short description}
+@xopindex{new-volume-script, short description}
 @item -F @var{file}
 @itemx --info-script=@var{file}
 @itemx --new-volume-script=@var{file}
@@ -8709,7 +9436,7 @@ examples of format parameter considerations.
 @opindex blocking-factor
 The data in an archive is grouped into blocks, which are 512 bytes.
 Blocks are read and written in whole number multiples called
-@dfn{records}.  The number of blocks in a record (ie.  the size of a
+@dfn{records}.  The number of blocks in a record (i.e.  the size of a
 record in units of 512 bytes) is called the @dfn{blocking factor}.
 The @option{--blocking-factor=@var{512-size}} (@option{-b
 @var{512-size}}) option specifies the blocking factor of an archive.
@@ -8767,7 +9494,7 @@ it would normally.  To extract files from an archive with a non-standard
 blocking factor (particularly if you're not sure what the blocking factor
 is), you can usually use the @option{--read-full-records} (@option{-B}) option while
 specifying a blocking factor larger then the blocking factor of the archive
-(ie.  @samp{tar --extract --read-full-records --blocking-factor=300}.
+(i.e.  @samp{tar --extract --read-full-records --blocking-factor=300}.
 @xref{list}, for more information on the @option{--list} (@option{-t})
 operation.  @xref{Reading}, for a more detailed explanation of that option.
 
@@ -8871,7 +9598,7 @@ the first null block encountered.  This inelegantly breaks the pipe.
 @command{tar} should rather drain the pipe out before exiting itself.
 @end itemize
 
-@opindex ignore-zeros, short description
+@xopindex{ignore-zeros, short description}
 @item -i
 @itemx --ignore-zeros
 Ignore blocks of zeros in archive (means EOF).
@@ -8888,7 +9615,7 @@ Note that this option causes @command{tar} to read to the end of the
 archive file, which may sometimes avoid problems when multiple files
 are stored on a single physical tape.
 
-@opindex read-full-records, short description
+@xopindex{read-full-records, short description}
 @item -B
 @itemx --read-full-records
 Reblock as we read (for reading 4.2BSD pipes).
@@ -9149,8 +9876,10 @@ Prints status information about the tape unit.
 @FIXME{Is there a better way to frob the spacing on the list?}
 
 If you don't specify a @var{tapename}, @command{mt} uses the environment
-variable @env{TAPE}; if @env{TAPE} is not set, @command{mt} uses the device
-@file{/dev/rmt12}.
+variable @env{TAPE}; if @env{TAPE} is not set, @command{mt} will use
+the default device specified in your @file{sys/mtio.h} file
+(@code{DEFTAPE} variable).  If this is not defined, the program will
+display a descriptive error message and exit with code 1.
 
 @command{mt} returns a 0 exit status when the operation(s) were
 successful, 1 if the command was unrecognized, and 2 if an operation
@@ -9158,26 +9887,114 @@ failed.
 
 @node Using Multiple Tapes
 @section Using Multiple Tapes
-@UNREVISED
 
 Often you might want to write a large archive, one larger than will fit
 on the actual tape you are using.  In such a case, you can run multiple
 @command{tar} commands, but this can be inconvenient, particularly if you
 are using options like @option{--exclude=@var{pattern}} or dumping entire file systems.
-Therefore, @command{tar} supports multiple tapes automatically.
+Therefore, @command{tar} provides a special mode for creating
+multi-volume archives.
+
+@dfn{Multi-volume} archive is a single @command{tar} archive, stored
+on several media volumes of fixed size.  Although in this section we will
+often call @samp{volume} a @dfn{tape}, there is absolutely no
+requirement for multi-volume archives to be stored on tapes.  Instead,
+they can use whatever media type the user finds convenient, they can
+even be located on files.  
+
+When creating a multi-volume arvhive, @GNUTAR{} continues to fill
+current volume until it runs out of space, then it switches to
+next volume (usually the operator is queried to replace the tape on
+this point), and continues working on the new volume.  This operation
+continues untill all requested files are dumped.  If @GNUTAR{} detects
+end of media while dumping a file, such a file is archived in split
+form.  Some very big files can even be split across several volumes. 
+
+Each volume is itself a valid @GNUTAR{} archive, so it can be read
+without any special options.  Consequently any file member residing
+entirely on one volume can be extracted or otherwise operated upon
+without needing the other volume.  Sure enough, to extract a split
+member you would need all volumes its parts reside on.
+
+Multi-volume archives suffer from several limitations.  In particular,
+they cannot be compressed.
+
+@GNUTAR{} is able to create multi-volume archives of two formats
+(@pxref{Formats}): @samp{GNU} and @samp{POSIX}.
+
+@menu
+* Multi-Volume Archives::       Archives Longer than One Tape or Disk
+* Tape Files::                  Tape Files
+* Tarcat::                      Concatenate Volumes into a Single Archive
+
+@end menu
+
+@node Multi-Volume Archives
+@subsection Archives Longer than One Tape or Disk
+@cindex Multi-volume archives
+
+@opindex multi-volume
+To create an archive that is larger than will fit on a single unit of
+the media, use the @option{--multi-volume} (@option{-M}) option in conjunction with
+the @option{--create} option (@pxref{create}).  A @dfn{multi-volume}
+archive can be manipulated like any other archive (provided the
+@option{--multi-volume} option is specified), but is stored on more
+than one tape or disk.
+
+When you specify @option{--multi-volume}, @command{tar} does not report an
+error when it comes to the end of an archive volume (when reading), or
+the end of the media (when writing).  Instead, it prompts you to load
+a new storage volume.  If the archive is on a magnetic tape, you
+should change tapes when you see the prompt; if the archive is on a
+floppy disk, you should change disks; etc.
+
+@table @option
+@item --multi-volume
+@itemx -M
+Creates a multi-volume archive, when used in conjunction with
+@option{--create} (@option{-c}).  To perform any other operation on a multi-volume
+archive, specify @option{--multi-volume} in conjunction with that
+operation.
+For example:
+
+@smallexample
+$ @kbd{tar --create --multi-volume --file=/dev/tape @var{files}}
+@end smallexample
+@end table
+
+The method @command{tar} uses to detect end of tape is not perfect, and
+fails on some operating systems or on some devices.  If @command{tar}
+cannot detect the end of the tape itself, you can use
+@option{--tape-length} option to inform it about the capacity of the
+tape:
+
+@anchor{tape-length}
+@table @option
+@opindex tape-length
+@item --tape-length=@var{size}
+@itemx -L @var{size}
+Set maximum length of a volume.  The @var{size} argument should then
+be the usable size of the tape in units of 1024 bytes.  This option
+selects @option{--multi-volume} automatically.  For example:
+
+@smallexample
+$ @kbd{tar --create --tape-length=41943040 --file=/dev/tape @var{files}}
+@end smallexample
+@end table
+
+@anchor{change volume prompt}
+When @GNUTAR{} comes to the end of a storage media, it asks you to
+change the volume.  The built-in prompt for POSIX locale
+is@footnote{If you run @GNUTAR{} under a different locale, the
+translation to the locale's language will be used.}: 
 
-Use @option{--multi-volume} (@option{-M}) on the command line, and
-then @command{tar} will, when it reaches the end of the tape, prompt
-for another tape, and continue the archive.  Each tape will have an
-independent archive, and can be read without needing the other.  (As
-an exception to this, the file that @command{tar} was archiving when
-it ran out of tape will usually be split between the two archives; in
-this case you need to extract from the first archive, using
-@option{--multi-volume}, and then put in the second tape when
-prompted, so @command{tar} can restore both halves of the file.)
+@smallexample
+Prepare volume #@var{n} for `@var{archive}' and hit return:
+@end smallexample
 
-@GNUTAR{} multi-volume archives do not use a truly portable format.
-You need @GNUTAR{} at both ends to process them properly.
+@noindent
+where @var{n} is the ordinal number of the volume to be created and
+@var{archive} is archive file or device name.
 
 When prompting for a new tape, @command{tar} accepts any of the following
 responses:
@@ -9191,7 +10008,9 @@ Request @command{tar} to exit immediately.
 Request @command{tar} to write the next volume on the file @var{file-name}.
 @item !
 Request @command{tar} to run a subshell.  This option can be disabled
-by giving @option{--restrict} command line option to @command{tar}.
+by giving @option{--restrict} command line option to
+@command{tar}@footnote{@xref{--restrict}, for more information about
+this option}.
 @item y
 Request @command{tar} to begin writing the next volume.
 @end table
@@ -9199,18 +10018,44 @@ Request @command{tar} to begin writing the next volume.
 (You should only type @samp{y} after you have changed the tape;
 otherwise @command{tar} will write over the volume it just finished.)
 
+@cindex Volume number file
+@cindex volno file
+@anchor{volno-file}
+@opindex volno-file
+The volume number used by @command{tar} in its tape-changing prompt
+can be changed; if you give the
+@option{--volno-file=@var{file-of-number}} option, then
+@var{file-of-number} should be an unexisting file to be created, or
+else, a file already containing a decimal number.  That number will be
+used as the volume number of the first volume written.  When
+@command{tar} is finished, it will rewrite the file with the
+now-current volume number. (This does not change the volume number
+written on a tape label, as per @ref{label}, it @emph{only} affects
+the number used in the prompt.)
+
 @cindex End-of-archive info script
 @cindex Info script
 @anchor{info-script}
 @opindex info-script
 @opindex new-volume-script
-If you want more elaborate behavior than this, give @command{tar} the
-@option{--info-script=@var{script-name}}
-(@option{--new-volume-script=@var{script-name}}, @option{-F
-@var{script-name}}) option.  The file @var{script-name} is expected to
-be a program (or shell script) to be run instead of the normal
-prompting procedure.  It is executed without any command line
-arguments.  Additional data is passed to it via the following
+If you want more elaborate behavior than this, you can write a special
+@dfn{new volume script}, that will be responsible for changing the
+volume, and instruct @command{tar} to use it instead of its normal
+prompting procedure: 
+
+@table @option
+@item --info-script=@var{script-name}
+@itemx --new-volume-script=@var{script-name}
+@itemx -F @var{script-name}
+Specify the full name of the volume script to use.  The script can be
+used to eject cassettes, or to broadcast messages such as
+@samp{Someone please come change my tape} when performing unattended
+backups.
+@end table
+
+The @var{script-name} is executed without any command line
+arguments.  It inherits @command{tar}'s shell environment.
+Additional data is passed to it via the following
 environment variables:
 
 @table @env
@@ -9228,7 +10073,7 @@ Ordinal number of the volume @command{tar} is about to start.
 
 @vrindex TAR_SUBCOMMAND, info script environment variable
 @item TAR_SUBCOMMAND
-Short option describing the operation @command{tar} is executed.
+Short option describing the operation @command{tar} is executing
 @xref{Operations}, for a complete list of subcommand options.
 
 @vrindex TAR_FORMAT, info script environment variable
@@ -9237,47 +10082,37 @@ Format of the archive being processed. @xref{Formats}, for a complete
 list of archive format names.
 @end table
 
-The info script can instruct @command{tar} to use new archive name,
-by writing in to file descriptor 3 (see below for an
-example).
+The volume script can instruct @command{tar} to use new archive name,
+by writing in to file descriptor 3 (see below for an example).
 
 If the info script fails, @command{tar} exits; otherwise, it begins
 writing the next volume.
 
-The method @command{tar} uses to detect end of tape is not perfect, and
-fails on some operating systems or on some devices.  You can use the
-@option{--tape-length=@var{size}} (@option{-L @var{size}}) option if
-@command{tar} can't detect the end of the tape itself.  This option
-selects @option{--multi-volume} (@option{-M}) automatically. The
-@var{size} argument should then be the usable size of the tape in
-units of 1024 bytes. But for many devices, and floppy disks in
-particular, this option is never required for real, as far as we know.
-
-@cindex Volume number file
-@cindex volno file
-@anchor{volno-file}
-@opindex volno-file
-The volume number used by @command{tar} in its tape-change prompt
-can be changed; if you give the
-@option{--volno-file=@var{file-of-number}} option, then
-@var{file-of-number} should be an unexisting file to be created, or
-else, a file already containing a decimal number.  That number will be
-used as the volume number of the first volume written.  When
-@command{tar} is finished, it will rewrite the file with the
-now-current volume number. (This does not change the volume number
-written on a tape label, as per @ref{label}, it @emph{only} affects
-the number used in the prompt.)
-
 If you want @command{tar} to cycle through a series of files or tape
 drives, there are three approaches to choose from.  First of all, you
-can give @command{tar} multiple @option{--file} options. In this case
+can give @command{tar} multiple @option{--file} options.  In this case
 the specified files will be used, in sequence, as the successive
 volumes of the archive.  Only when the first one in the sequence needs
 to be used again will @command{tar} prompt for a tape change (or run
-the info script).  Secondly, you can use the @samp{n} response to the
-tape-change prompt, and, finally, you can use an info script, that
-writes new archive name to file descriptor.  The following example
-illustrates this approach:
+the info script).  For example, suppose someone has two tape drives on
+a system named @file{/dev/tape0} and @file{/dev/tape1}.  For having
+@GNUTAR{} to switch to the second drive when it needs to write the
+second tape, and then back to the first tape, etc., just do either of:
+
+@smallexample
+$ @kbd{tar --create --multi-volume --file=/dev/tape0 --file=/dev/tape1 @var{files}}
+$ @kbd{tar cMff /dev/tape0 /dev/tape1 @var{files}}
+@end smallexample
+
+The second method is to use the @samp{n} response to the tape-change
+prompt.  
+
+Finally, the most flexible approach is to use a volume script, that
+writes new archive name to the file descriptor #3.  For example, the
+following volume script will create a series of archive files, named
+@file{@var{archive}-@var{vol}}, where @var{archive} is the name of the
+archive being created (as given by @option{--file} option) and
+@var{vol} is the ordinal number of the archive being created:
 
 @smallexample
 @group
@@ -9296,50 +10131,22 @@ echo $@{name:-$TAR_ARCHIVE@}-$TAR_VOLUME >&3
 @end group
 @end smallexample
 
-Each volume of a multi-volume archive is an independent @command{tar}
-archive, complete in itself.  For example, you can list or extract any
-volume alone; just don't specify @option{--multi-volume}
-(@option{-M}).  However, if one file in the archive is split across
-volumes, the only way to extract it successfully is with a
-multi-volume extract command @option{--extract --multi-volume}
-(@option{-xM}) starting on or before the volume where the file begins.
-
-For example, let's presume someone has two tape drives on a system
-named @file{/dev/tape0} and @file{/dev/tape1}.  For having @GNUTAR{}
-to switch to the second drive when it needs to write the
-second tape, and then back to the first tape, etc., just do either of:
+The same script cant be used while listing, comparing or extracting
+from the created archive.  For example:
 
 @smallexample
-$ @kbd{tar --create --multi-volume --file=/dev/tape0 --file=/dev/tape1 @var{files}}
-$ @kbd{tar cMff /dev/tape0 /dev/tape1 @var{files}}
+@group
+# @r{Create a multi-volume archive:}
+$ @kbd{tar -c -L1024 -f archive.tar -F new-volume .}
+# @r{Extract from the created archive:}
+$ @kbd{tar -x -f archive.tar -F new-volume .}
+@end group
 @end smallexample
 
-@menu
-* Multi-Volume Archives::       Archives Longer than One Tape or Disk
-* Tape Files::                  Tape Files
-* Tarcat::                      Concatenate Volumes into a Single Archive
-
-@end menu
-
-@node Multi-Volume Archives
-@subsection Archives Longer than One Tape or Disk
-@cindex Multi-volume archives
-@UNREVISED
-
-@opindex multi-volume
-To create an archive that is larger than will fit on a single unit of
-the media, use the @option{--multi-volume} (@option{-M}) option in conjunction with
-the @option{--create} option (@pxref{create}).  A @dfn{multi-volume}
-archive can be manipulated like any other archive (provided the
-@option{--multi-volume} option is specified), but is stored on more
-than one tape or disk.
-
-When you specify @option{--multi-volume}, @command{tar} does not report an
-error when it comes to the end of an archive volume (when reading), or
-the end of the media (when writing).  Instead, it prompts you to load
-a new storage volume.  If the archive is on a magnetic tape, you
-should change tapes when you see the prompt; if the archive is on a
-floppy disk, you should change disks; etc.
+@noindent
+Notice, that the first command had to use @option{-L} option, since
+otherwise @GNUTAR{} will end up writing everything to file
+@file{archive.tar}.
 
 You can read each individual volume of a multi-volume archive as if it
 were an archive by itself.  For example, to list the contents of one
@@ -9348,7 +10155,7 @@ To extract an archive member from one volume (assuming it is described
 that volume), use @option{--extract}, again without
 @option{--multi-volume}.
 
-If an archive member is split across volumes (ie.  its entry begins on
+If an archive member is split across volumes (i.e.  its entry begins on
 one volume of the media and ends on another), you need to specify
 @option{--multi-volume} to extract it successfully.  In this case, you
 should load the volume where the archive member starts, and use
@@ -9356,52 +10163,22 @@ should load the volume where the archive member starts, and use
 volumes as it needs them.  @xref{extracting archives}, for more
 information about extracting archives.
 
-@option{--info-script=@var{script-name}}
-(@option{--new-volume-script=@var{script-name}}, @option{-F
-@var{script-name}}) (@pxref{info-script}) is like
-@option{--multi-volume} (@option{-M}), except that @command{tar} does
-not prompt you directly to change media volumes when a volume is
-full---instead, @command{tar} runs commands you have stored in
-@var{script-name}.  For example, this option can be used to eject
-cassettes, or to broadcast messages such as @samp{Someone please come
-change my tape} when performing unattended backups.  When
-@var{script-name} is done, @command{tar} will assume that the media
-has been changed.
-
 Multi-volume archives can be modified like any other archive.  To add
 files to a multi-volume archive, you need to only mount the last
 volume of the archive media (and new volumes, if needed).  For all
 other operations, you need to use the entire archive.
 
 If a multi-volume archive was labeled using
-@option{--label=@var{archive-label}} (@option{-V @var{archive-label}})
-(@pxref{label}) when it was created, @command{tar} will not
-automatically label volumes which are added later.  To label
-subsequent volumes, specify @option{--label=@var{archive-label}} again
-in conjunction with the @option{--append}, @option{--update} or
-@option{--concatenate} operation.
-
-@cindex Labeling multi-volume archives
-@FIXME{example}
-
-@FIXME{There should be a sample program here, including an exit
-before end.  Is the exit status even checked in tar?  :-(}
-
-@table @option
-@item --multi-volume
-@itemx -M
-Creates a multi-volume archive, when used in conjunction with
-@option{--create} (@option{-c}).  To perform any other operation on a multi-volume
-archive, specify @option{--multi-volume} in conjunction with that
-operation.
-
-@item --info-script=@var{program-file}
-@itemx --new-volume-script=@var{program-file}
-@itemx -F @var{program-file}
-Creates a multi-volume archive via a script.  Used in conjunction with
-@option{--create} (@option{-c}). @xref{info-script}, dor a detailed discussion.
-@end table
-
+@option{--label=@var{archive-label}} (@pxref{label}) when it was
+created, @command{tar} will not automatically label volumes which are
+added later.  To label subsequent volumes, specify
+@option{--label=@var{archive-label}} again in conjunction with the
+@option{--append}, @option{--update} or @option{--concatenate} operation.
+
+@FIXME{This is no longer true: Multivolume archives in @samp{POSIX}
+format can be extracted using any posix-compliant tar
+implementation.  The split members can then be recreated from parts
+using a simple shell script. Provide more information about it:}
 Beware that there is @emph{no} real standard about the proper way, for
 a @command{tar} archive, to span volume boundaries.  If you have a
 multi-volume created by some vendor's @command{tar}, there is almost
@@ -9478,6 +10255,7 @@ will usually see lots of spurious messages.
 @section Including a Label in the Archive
 @cindex Labeling an archive
 @cindex Labels on the archive media
+@cindex Labeling multi-volume archives
 @UNREVISED
 
 @opindex label
@@ -9635,8 +10413,8 @@ file system as the archive is being written, to verify a write
 operation, or can compare a previously written archive, to insure that
 it is up to date.
 
-@opindex verify, using with @option{--create}
-@opindex create, using with @option{--verify}
+@xopindex{verify, using with @option{--create}}
+@xopindex{create, using with @option{--verify}}
 To check for discrepancies in an archive immediately after it is
 written, use the @option{--verify} (@option{-W}) option in conjunction with
 the @option{--create} operation.  When this option is
@@ -9744,7 +10522,7 @@ To treat member names as globbing patterns, use --wildcards option.
 If you want to tar to mimic the behavior of versions prior to 1.15.91,
 add this option to your @env{TAR_OPTIONS} variable.
 
-@xref{Wildcards}, for the detailed discussion of the use of globbing
+@xref{wildcards}, for the detailed discussion of the use of globbing
 patterns by @GNUTAR{}.
 
 @item Use of short option @option{-o}.
@@ -9765,9 +10543,9 @@ up to and including 1.8.4 invoke tar with this option to produce
 distribution tarballs.  @xref{Formats,v7}, for the detailed discussion
 of this issue and its implications.
 
-@FIXME{Change the first argument to tar-formats if and when Automake
-people accept my patch to the documentation, and the new Automake is
-out --Sergey 2006-05-25}.
+@FIXME{Change the first argument to tar-formats when the new Automake is
+out. The proposition to add @anchor{} to the appropriate place of its
+docs was accepted by Automake people  --Sergey 2006-05-25}.
 @xref{Options, tar-v7, Changing Automake's Behavior,
 automake, GNU Automake}, for a description on how to use various
 archive formats with @command{automake}.
@@ -10007,14 +10785,14 @@ output. Default is 12.
 Right margin of the text output. Used for wrapping.
 @end deftypevr
 
+@node Tar Internals
+@appendix Tar Internals
+@include intern.texi
+
 @node Genfile
 @appendix Genfile
 @include genfile.texi
 
-@node Snapshot Files
-@appendix Format of the Incremental Snapshot Files
-@include snapshot.texi
-
 @node Free Software Needs Free Documentation
 @appendix Free Software Needs Free Documentation
 @include freemanuals.texi
@@ -10033,11 +10811,7 @@ Right margin of the text output. Used for wrapping.
 
 This appendix contains an index of all @GNUTAR{} long command line
 options. The options are listed without the preceeding double-dash.
-
-@FIXME{@itemize
-@item Make sure @emph{all} options are indexed.
-@item Provide an index of short options
-@end itemize}
+For a cross-reference of short command line options, @ref{Short Option Summary}.
 
 @printindex op
 
This page took 0.150895 seconds and 4 git commands to generate.