summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile.am153
-rw-r--r--doc/Makefile.in1893
-rw-r--r--doc/dumpdir.texi132
-rw-r--r--doc/fdl.texi507
-rw-r--r--doc/freemanuals.texi89
-rwxr-xr-xdoc/gendocs_template125
-rw-r--r--doc/genfile.texi367
-rw-r--r--doc/header.texi243
-rw-r--r--doc/intern.texi332
-rw-r--r--doc/mastermenu.el90
-rw-r--r--doc/parse-datetime.texi594
-rw-r--r--doc/rendition.texi99
-rw-r--r--doc/rmt.8254
-rw-r--r--doc/snapshot.texi164
-rw-r--r--doc/sparse.texi234
-rw-r--r--doc/stamp-vti4
-rw-r--r--doc/tar-snapshot-edit.texi91
-rw-r--r--doc/tar.11319
-rw-r--r--doc/tar.info466
-rw-r--r--doc/tar.info-17890
-rw-r--r--doc/tar.info-27007
-rw-r--r--doc/tar.texi13252
-rw-r--r--doc/texify.sed27
-rw-r--r--doc/untabify.el13
-rw-r--r--doc/value.texi20
-rw-r--r--doc/version.texi4
26 files changed, 35369 insertions, 0 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..a84e0e3
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,153 @@
+# Makefile for GNU tar documentation.
+
+# Copyright 1994-1997, 1999-2001, 2003, 2006-2007, 2013-2014, 2016 Free
+# Software Foundation, Inc.
+
+# This file is part of GNU tar.
+
+# GNU tar is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU tar is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+info_TEXINFOS = tar.texi
+tar_TEXINFOS = \
+ dumpdir.texi\
+ tar-snapshot-edit.texi\
+ fdl.texi\
+ freemanuals.texi\
+ genfile.texi\
+ header.texi\
+ intern.texi\
+ parse-datetime.texi\
+ rendition.texi\
+ snapshot.texi\
+ sparse.texi\
+ value.texi
+
+dist_man_MANS=tar.1 $(RMT_8)
+if PU_RMT_COND
+ RMT_8=rmt.8
+endif
+
+EXTRA_DIST = gendocs_template mastermenu.el texify.sed untabify.el rmt.8
+
+# The rendering level is anyone of PUBLISH, DISTRIB or PROOF.
+# Just call 'make RENDITION=PROOF [target]' if you want PROOF rendition.
+RENDITION = DISTRIB
+
+MAKEINFOFLAGS=-D$(RENDITION)
+
+header.texi: $(top_srcdir)/src/tar.h
+ sed -f $(srcdir)/texify.sed $(top_srcdir)/src/tar.h \
+ | expand >$@
+
+master-menu: $(tar_TEXINFOS)
+ emacs -batch -l mastermenu.el -f make-master-menu $(info_TEXINFOS)
+
+untabify:
+ emacs -batch -l untabify.el $(info_TEXINFOS) $(tar_TEXINFOS)
+
+final: untabify master-menu
+
+# Checking
+check-format:
+ @if test -n "`cat $(info_TEXINFOS) $(tar_TEXINFOS) | tr -d -c '\t'`"; then \
+ echo "Sources contain tabs; run make untabify"; \
+ false; \
+ fi
+
+check-options:
+ @ARGP_HELP_FMT='usage-indent=0,short-opt-col=0,long-opt-col=0,doc-opt-col=0,opt-doc-col=0,header-col=0,rmargin=1' \
+ $(top_builddir)/src/tar --usage | \
+ sed -n 's/^\[--\([^]\=\[]*\).*/\1/p' | sort | uniq > opts.$$$$;\
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
+ $(info_TEXINFOS) | \
+ sed -n '/^@macro/,/^@end macro/d;s/@opindex *\([^@,]*\).*/\1/p' \
+ | sort | uniq > docs.$$$$;\
+ status=0;\
+ join -v1 opts.$$$$ docs.$$$$ > report.$$$$;\
+ if test -s report.$$$$; then \
+ echo 'Not documented options:'; \
+ cat report.$$$$; \
+ status=1; \
+ fi; \
+ join -v2 opts.$$$$ docs.$$$$ > report.$$$$;\
+ if test -s report.$$$$; then \
+ echo 'Non-existing options:';\
+ cat report.$$$$; \
+ status=1; \
+ fi; \
+ rm opts.$$$$ docs.$$$$ report.$$$$;\
+ test $$status -ne 0 && exit $$status
+
+check-refs:
+ @for file in $(info_TEXINFOS) $(tar_TEXINFOS); \
+ do \
+ sed -e = $$file | \
+ sed -n 'N;/@FIXME-.*ref/{s/\(^[0-9][0-9]*\).*@FIXME-.*ref{\([^}]*\).*/'$$file':\1: \2/gp}'; \
+ done > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unresolved cross-references:"; \
+ cat $@-t;\
+ rm $@-t; \
+ else \
+ rm -f $@-t; \
+ fi
+
+check-fixmes:
+ @for file in $(info_TEXINFOS); \
+ do \
+ sed -e = $$file | \
+ sed -n 'N;/@FIXME{/{s/\(^[0-9][0-9]*\).*@FIXME{\([^}]*\).*/'$$file':\1: \2/gp}'; \
+ done > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unresolved FIXMEs:"; \
+ cat $@-t; \
+ rm $@-t; \
+ false; \
+ else \
+ rm -f $@-t; \
+ fi
+
+check-unrevised:
+ @grep -Hn @UNREVISED $(info_TEXINFOS) > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unrevised nodes:"; \
+ cat $@-t; \
+ rm $@-t; \
+ false;\
+ else \
+ rm $@-t; \
+ fi
+
+all-check-docs: check-format check-options check-refs check-fixmes check-unrevised
+
+check-docs:
+ $(MAKE) -k all-check-docs
+
+#
+
+clean-local:
+ rm -rf manual
+
+GENDOCS=gendocs.sh
+
+TEXI2DVI=texi2dvi -t '@set $(RENDITION)' -E
+
+# Make sure you set TEXINPUTS
+# Usual value is:
+# /usr/share/texmf/pdftex/plain/misc:/usr/share/texmf/pdftex/config
+manual:
+ TEXINPUTS=$(srcdir):$(top_srcdir)/build-tex:$(TEXINPUTS) \
+ MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS)" \
+ TEXI2DVI="$(TEXI2DVI) -t @finalout" \
+ $(GENDOCS) --texi2html tar 'GNU tar manual'
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..9afbf82
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,1893 @@
+# Makefile.in generated by automake 1.14 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Makefile for GNU tar documentation.
+
+# Copyright 1994-1997, 1999-2001, 2003, 2006-2007, 2013-2014, 2016 Free
+# Software Foundation, Inc.
+
+# This file is part of GNU tar.
+
+# GNU tar is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU tar is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(tar_TEXINFOS) $(top_srcdir)/build-aux/mdate-sh \
+ $(srcdir)/version.texi $(srcdir)/stamp-vti \
+ $(top_srcdir)/build-aux/texinfo.tex $(dist_man_MANS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
+ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/acl.m4 \
+ $(top_srcdir)/m4/alloca.m4 $(top_srcdir)/m4/argp.m4 \
+ $(top_srcdir)/m4/backupfile.m4 $(top_srcdir)/m4/bison.m4 \
+ $(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/canonicalize.m4 \
+ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/chown.m4 \
+ $(top_srcdir)/m4/clock_time.m4 \
+ $(top_srcdir)/m4/close-stream.m4 $(top_srcdir)/m4/close.m4 \
+ $(top_srcdir)/m4/closedir.m4 $(top_srcdir)/m4/closeout.m4 \
+ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
+ $(top_srcdir)/m4/d-ino.m4 $(top_srcdir)/m4/dirent-safer.m4 \
+ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \
+ $(top_srcdir)/m4/dirname.m4 \
+ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \
+ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eealloc.m4 \
+ $(top_srcdir)/m4/environ.m4 $(top_srcdir)/m4/errno_h.m4 \
+ $(top_srcdir)/m4/error.m4 $(top_srcdir)/m4/euidaccess.m4 \
+ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/extensions.m4 \
+ $(top_srcdir)/m4/extern-inline.m4 \
+ $(top_srcdir)/m4/faccessat.m4 $(top_srcdir)/m4/fchdir.m4 \
+ $(top_srcdir)/m4/fchmodat.m4 $(top_srcdir)/m4/fchownat.m4 \
+ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \
+ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \
+ $(top_srcdir)/m4/fileblocks.m4 $(top_srcdir)/m4/filenamecat.m4 \
+ $(top_srcdir)/m4/flexmember.m4 $(top_srcdir)/m4/float_h.m4 \
+ $(top_srcdir)/m4/fnmatch.m4 $(top_srcdir)/m4/fpending.m4 \
+ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \
+ $(top_srcdir)/m4/fstat.m4 $(top_srcdir)/m4/fstatat.m4 \
+ $(top_srcdir)/m4/futimens.m4 \
+ $(top_srcdir)/m4/getcwd-abort-bug.m4 \
+ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \
+ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
+ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \
+ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \
+ $(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/gettime.m4 \
+ $(top_srcdir)/m4/gettimeofday.m4 $(top_srcdir)/m4/glibc21.m4 \
+ $(top_srcdir)/m4/gnulib-common.m4 \
+ $(top_srcdir)/m4/gnulib-comp.m4 \
+ $(top_srcdir)/m4/group-member.m4 $(top_srcdir)/m4/human.m4 \
+ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/include_next.m4 \
+ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
+ $(top_srcdir)/m4/inttostr.m4 $(top_srcdir)/m4/inttypes-pri.m4 \
+ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
+ $(top_srcdir)/m4/iswblank.m4 $(top_srcdir)/m4/langinfo_h.m4 \
+ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lchown.m4 \
+ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
+ $(top_srcdir)/m4/lib-prefix.m4 \
+ $(top_srcdir)/m4/libunistring-base.m4 \
+ $(top_srcdir)/m4/link-follow.m4 $(top_srcdir)/m4/link.m4 \
+ $(top_srcdir)/m4/linkat.m4 $(top_srcdir)/m4/localcharset.m4 \
+ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
+ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \
+ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/longlong.m4 \
+ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \
+ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \
+ $(top_srcdir)/m4/manywarnings.m4 $(top_srcdir)/m4/mbchar.m4 \
+ $(top_srcdir)/m4/mbiter.m4 $(top_srcdir)/m4/mbrtowc.m4 \
+ $(top_srcdir)/m4/mbsinit.m4 $(top_srcdir)/m4/mbsrtowcs.m4 \
+ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \
+ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \
+ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/mkdir.m4 \
+ $(top_srcdir)/m4/mkdirat.m4 $(top_srcdir)/m4/mkdtemp.m4 \
+ $(top_srcdir)/m4/mkfifo.m4 $(top_srcdir)/m4/mkfifoat.m4 \
+ $(top_srcdir)/m4/mknod.m4 $(top_srcdir)/m4/mktime.m4 \
+ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
+ $(top_srcdir)/m4/modechange.m4 $(top_srcdir)/m4/msvc-inval.m4 \
+ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
+ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \
+ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/obstack.m4 \
+ $(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open.m4 \
+ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \
+ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \
+ $(top_srcdir)/m4/paxutils.m4 $(top_srcdir)/m4/po.m4 \
+ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/priv-set.m4 \
+ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/quote.m4 \
+ $(top_srcdir)/m4/quotearg.m4 $(top_srcdir)/m4/raise.m4 \
+ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read.m4 \
+ $(top_srcdir)/m4/readdir.m4 $(top_srcdir)/m4/readlink.m4 \
+ $(top_srcdir)/m4/readlinkat.m4 $(top_srcdir)/m4/realloc.m4 \
+ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/rename.m4 \
+ $(top_srcdir)/m4/renameat.m4 $(top_srcdir)/m4/rewinddir.m4 \
+ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/rmt.m4 \
+ $(top_srcdir)/m4/rpmatch.m4 $(top_srcdir)/m4/rtapelib.m4 \
+ $(top_srcdir)/m4/safe-read.m4 $(top_srcdir)/m4/safe-write.m4 \
+ $(top_srcdir)/m4/save-cwd.m4 $(top_srcdir)/m4/savedir.m4 \
+ $(top_srcdir)/m4/secure_getenv.m4 \
+ $(top_srcdir)/m4/selinux-context-h.m4 \
+ $(top_srcdir)/m4/selinux-selinux-h.m4 \
+ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/signal_h.m4 \
+ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \
+ $(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/ssize_t.m4 \
+ $(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \
+ $(top_srcdir)/m4/stdalign.m4 $(top_srcdir)/m4/stdarg.m4 \
+ $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
+ $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
+ $(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
+ $(top_srcdir)/m4/stpcpy.m4 $(top_srcdir)/m4/strcase.m4 \
+ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \
+ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/strftime.m4 \
+ $(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strings_h.m4 \
+ $(top_srcdir)/m4/strndup.m4 $(top_srcdir)/m4/strnlen.m4 \
+ $(top_srcdir)/m4/strtoimax.m4 $(top_srcdir)/m4/strtol.m4 \
+ $(top_srcdir)/m4/strtoll.m4 $(top_srcdir)/m4/strtoul.m4 \
+ $(top_srcdir)/m4/strtoull.m4 $(top_srcdir)/m4/strtoumax.m4 \
+ $(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/symlinkat.m4 \
+ $(top_srcdir)/m4/sys_socket_h.m4 \
+ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
+ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sysexits.m4 \
+ $(top_srcdir)/m4/system.m4 $(top_srcdir)/m4/tempname.m4 \
+ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \
+ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \
+ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \
+ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/unistd-safer.m4 \
+ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \
+ $(top_srcdir)/m4/unlinkat.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ $(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimensat.m4 \
+ $(top_srcdir)/m4/utimes.m4 $(top_srcdir)/m4/vasnprintf.m4 \
+ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \
+ $(top_srcdir)/m4/vsnprintf.m4 $(top_srcdir)/m4/warn-on-use.m4 \
+ $(top_srcdir)/m4/warnings.m4 $(top_srcdir)/m4/wchar_h.m4 \
+ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \
+ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
+ $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/write.m4 \
+ $(top_srcdir)/m4/xalloc.m4 $(top_srcdir)/m4/xgetcwd.m4 \
+ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/xstrndup.m4 \
+ $(top_srcdir)/m4/xstrtol.m4 $(top_srcdir)/m4/xvasprintf.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+SOURCES =
+DIST_SOURCES =
+AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
+am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
+am__v_DVIPS_0 = @echo " DVIPS " $@;
+am__v_DVIPS_1 =
+AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
+am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
+am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
+am__v_MAKEINFO_1 =
+AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
+am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
+am__v_INFOHTML_0 = @echo " INFOHTML" $@;
+am__v_INFOHTML_1 =
+AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
+am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
+am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
+am__v_TEXI2DVI_1 =
+AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
+am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
+am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
+am__v_TEXI2PDF_1 =
+AM_V_texinfo = $(am__v_texinfo_@AM_V@)
+am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
+am__v_texinfo_0 = -q
+am__v_texinfo_1 =
+AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
+am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
+am__v_texidevnull_0 = > /dev/null
+am__v_texidevnull_1 =
+INFO_DEPS = $(srcdir)/tar.info
+TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
+am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
+DVIS = tar.dvi
+PDFS = tar.pdf
+PSS = tar.ps
+HTMLS = tar.html
+TEXINFOS = tar.texi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
+ "$(DESTDIR)$(man8dir)"
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+man1dir = $(mandir)/man1
+man8dir = $(mandir)/man8
+NROFF = nroff
+MANS = $(dist_man_MANS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+pkglibexecdir = @pkglibexecdir@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+AR = @AR@
+ARFLAGS = @ARFLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOM4TE = @AUTOM4TE@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BACKUP_LIBEXEC_SCRIPTS = @BACKUP_LIBEXEC_SCRIPTS@
+BACKUP_SBIN_SCRIPTS = @BACKUP_SBIN_SCRIPTS@
+BACKUP_SED_COND = @BACKUP_SED_COND@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFAULT_ARCHIVE = @DEFAULT_ARCHIVE@
+DEFAULT_ARCHIVE_FORMAT = @DEFAULT_ARCHIVE_FORMAT@
+DEFAULT_BLOCKING = @DEFAULT_BLOCKING@
+DEFAULT_QUOTING_STYLE = @DEFAULT_QUOTING_STYLE@
+DEFAULT_RMT_COMMAND = @DEFAULT_RMT_COMMAND@
+DEFAULT_RMT_DIR = @DEFAULT_RMT_DIR@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
+FNMATCH_H = @FNMATCH_H@
+GETOPT_H = @GETOPT_H@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GNULIB_ALPHASORT = @GNULIB_ALPHASORT@
+GNULIB_ATOLL = @GNULIB_ATOLL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
+GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
+GNULIB_CHDIR = @GNULIB_CHDIR@
+GNULIB_CHOWN = @GNULIB_CHOWN@
+GNULIB_CLOSE = @GNULIB_CLOSE@
+GNULIB_CLOSEDIR = @GNULIB_CLOSEDIR@
+GNULIB_DIRFD = @GNULIB_DIRFD@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_DUP = @GNULIB_DUP@
+GNULIB_DUP2 = @GNULIB_DUP2@
+GNULIB_DUP3 = @GNULIB_DUP3@
+GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@
+GNULIB_ENVIRON = @GNULIB_ENVIRON@
+GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
+GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
+GNULIB_FCHDIR = @GNULIB_FCHDIR@
+GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
+GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FCNTL = @GNULIB_FCNTL@
+GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FDOPENDIR = @GNULIB_FDOPENDIR@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFS = @GNULIB_FFS@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FSTAT = @GNULIB_FSTAT@
+GNULIB_FSTATAT = @GNULIB_FSTATAT@
+GNULIB_FSYNC = @GNULIB_FSYNC@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
+GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETCWD = @GNULIB_GETCWD@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
+GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
+GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
+GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
+GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
+GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
+GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
+GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
+GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
+GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
+GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
+GNULIB_GRANTPT = @GNULIB_GRANTPT@
+GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
+GNULIB_IMAXABS = @GNULIB_IMAXABS@
+GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
+GNULIB_ISATTY = @GNULIB_ISATTY@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LCHMOD = @GNULIB_LCHMOD@
+GNULIB_LCHOWN = @GNULIB_LCHOWN@
+GNULIB_LINK = @GNULIB_LINK@
+GNULIB_LINKAT = @GNULIB_LINKAT@
+GNULIB_LOCALECONV = @GNULIB_LOCALECONV@
+GNULIB_LSEEK = @GNULIB_LSEEK@
+GNULIB_LSTAT = @GNULIB_LSTAT@
+GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MBTOWC = @GNULIB_MBTOWC@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
+GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
+GNULIB_MKFIFO = @GNULIB_MKFIFO@
+GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
+GNULIB_MKNOD = @GNULIB_MKNOD@
+GNULIB_MKNODAT = @GNULIB_MKNODAT@
+GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
+GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
+GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
+GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
+GNULIB_MKTIME = @GNULIB_MKTIME@
+GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
+GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
+GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OPEN = @GNULIB_OPEN@
+GNULIB_OPENAT = @GNULIB_OPENAT@
+GNULIB_OPENDIR = @GNULIB_OPENDIR@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_PIPE = @GNULIB_PIPE@
+GNULIB_PIPE2 = @GNULIB_PIPE2@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
+GNULIB_PREAD = @GNULIB_PREAD@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
+GNULIB_PTSNAME = @GNULIB_PTSNAME@
+GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTENV = @GNULIB_PUTENV@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_PWRITE = @GNULIB_PWRITE@
+GNULIB_QSORT_R = @GNULIB_QSORT_R@
+GNULIB_RAISE = @GNULIB_RAISE@
+GNULIB_RANDOM = @GNULIB_RANDOM@
+GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_READ = @GNULIB_READ@
+GNULIB_READDIR = @GNULIB_READDIR@
+GNULIB_READLINK = @GNULIB_READLINK@
+GNULIB_READLINKAT = @GNULIB_READLINKAT@
+GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
+GNULIB_REALPATH = @GNULIB_REALPATH@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_REWINDDIR = @GNULIB_REWINDDIR@
+GNULIB_RMDIR = @GNULIB_RMDIR@
+GNULIB_RPMATCH = @GNULIB_RPMATCH@
+GNULIB_SCANDIR = @GNULIB_SCANDIR@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
+GNULIB_SETENV = @GNULIB_SETENV@
+GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
+GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
+GNULIB_SIGACTION = @GNULIB_SIGACTION@
+GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
+GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
+GNULIB_SLEEP = @GNULIB_SLEEP@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_STAT = @GNULIB_STAT@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRPTIME = @GNULIB_STRPTIME@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOD = @GNULIB_STRTOD@
+GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRTOLL = @GNULIB_STRTOLL@
+GNULIB_STRTOULL = @GNULIB_STRTOULL@
+GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_SYMLINK = @GNULIB_SYMLINK@
+GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
+GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
+GNULIB_TEST_WARN_CFLAGS = @GNULIB_TEST_WARN_CFLAGS@
+GNULIB_TIMEGM = @GNULIB_TIMEGM@
+GNULIB_TIME_R = @GNULIB_TIME_R@
+GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
+GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
+GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
+GNULIB_UNLINK = @GNULIB_UNLINK@
+GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
+GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
+GNULIB_UNSETENV = @GNULIB_UNSETENV@
+GNULIB_USLEEP = @GNULIB_USLEEP@
+GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WARN_CFLAGS = @GNULIB_WARN_CFLAGS@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTOMB = @GNULIB_WCTOMB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GNULIB_WRITE = @GNULIB_WRITE@
+GNULIB__EXIT = @GNULIB__EXIT@
+GREP = @GREP@
+HAVE_ALPHASORT = @HAVE_ALPHASORT@
+HAVE_ATOLL = @HAVE_ATOLL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
+HAVE_CHOWN = @HAVE_CHOWN@
+HAVE_CLOSEDIR = @HAVE_CLOSEDIR@
+HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@
+HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
+HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
+HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
+HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
+HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
+HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
+HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
+HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
+HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
+HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
+HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
+HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
+HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DIRENT_H = @HAVE_DIRENT_H@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_DUP2 = @HAVE_DUP2@
+HAVE_DUP3 = @HAVE_DUP3@
+HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
+HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
+HAVE_FACCESSAT = @HAVE_FACCESSAT@
+HAVE_FCHDIR = @HAVE_FCHDIR@
+HAVE_FCHMODAT = @HAVE_FCHMODAT@
+HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
+HAVE_FCNTL = @HAVE_FCNTL@
+HAVE_FDATASYNC = @HAVE_FDATASYNC@
+HAVE_FDOPENDIR = @HAVE_FDOPENDIR@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFS = @HAVE_FFS@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FSTATAT = @HAVE_FSTATAT@
+HAVE_FSYNC = @HAVE_FSYNC@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
+HAVE_FUTIMENS = @HAVE_FUTIMENS@
+HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
+HAVE_GETGROUPS = @HAVE_GETGROUPS@
+HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
+HAVE_GETLOGIN = @HAVE_GETLOGIN@
+HAVE_GETOPT_H = @HAVE_GETOPT_H@
+HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
+HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
+HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
+HAVE_GRANTPT = @HAVE_GRANTPT@
+HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
+HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
+HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
+HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
+HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
+HAVE_LCHMOD = @HAVE_LCHMOD@
+HAVE_LCHOWN = @HAVE_LCHOWN@
+HAVE_LINK = @HAVE_LINK@
+HAVE_LINKAT = @HAVE_LINKAT@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_LSTAT = @HAVE_LSTAT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MKDIRAT = @HAVE_MKDIRAT@
+HAVE_MKDTEMP = @HAVE_MKDTEMP@
+HAVE_MKFIFO = @HAVE_MKFIFO@
+HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
+HAVE_MKNOD = @HAVE_MKNOD@
+HAVE_MKNODAT = @HAVE_MKNODAT@
+HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
+HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
+HAVE_MKSTEMP = @HAVE_MKSTEMP@
+HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
+HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
+HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
+HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
+HAVE_OPENAT = @HAVE_OPENAT@
+HAVE_OPENDIR = @HAVE_OPENDIR@
+HAVE_OS_H = @HAVE_OS_H@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_PIPE = @HAVE_PIPE@
+HAVE_PIPE2 = @HAVE_PIPE2@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
+HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
+HAVE_PREAD = @HAVE_PREAD@
+HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
+HAVE_PTSNAME = @HAVE_PTSNAME@
+HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
+HAVE_PWRITE = @HAVE_PWRITE@
+HAVE_RAISE = @HAVE_RAISE@
+HAVE_RANDOM = @HAVE_RANDOM@
+HAVE_RANDOM_H = @HAVE_RANDOM_H@
+HAVE_RANDOM_R = @HAVE_RANDOM_R@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_READDIR = @HAVE_READDIR@
+HAVE_READLINK = @HAVE_READLINK@
+HAVE_READLINKAT = @HAVE_READLINKAT@
+HAVE_REALPATH = @HAVE_REALPATH@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_REWINDDIR = @HAVE_REWINDDIR@
+HAVE_RPMATCH = @HAVE_RPMATCH@
+HAVE_SCANDIR = @HAVE_SCANDIR@
+HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
+HAVE_SETENV = @HAVE_SETENV@
+HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
+HAVE_SIGACTION = @HAVE_SIGACTION@
+HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
+HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SIGSET_T = @HAVE_SIGSET_T@
+HAVE_SLEEP = @HAVE_SLEEP@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASECMP = @HAVE_STRCASECMP@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRINGS_H = @HAVE_STRINGS_H@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRPTIME = @HAVE_STRPTIME@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRTOD = @HAVE_STRTOD@
+HAVE_STRTOLL = @HAVE_STRTOLL@
+HAVE_STRTOULL = @HAVE_STRTOULL@
+HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
+HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
+HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYMLINK = @HAVE_SYMLINK@
+HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
+HAVE_SYSEXITS_H = @HAVE_SYSEXITS_H@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
+HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
+HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TIMEGM = @HAVE_TIMEGM@
+HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
+HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
+HAVE_UNISTD_H = @HAVE_UNISTD_H@
+HAVE_UNLINKAT = @HAVE_UNLINKAT@
+HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_USLEEP = @HAVE_USLEEP@
+HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
+HAVE__BOOL = @HAVE__BOOL@
+HAVE__EXIT = @HAVE__EXIT@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
+INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LIB_ACL = @LIB_ACL@
+LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@
+LIB_EACCESS = @LIB_EACCESS@
+LIB_HAS_ACL = @LIB_HAS_ACL@
+LIB_SELINUX = @LIB_SELINUX@
+LIB_SETSOCKOPT = @LIB_SETSOCKOPT@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LOCALE_FR = @LOCALE_FR@
+LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
+LOCALE_JA = @LOCALE_JA@
+LOCALE_ZH_CN = @LOCALE_ZH_CN@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
+NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
+NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
+NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@
+NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
+NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
+NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H = @NEXT_AS_FIRST_DIRECTIVE_SYSEXITS_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
+NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_DIRENT_H = @NEXT_DIRENT_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FCNTL_H = @NEXT_FCNTL_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_GETOPT_H = @NEXT_GETOPT_H@
+NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
+NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
+NEXT_LOCALE_H = @NEXT_LOCALE_H@
+NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@
+NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
+NEXT_STDARG_H = @NEXT_STDARG_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STDLIB_H = @NEXT_STDLIB_H@
+NEXT_STRINGS_H = @NEXT_STRINGS_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYSEXITS_H = @NEXT_SYSEXITS_H@
+NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
+NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_TIME_H = @NEXT_TIME_H@
+NEXT_UNISTD_H = @NEXT_UNISTD_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+POSUB = @POSUB@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PRIPTR_PREFIX = @PRIPTR_PREFIX@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+PU_RMT_PROG = @PU_RMT_PROG@
+RANLIB = @RANLIB@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CALLOC = @REPLACE_CALLOC@
+REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
+REPLACE_CHOWN = @REPLACE_CHOWN@
+REPLACE_CLOSE = @REPLACE_CLOSE@
+REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@
+REPLACE_DIRFD = @REPLACE_DIRFD@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_DUP = @REPLACE_DUP@
+REPLACE_DUP2 = @REPLACE_DUP2@
+REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
+REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FCNTL = @REPLACE_FCNTL@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FSTAT = @REPLACE_FSTAT@
+REPLACE_FSTATAT = @REPLACE_FSTATAT@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
+REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
+REPLACE_GETCWD = @REPLACE_GETCWD@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
+REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
+REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
+REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
+REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
+REPLACE_GMTIME = @REPLACE_GMTIME@
+REPLACE_ISATTY = @REPLACE_ISATTY@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LCHOWN = @REPLACE_LCHOWN@
+REPLACE_LINK = @REPLACE_LINK@
+REPLACE_LINKAT = @REPLACE_LINKAT@
+REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
+REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
+REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
+REPLACE_LSEEK = @REPLACE_LSEEK@
+REPLACE_LSTAT = @REPLACE_LSTAT@
+REPLACE_MALLOC = @REPLACE_MALLOC@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MBTOWC = @REPLACE_MBTOWC@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MKDIR = @REPLACE_MKDIR@
+REPLACE_MKFIFO = @REPLACE_MKFIFO@
+REPLACE_MKNOD = @REPLACE_MKNOD@
+REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
+REPLACE_MKTIME = @REPLACE_MKTIME@
+REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
+REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_OPEN = @REPLACE_OPEN@
+REPLACE_OPENAT = @REPLACE_OPENAT@
+REPLACE_OPENDIR = @REPLACE_OPENDIR@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PREAD = @REPLACE_PREAD@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
+REPLACE_PTSNAME = @REPLACE_PTSNAME@
+REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
+REPLACE_PUTENV = @REPLACE_PUTENV@
+REPLACE_PWRITE = @REPLACE_PWRITE@
+REPLACE_QSORT_R = @REPLACE_QSORT_R@
+REPLACE_RAISE = @REPLACE_RAISE@
+REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
+REPLACE_READ = @REPLACE_READ@
+REPLACE_READLINK = @REPLACE_READLINK@
+REPLACE_READLINKAT = @REPLACE_READLINKAT@
+REPLACE_REALLOC = @REPLACE_REALLOC@
+REPLACE_REALPATH = @REPLACE_REALPATH@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_RMDIR = @REPLACE_RMDIR@
+REPLACE_SETENV = @REPLACE_SETENV@
+REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
+REPLACE_SLEEP = @REPLACE_SLEEP@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_STAT = @REPLACE_STAT@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOD = @REPLACE_STRTOD@
+REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
+REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
+REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
+REPLACE_SYMLINK = @REPLACE_SYMLINK@
+REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
+REPLACE_TIMEGM = @REPLACE_TIMEGM@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
+REPLACE_UNLINK = @REPLACE_UNLINK@
+REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
+REPLACE_UNSETENV = @REPLACE_UNSETENV@
+REPLACE_USLEEP = @REPLACE_USLEEP@
+REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCTOMB = @REPLACE_WCTOMB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+REPLACE_WRITE = @REPLACE_WRITE@
+RSH = @RSH@
+SED = @SED@
+SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDALIGN_H = @STDALIGN_H@
+STDARG_H = @STDARG_H@
+STDBOOL_H = @STDBOOL_H@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+SYSEXITS_H = @SYSEXITS_H@
+SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
+TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
+UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
+UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
+UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
+UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
+USE_ACL = @USE_ACL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WARN_CFLAGS = @WARN_CFLAGS@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WERROR_CFLAGS = @WERROR_CFLAGS@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+lispdir = @lispdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+info_TEXINFOS = tar.texi
+tar_TEXINFOS = \
+ dumpdir.texi\
+ tar-snapshot-edit.texi\
+ fdl.texi\
+ freemanuals.texi\
+ genfile.texi\
+ header.texi\
+ intern.texi\
+ parse-datetime.texi\
+ rendition.texi\
+ snapshot.texi\
+ sparse.texi\
+ value.texi
+
+dist_man_MANS = tar.1 $(RMT_8)
+@PU_RMT_COND_TRUE@RMT_8 = rmt.8
+EXTRA_DIST = gendocs_template mastermenu.el texify.sed untabify.el rmt.8
+
+# The rendering level is anyone of PUBLISH, DISTRIB or PROOF.
+# Just call 'make RENDITION=PROOF [target]' if you want PROOF rendition.
+RENDITION = DISTRIB
+MAKEINFOFLAGS = -D$(RENDITION)
+GENDOCS = gendocs.sh
+TEXI2DVI = texi2dvi -t '@set $(RENDITION)' -E
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnits doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+.texi.info:
+ $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && $(am__cd) $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ $(am__cd) $(srcdir); \
+ else \
+ rc=$$?; \
+ $(am__cd) $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.pdf:
+ $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
+ $<
+
+.texi.html:
+ $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
+ $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@ && mv $(@:.html=.htp) $@; \
+ else \
+ rm -rf $(@:.html=.htp); exit 1; \
+ fi
+$(srcdir)/tar.info: tar.texi $(srcdir)/version.texi $(tar_TEXINFOS)
+tar.dvi: tar.texi $(srcdir)/version.texi $(tar_TEXINFOS)
+tar.pdf: tar.texi $(srcdir)/version.texi $(tar_TEXINFOS)
+tar.html: tar.texi $(srcdir)/version.texi $(tar_TEXINFOS)
+$(srcdir)/version.texi: $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: tar.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./tar.texi || dir=$(srcdir); \
+ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/tar.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version.texi \
+ || (echo "Updating $(srcdir)/version.texi"; \
+ cp vti.tmp $(srcdir)/version.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
+.dvi.ps:
+ $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) $(AM_V_texinfo) -o $@ $<
+
+uninstall-dvi-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
+ rm -f "$(DESTDIR)$(dvidir)/$$f"; \
+ done
+
+uninstall-html-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
+ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
+ done
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+uninstall-pdf-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
+ done
+
+uninstall-ps-am:
+ @$(NORMAL_UNINSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ for p in $$list; do \
+ $(am__strip_dir) \
+ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
+ rm -f "$(DESTDIR)$(psdir)/$$f"; \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
+ if test -f $$file; then \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f "$(distdir)/$$relfile" || \
+ cp -p $$file "$(distdir)/$$relfile"; \
+ else :; fi; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf tar.t2d tar.t2p
+
+clean-aminfo:
+ -test -z "tar.dvi tar.pdf tar.ps tar.html" \
+ || rm -rf tar.dvi tar.pdf tar.ps tar.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man1dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.1[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man1dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.1[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man8: $(dist_man_MANS)
+ @$(NORMAL_INSTALL)
+ @list1=''; \
+ list2='$(dist_man_MANS)'; \
+ test -n "$(man8dir)" \
+ && test -n "`echo $$list1$$list2`" \
+ || exit 0; \
+ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
+ { for i in $$list1; do echo "$$i"; done; \
+ if test -n "$$list2"; then \
+ for i in $$list2; do echo "$$i"; done \
+ | sed -n '/\.8[a-z]*$$/p'; \
+ fi; \
+ } | while read p; do \
+ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; echo "$$p"; \
+ done | \
+ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+ sed 'N;N;s,\n, ,g' | { \
+ list=; while read file base inst; do \
+ if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
+ fi; \
+ done; \
+ for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+ while read files; do \
+ test -z "$$files" || { \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
+ done; }
+
+uninstall-man8:
+ @$(NORMAL_UNINSTALL)
+ @list=''; test -n "$(man8dir)" || exit 0; \
+ files=`{ for i in $$list; do echo "$$i"; done; \
+ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+ sed -n '/\.8[a-z]*$$/p'; \
+ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
+ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \
+ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-aminfo clean-generic clean-local mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am: $(DVIS)
+ @$(NORMAL_INSTALL)
+ @list='$(DVIS)'; test -n "$(dvidir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
+ done
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am: $(HTMLS)
+ @$(NORMAL_INSTALL)
+ @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ $(am__strip_dir) \
+ d2=$$d$$p; \
+ if test -d "$$d2"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
+ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
+ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
+ else \
+ list2="$$list2 $$d2"; \
+ fi; \
+ done; \
+ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
+ done; }
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
+ fi; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ echo "$$ifile"; \
+ else : ; fi; \
+ done; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
+ @$(POST_INSTALL)
+ @if $(am__can_run_installinfo); then \
+ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1 install-man8
+
+install-pdf: install-pdf-am
+
+install-pdf-am: $(PDFS)
+ @$(NORMAL_INSTALL)
+ @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
+install-ps: install-ps-am
+
+install-ps-am: $(PSS)
+ @$(NORMAL_INSTALL)
+ @list='$(PSS)'; test -n "$(psdir)" || list=; \
+ if test -n "$$list"; then \
+ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
+ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
+ fi; \
+ for p in $$list; do \
+ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+ echo "$$d$$p"; \
+ done | $(am__base_list) | \
+ while read files; do \
+ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
+ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
+
+pdf: pdf-am
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
+ uninstall-man uninstall-pdf-am uninstall-ps-am
+
+uninstall-man: uninstall-man1 uninstall-man8
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
+ clean-local cscopelist-am ctags-am dist-info distclean \
+ distclean-generic distdir dvi dvi-am html html-am info info-am \
+ install install-am install-data install-data-am install-dvi \
+ install-dvi-am install-exec install-exec-am install-html \
+ install-html-am install-info install-info-am install-man \
+ install-man1 install-man8 install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
+ tags-am uninstall uninstall-am uninstall-dvi-am \
+ uninstall-html-am uninstall-info-am uninstall-man \
+ uninstall-man1 uninstall-man8 uninstall-pdf-am uninstall-ps-am
+
+
+header.texi: $(top_srcdir)/src/tar.h
+ sed -f $(srcdir)/texify.sed $(top_srcdir)/src/tar.h \
+ | expand >$@
+
+master-menu: $(tar_TEXINFOS)
+ emacs -batch -l mastermenu.el -f make-master-menu $(info_TEXINFOS)
+
+untabify:
+ emacs -batch -l untabify.el $(info_TEXINFOS) $(tar_TEXINFOS)
+
+final: untabify master-menu
+
+# Checking
+check-format:
+ @if test -n "`cat $(info_TEXINFOS) $(tar_TEXINFOS) | tr -d -c '\t'`"; then \
+ echo "Sources contain tabs; run make untabify"; \
+ false; \
+ fi
+
+check-options:
+ @ARGP_HELP_FMT='usage-indent=0,short-opt-col=0,long-opt-col=0,doc-opt-col=0,opt-doc-col=0,header-col=0,rmargin=1' \
+ $(top_builddir)/src/tar --usage | \
+ sed -n 's/^\[--\([^]\=\[]*\).*/\1/p' | sort | uniq > opts.$$$$;\
+ $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) -E - \
+ $(info_TEXINFOS) | \
+ sed -n '/^@macro/,/^@end macro/d;s/@opindex *\([^@,]*\).*/\1/p' \
+ | sort | uniq > docs.$$$$;\
+ status=0;\
+ join -v1 opts.$$$$ docs.$$$$ > report.$$$$;\
+ if test -s report.$$$$; then \
+ echo 'Not documented options:'; \
+ cat report.$$$$; \
+ status=1; \
+ fi; \
+ join -v2 opts.$$$$ docs.$$$$ > report.$$$$;\
+ if test -s report.$$$$; then \
+ echo 'Non-existing options:';\
+ cat report.$$$$; \
+ status=1; \
+ fi; \
+ rm opts.$$$$ docs.$$$$ report.$$$$;\
+ test $$status -ne 0 && exit $$status
+
+check-refs:
+ @for file in $(info_TEXINFOS) $(tar_TEXINFOS); \
+ do \
+ sed -e = $$file | \
+ sed -n 'N;/@FIXME-.*ref/{s/\(^[0-9][0-9]*\).*@FIXME-.*ref{\([^}]*\).*/'$$file':\1: \2/gp}'; \
+ done > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unresolved cross-references:"; \
+ cat $@-t;\
+ rm $@-t; \
+ else \
+ rm -f $@-t; \
+ fi
+
+check-fixmes:
+ @for file in $(info_TEXINFOS); \
+ do \
+ sed -e = $$file | \
+ sed -n 'N;/@FIXME{/{s/\(^[0-9][0-9]*\).*@FIXME{\([^}]*\).*/'$$file':\1: \2/gp}'; \
+ done > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unresolved FIXMEs:"; \
+ cat $@-t; \
+ rm $@-t; \
+ false; \
+ else \
+ rm -f $@-t; \
+ fi
+
+check-unrevised:
+ @grep -Hn @UNREVISED $(info_TEXINFOS) > $@-t; \
+ if [ -s $@-t ]; then \
+ echo "Unrevised nodes:"; \
+ cat $@-t; \
+ rm $@-t; \
+ false;\
+ else \
+ rm $@-t; \
+ fi
+
+all-check-docs: check-format check-options check-refs check-fixmes check-unrevised
+
+check-docs:
+ $(MAKE) -k all-check-docs
+
+#
+
+clean-local:
+ rm -rf manual
+
+# Make sure you set TEXINPUTS
+# Usual value is:
+# /usr/share/texmf/pdftex/plain/misc:/usr/share/texmf/pdftex/config
+manual:
+ TEXINPUTS=$(srcdir):$(top_srcdir)/build-tex:$(TEXINPUTS) \
+ MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS)" \
+ TEXI2DVI="$(TEXI2DVI) -t @finalout" \
+ $(GENDOCS) --texi2html tar 'GNU tar manual'
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/dumpdir.texi b/doc/dumpdir.texi
new file mode 100644
index 0000000..9ded73d
--- /dev/null
+++ b/doc/dumpdir.texi
@@ -0,0 +1,132 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2006-2007, 2014, 2016 Free Software Foundation, Inc.
+@c Written by Sergey Poznyakoff
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+ Incremental archives keep information about contents of each
+dumped directory in special data blocks called @dfn{dumpdirs}.
+
+ Dumpdir is a sequence of entries of the following form:
+
+@smallexample
+@var{C} @var{filename} \0
+@end smallexample
+
+@noindent
+where @var{C} is one of the @dfn{control codes} described below,
+@var{filename} is the name of the file @var{C} operates upon, and
+@samp{\0} represents a nul character (ASCII 0). The white space
+characters were added for readability, real dumpdirs do not contain
+them.
+
+ Each dumpdir ends with a single nul character.
+
+ The following table describes control codes and their meanings:
+
+@table @samp
+@item Y
+@var{filename} is contained in the archive.
+
+@item N
+@var{filename} was present in the directory at the time the archive
+was made, yet it was not dumped to the archive, because it had not
+changed since the last backup.
+
+@item D
+@var{filename} is a directory.
+
+@item R
+This code requests renaming of the @var{filename} to the name
+specified with the @samp{T} command, that immediately follows it.
+
+@item T
+Specify target file name for @samp{R} command (see below).
+
+@item X
+Specify @dfn{temporary directory} name for a rename operation (see below).
+@end table
+
+ Codes @samp{Y}, @samp{N} and @samp{D} require @var{filename} argument
+to be a relative file name to the directory this dumpdir describes,
+whereas codes @samp{R}, @samp{T} and @samp{X} require their argument
+to be an absolute file name.
+
+ The three codes @samp{R}, @samp{T} and @samp{X} specify a
+@dfn{renaming operation}. In the simplest case it is:
+
+@smallexample
+R@file{source}\0T@file{dest}\0
+@end smallexample
+
+@noindent
+which means ``rename file @file{source} to file @file{dest}''.
+
+ However, there are cases that require using a @dfn{temporary
+directory}. For example, consider the following scenario:
+
+@enumerate 1
+@item
+Previous run dumped a directory @file{foo} which contained the
+following three directories:
+
+@smallexample
+a
+b
+c
+@end smallexample
+
+@item
+They were renamed @emph{cyclically}, so that:
+
+@example
+@file{a} became @file{b}
+@file{b} became @file{c}
+@file{c} became @file{a}
+@end example
+
+@item
+New incremental dump was made.
+@end enumerate
+
+ This case cannot be handled by three successive renames, since
+renaming @file{a} to @file{b} will destroy the existing directory.
+To correctly process it, @GNUTAR{} needs a temporary directory, so
+it creates the following dumpdir (newlines have been added for
+readability):
+
+@smallexample
+@group
+Xfoo\0
+Rfoo/a\0T\0
+Rfoo/b\0Tfoo/c\0
+Rfoo/c\0Tfoo/a\0
+R\0Tfoo/a\0
+@end group
+@end smallexample
+
+ The first command, @samp{Xfoo\0}, instructs the extractor to create a
+temporary directory in the directory @file{foo}. Second command,
+@samp{Rfoo/aT\0}, says ``rename file @file{foo/a} to the temporary
+directory that has just been created'' (empty file name after a
+command means use temporary directory). Third and fourth commands
+work as usual, and, finally, the last command, @samp{R\0Tfoo/a\0}
+tells tar to rename the temporary directory to @file{foo/a}.
+
+ The exact placement of a dumpdir in the archive depends on the
+archive format (@pxref{Formats}):
+
+@itemize
+@item PAX archives
+
+In PAX archives, dumpdir is stored in the extended header of the
+corresponding directory, in variable @code{GNU.dumpdir}.
+
+@item GNU and old GNU archives
+
+These formats implement special header type @samp{D}, which is similar
+to ustar header @samp{5} (directory), except that it precedes a data
+block containing the dumpdir.
+@end itemize
+
+@c End of dumpdir.texi
diff --git a/doc/fdl.texi b/doc/fdl.texi
new file mode 100644
index 0000000..1246eb2
--- /dev/null
+++ b/doc/fdl.texi
@@ -0,0 +1,507 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000-2002, 2007-2008, 2014, 2016 Free Software
+Foundation, Inc.
+@uref{http://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification. Examples
+of transparent image formats include PNG, XCF and
+JPG. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/doc/freemanuals.texi b/doc/freemanuals.texi
new file mode 100644
index 0000000..25343f9
--- /dev/null
+++ b/doc/freemanuals.texi
@@ -0,0 +1,89 @@
+@cindex free documentation
+
+The biggest deficiency in the free software community today is not in
+the software---it is the lack of good free documentation that we can
+include with the free software. Many of our most important
+programs do not come with free reference manuals and free introductory
+texts. Documentation is an essential part of any software package;
+when an important free software package does not come with a free
+manual and a free tutorial, that is a major gap. We have many such
+gaps today.
+
+Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms---no
+copying, no modification, source files not available---which exclude
+them from the free software world.
+
+That wasn't the first time this sort of thing happened, and it was far
+from the last. Many times we have heard a GNU user eagerly describe a
+manual that he is writing, his intended contribution to the community,
+only to learn that he had ruined everything by signing a publication
+contract to make it non-free.
+
+Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies---that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The
+problem is the restrictions on the use of the manual. Free manuals
+are available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too---so they can
+provide accurate and clear documentation for the modified program. A
+manual that leaves you no choice but to write a new manual to document
+a changed version of the program is not really available to our
+community.
+
+Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok. It is also no problem to require modified versions
+to include notice that they were modified. Even entire sections that
+may not be deleted or changed are acceptable, as long as they deal
+with nontechnical topics (like this one). These kinds of restrictions
+are acceptable because they don't obstruct the community's normal use
+of the manual.
+
+However, it must be possible to modify all the @emph{technical}
+content of the manual, and then distribute the result in all the usual
+media, through all the usual channels. Otherwise, the restrictions
+obstruct the use of the manual, it is not free, and we need another
+manual to replace it.
+
+Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+If you are writing documentation, please insist on publishing it under
+the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval---you
+don't have to let the publisher decide. Some commercial publishers
+will use a free license if you insist, but they will not propose the
+option; it is up to you to raise the issue and say firmly that this is
+what you want. If the publisher you are dealing with refuses, please
+try other publishers. If you're not sure whether a proposed license
+is free, write to @email{licensing@@gnu.org}.
+
+You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying
+copies from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation
+at all. Check the distribution terms of a manual before you buy it,
+and insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try reward the publishers that have
+paid or pay the authors to work on it.
+
+The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+@url{http://www.fsf.org/doc/other-free-books.html}.
diff --git a/doc/gendocs_template b/doc/gendocs_template
new file mode 100755
index 0000000..d67f898
--- /dev/null
+++ b/doc/gendocs_template
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- $Id: gendocs_template,v 1.5 2007/10/30 14:58:52 gray Exp $ -->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+
+<head>
+<title>%%TITLE%% - GNU Project - Free Software Foundation (FSF)</title>
+<meta http-equiv="content-type" content='text/html; charset=utf-8' />
+<link rel="stylesheet" type="text/css" href="/gnu.css" />
+<link rev="made" href="mailto:gray@gnu.org" />
+ <link rel="icon" type="image/png" href="/graphics/gnu-head-icon.png" />
+</head>
+
+<!-- This document is in XML, and xhtml 1.0 -->
+<!-- Please make sure to properly nest your tags -->
+<!-- and ensure that your final document validates -->
+<!-- consistent with W3C xhtml 1.0 and CSS standards -->
+<!-- See validator.w3.org -->
+
+<body>
+
+<h3>%%TITLE%%</h3>
+
+<address>Free Software Foundation</address>
+<address>last updated %%DATE%%</address>
+<p>
+<a href="/graphics/gnu-head.jpg">
+ <img src="/graphics/gnu-head-sm.jpg"
+ alt=" [image of the head of a GNU] "
+ width="129" height="122" />
+</a>
+</p>
+<hr />
+
+<p>The manual for %%PACKAGE%% is available in the following formats:</p>
+
+<ul>
+ <li><a href="%%PACKAGE%%.html">HTML
+ (%%HTML_MONO_SIZE%%K bytes)</a> - entirely on one web page.</li>
+ <li><a href="html_node/index.html">HTML</a> - with one web page per
+ node.</li>
+%%IF HTML_SECTION%%
+ <li><a href="html_section/index.html">HTML</a> - with one web page per
+ section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+ <li><a href="html_chapter/index.html">HTML</a> - with one web page per
+ chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+ <li><a href="%%PACKAGE%%.html.gz">HTML compressed
+ (%%HTML_MONO_GZ_SIZE%%K gzipped characters)</a> - entirely on
+ one web page.</li>
+ <li><a href="%%PACKAGE%%.html_node.tar.gz">HTML compressed
+ (%%HTML_NODE_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per node.</li>
+%%IF HTML_SECTION%%
+ <li><a href="%%PACKAGE%%.html_section.tar.gz">HTML compressed
+ (%%HTML_SECTION_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per section.</li>
+%%ENDIF HTML_SECTION%%
+%%IF HTML_CHAPTER%%
+ <li><a href="%%PACKAGE%%.html_chapter.tar.gz">HTML compressed
+ (%%HTML_CHAPTER_TGZ_SIZE%%K gzipped tar file)</a> -
+ with one web page per chapter.</li>
+%%ENDIF HTML_CHAPTER%%
+ <li><a href="%%PACKAGE%%.info.tar.gz">Info document
+ (%%INFO_TGZ_SIZE%%K characters gzipped tar file)</a>.</li>
+ <li><a href="%%PACKAGE%%.txt">ASCII text
+ (%%ASCII_SIZE%%K characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.txt.gz">ASCII text compressed
+ (%%ASCII_GZ_SIZE%%K gzipped characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.dvi.gz">TeX dvi file
+ (%%DVI_GZ_SIZE%%K characters gzipped)</a>.</li>
+ <li><a href="%%PACKAGE%%.ps.gz">PostScript file
+ (%%PS_GZ_SIZE%%K characters gzipped)</a>.</li>
+ <li><a href="%%PACKAGE%%.pdf">PDF file
+ (%%PDF_SIZE%%K characters)</a>.</li>
+ <li><a href="%%PACKAGE%%.texi.tar.gz">Texinfo source
+ (%%TEXI_TGZ_SIZE%%K characters gzipped tar file)</a></li>
+</ul>
+
+<p>(This page generated by the <a
+href="%%SCRIPTURL%%">%%SCRIPTNAME%%</a> script.)
+</p>
+
+<p>
+<a href="http://validator.w3.org/check?uri=referer"><img
+ src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0!" height="31" width="88" /></a>
+</p>
+
+<div class="copyright">
+<p>
+Return to the <a href="/home.html">GNU Project home page</a>.
+</p>
+
+<p>
+Please send FSF &amp; GNU inquiries to
+<a href="mailto:gnu@gnu.org"><em>gnu@gnu.org</em></a>.
+There are also <a href="/home.html#ContactInfo">other ways to contact</a>
+the FSF.
+<br />
+Please send broken links and other corrections (or suggestions) to
+<a href="mailto:webmasters@gnu.org"><em>webmasters@gnu.org</em></a>.
+</p>
+
+<p>
+Copyright 2004, 2013-2014, 2016 Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02111, USA
+<br />
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+<p>
+Updated:
+<!-- timestamp start -->
+$Date: 2007/10/30 14:58:52 $ $Author: gray $
+<!-- timestamp end -->
+</p>
+</div>
+
+</body>
+</html>
diff --git a/doc/genfile.texi b/doc/genfile.texi
new file mode 100644
index 0000000..e35f34b
--- /dev/null
+++ b/doc/genfile.texi
@@ -0,0 +1,367 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+@c Written by Sergey Poznyakoff
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+@cindex genfile
+ This appendix describes @command{genfile}, an auxiliary program
+used in the GNU tar testsuite. If you are not interested in developing
+GNU tar, skip this appendix.
+
+ Initially, @command{genfile} was used to generate data files for
+the testsuite, hence its name. However, new operation modes were being
+implemented as the testsuite grew more sophisticated, and now
+@command{genfile} is a multi-purpose instrument.
+
+ There are three basic operation modes:
+
+@table @asis
+@item File Generation
+ This is the default mode. In this mode, @command{genfile}
+generates data files.
+
+@item File Status
+ In this mode @command{genfile} displays status of specified files.
+
+@item Synchronous Execution.
+ In this mode @command{genfile} executes the given program with
+@option{--checkpoint} option and executes a set of actions when
+specified checkpoints are reached.
+@end table
+
+@menu
+* Generate Mode:: File Generation Mode.
+* Status Mode:: File Status Mode.
+* Exec Mode:: Synchronous Execution mode.
+@end menu
+
+@node Generate Mode
+@appendixsec Generate Mode
+
+@cindex Generate Mode, @command{genfile}
+@cindex @command{genfile}, generate mode
+@cindex @command{genfile}, create file
+ In this mode @command{genfile} creates a data file for the test
+suite. The size of the file is given with the @option{--length}
+(@option{-l}) option. By default the file contents is written to the
+standard output, this can be changed using @option{--file}
+(@option{-f}) command line option. Thus, the following two commands
+are equivalent:
+
+@smallexample
+@group
+genfile --length 100 > outfile
+genfile --length 100 --file outfile
+@end group
+@end smallexample
+
+ If @option{--length} is not given, @command{genfile} will
+generate an empty (zero-length) file.
+
+@cindex @command{genfile}, seeking to a given offset
+ The command line option @option{--seek=@var{N}} istructs @command{genfile}
+to skip the given number of bytes (@var{N}) in the output file before
+writing to it. It is similar to the @option{seek=@var{N}} of the
+@command{dd} utility.
+
+@cindex @command{genfile}, reading a list of file names
+ You can instruct @command{genfile} to create several files at one
+go, by giving it @option{--files-from} (@option{-T}) option followed
+by a name of file containing a list of file names. Using dash
+(@samp{-}) instead of the file name causes @command{genfile} to read
+file list from the standard input. For example:
+
+@smallexample
+@group
+# Read file names from file @file{file.list}
+genfile --files-from file.list
+# Read file names from standard input
+genfile --files-from -
+@end group
+@end smallexample
+
+@cindex File lists separated by NUL characters
+ The list file is supposed to contain one file name per line. To
+use file lists separated by ASCII NUL character, use @option{--null}
+(@option{-0}) command line option:
+
+@smallexample
+genfile --null --files-from file.list
+@end smallexample
+
+@cindex pattern, @command{genfile}
+ The default data pattern for filling the generated file consists
+of first 256 letters of ASCII code, repeated enough times to fill the
+entire file. This behavior can be changed with @option{--pattern}
+option. This option takes a mandatory argument, specifying pattern
+name to use. Currently two patterns are implemented:
+
+@table @option
+@item --pattern=default
+ The default pattern as described above.
+
+@item --pattern=zero
+ Fills the file with zeroes.
+@end table
+
+ If no file name was given, the program exits with the code
+@code{0}. Otherwise, it exits with @code{0} only if it was able to
+create a file of the specified length.
+
+@cindex Sparse files, creating using @command{genfile}
+@cindex @command{genfile}, creating sparse files
+ Special option @option{--sparse} (@option{-s}) instructs
+@command{genfile} to create a sparse file. Sparse files consist of
+@dfn{data fragments}, separated by @dfn{holes} or blocks of zeros. On
+many operating systems, actual disk storage is not allocated for
+holes, but they are counted in the length of the file. To create a
+sparse file, @command{genfile} should know where to put data fragments,
+and what data to use to fill them. So, when @option{--sparse} is given
+the rest of the command line specifies a so-called @dfn{file map}.
+
+ The file map consists of any number of @dfn{fragment
+descriptors}. Each descriptor is composed of two values: a number,
+specifying fragment offset from the end of the previous fragment or,
+for the very first fragment, from the beginning of the file, and
+@dfn{contents string}, that specifies the pattern to fill the fragment
+with. File offset can be suffixed with the following quantifiers:
+
+@table @samp
+@item k
+@itemx K
+The number is expressed in kilobytes.
+@item m
+@itemx M
+The number is expressed in megabytes.
+@item g
+@itemx G
+The number is expressed in gigabytes.
+@end table
+
+ Contents string can be either a fragment size or a pattern.
+Fragment size is a decimal number, prefixed with an equals sign. It
+can be suffixed with a quantifier, as discussed above. If fragment
+size is given, the fragment of that size will be filled with the
+currently selected pattern (@pxref{Generate Mode, --pattern}) and
+written to the file.
+
+ A pattern is a string of arbitrary ASCII characters. For each
+of them, @command{genfile} will generate a @dfn{block} of data,
+filled with that character and will write it to the fragment. The size
+of block is given by @option{--block-size} option. It defaults to 512.
+Thus, if pattern consists of @var{n} characters, the resulting file
+fragment will contain @code{@var{n}*@var{block-size}} bytes of data.
+
+ The last fragment descriptor can have only file offset part. In this
+case @command{genfile} will create a hole at the end of the file up to
+the given offset.
+
+ A dash appearing as a fragment descriptor instructs
+@command{genfile} to read file map from the standard input. Each line
+of input should consist of fragment offset and contents string,
+separated by any amount of whitespace.
+
+ For example, consider the following invocation:
+
+@smallexample
+genfile --sparse --file sparsefile 0 ABCD 1M EFGHI 2000K
+@end smallexample
+
+@noindent
+It will create 3101184-bytes long file of the following structure:
+
+@multitable @columnfractions .35 .20 .45
+@item Offset @tab Length @tab Contents
+@item 0 @tab 4*512=2048 @tab Four 512-byte blocks, filled with
+letters @samp{A}, @samp{B}, @samp{C} and @samp{D}.
+@item 2048 @tab 1046528 @tab Zero bytes
+@item 1050624 @tab 5*512=2560 @tab Five blocks, filled with letters
+@samp{E}, @samp{F}, @samp{G}, @samp{H}, @samp{I}.
+@item 1053184 @tab 2048000 @tab Zero bytes
+@end multitable
+
+@cindex --quite, option
+ The exit code of @command{genfile --sparse} command is @code{0}
+only if created file is actually sparse. If it is not, the
+appropriate error message is displayed and the command exists with
+code @code{1}. The @option{--quite} (@option{-q}) option suppresses
+this behavior. If @option{--quite} is given, @command{genfile
+--sparse} exits with code @code{0} if it was able to create the file,
+whether the resulting file is sparse or not.
+
+@node Status Mode
+@appendixsec Status Mode
+
+ In status mode, @command{genfile} prints file system status for
+each file specified in the command line. This mode is toggled by
+@option{--stat} (@option{-S}) command line option. An optional argument to this
+option specifies output @dfn{format}: a comma-separated list of
+@code{struct stat} fields to be displayed. This list can contain
+following identifiers:
+
+@table @asis
+@item name
+ The file name.
+
+@item dev
+@itemx st_dev
+ Device number in decimal.
+
+@item ino
+@itemx st_ino
+ Inode number.
+
+@item mode[.@var{number}]
+@itemx st_mode[.@var{number}]
+
+@FIXME{Should we also support @samp{%} notations as in stat(1)?}
+
+ File mode in octal. Optional @var{number} specifies octal mask to
+be applied to the mode before outputting. For example, @code{--stat
+mode.777} will preserve lower nine bits of it. Notice, that you can
+use any punctuation character in place of @samp{.}.
+
+@item nlink
+@itemx st_nlink
+ Number of hard links.
+
+@item uid
+@itemx st_uid
+ User ID of owner.
+
+@item gid
+@itemx st_gid
+ Group ID of owner.
+
+@item size
+@itemx st_size
+ File size in decimal.
+
+@item blksize
+@itemx st_blksize
+ The size in bytes of each file block.
+
+@item blocks
+@itemx st_blocks
+ Number of blocks allocated.
+
+@item atime
+@itemx st_atime
+ Time of last access.
+
+@item mtime
+@itemx st_mtime
+ Time of last modification
+
+@item ctime
+@itemx st_ctime
+ Time of last status change
+
+@item sparse
+ A boolean value indicating whether the file is @samp{sparse}.
+@end table
+
+ Modification times are displayed in @acronym{UTC} as
+@acronym{UNIX} timestamps, unless suffixed with @samp{H} (for
+``human-readable''), as in @samp{ctimeH}, in which case usual
+@code{tar tv} output format is used.
+
+ The default output format is: @samp{name,dev,ino,mode,
+nlink,uid,gid,size,blksize,blocks,atime,mtime,ctime}.
+
+ For example, the following command will display file names and
+corresponding times of last access for each file in the current working
+directory:
+
+@smallexample
+genfile --stat=name,atime *
+@end smallexample
+
+@node Exec Mode
+@appendixsec Exec Mode
+
+@cindex Exec Mode, @command{genfile}
+ This mode is designed for testing the behavior of @code{paxutils}
+commands when some of the files change during archiving. It is an
+experimental mode.
+
+ The @samp{Exec Mode} is toggled by @option{--run} command line
+option (or its alias @option{-r}). The non-optional arguments to
+@command{getopt} give the command line to be executed. Normally,
+it should contain at least the @option{--checkpoint} option.
+
+ A set of options is provided for defining checkpoint values and
+actions to be executed upon reaching them. Checkpoint values are
+introduced with the @option{--checkpoint} command line
+option. Argument to this option is the number of checkpoint in decimal.
+
+ Any number of @dfn{actions} may be specified after a
+checkpoint. Available actions are
+
+@table @option
+@item --cut @var{file}
+@itemx --truncate @var{file}
+ Truncate @var{file} to the size specified by previous
+@option{--length} option (or 0, if it is not given).
+
+@item --append @var{file}
+ Append data to @var{file}. The size of data and its pattern are
+given by previous @option{--length} and @option{pattern} options.
+
+@item --touch @var{file}
+ Update the access and modification times of @var{file}. These
+timestamps are changed to the current time, unless @option{--date}
+option was given, in which case they are changed to the specified
+time. Argument to @option{--date} option is a date specification in
+an almost arbitrary format (@pxref{Date input formats}).
+
+@item --exec @var{command}
+ Execute given shell command.
+
+@item --unlink @var{file}
+ Unlink the @var{file}.
+@end table
+
+ Option @option{--verbose} instructs @command{genfile} to print on
+standard output notifications about checkpoints being executed and to
+verbosely describe exit status of the command.
+
+ While the command is being executed its standard output remains
+connected to descriptor 1. All messages it prints to file descriptor
+2, except checkpoint notifications, are forwarded to standard
+error.
+
+ @command{Genfile} exits with the exit status of the executed command.
+
+ For compatibility with previous @command{genfile} versions, the
+@option{--run} option takes an optional argument. If used this way,
+its argument supplies the command line to be executed. There should
+be no non-optional arguments in the @command{genfile} command line.
+
+ The actual command line is constructed by inserting
+the @option{--checkpoint} option between the command name and its
+first argument (if any). Due to this, the argument to @option{--run}
+may not use traditional @command{tar} option syntax, i.e., the
+following is wrong:
+
+@smallexample
+# Wrong!
+genfile --run='tar cf foo bar'
+@end smallexample
+
+@noindent
+
+Use the following syntax instead:
+
+@smallexample
+genfile --run='tar -cf foo bar' @var{actions}...
+@end smallexample
+
+The above command line is equivalent to
+
+@smallexample
+genfile @var{actions}... -- tar -cf foo bar
+@end smallexample
+
+Notice, that the use of compatibility mode is deprecated.
diff --git a/doc/header.texi b/doc/header.texi
new file mode 100644
index 0000000..b35b6d4
--- /dev/null
+++ b/doc/header.texi
@@ -0,0 +1,243 @@
+@comment GNU tar Archive Format description.
+@comment
+@comment Copyright 1988-1989, 1991-1997, 2000-2001, 2003-2007, 2012-2014, 2016
+@comment Free Software Foundation, Inc.
+@comment
+@comment This file is part of GNU tar.
+@comment
+@comment GNU tar is free software; you can redistribute it and/or modify
+@comment it under the terms of the GNU General Public License as published by
+@comment the Free Software Foundation; either version 3 of the License, or
+@comment (at your option) any later version.
+@comment
+@comment GNU tar is distributed in the hope that it will be useful,
+@comment but WITHOUT ANY WARRANTY; without even the implied warranty of
+@comment MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+@comment GNU General Public License for more details.
+@comment
+@comment You should have received a copy of the GNU General Public License
+@comment along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+/*@r{ tar Header Block, from POSIX 1003.1-1990. }*/
+
+/*@r{ POSIX header. }*/
+
+struct posix_header
+@{ /*@r{ byte offset }*/
+ char name[100]; /*@r{ 0 }*/
+ char mode[8]; /*@r{ 100 }*/
+ char uid[8]; /*@r{ 108 }*/
+ char gid[8]; /*@r{ 116 }*/
+ char size[12]; /*@r{ 124 }*/
+ char mtime[12]; /*@r{ 136 }*/
+ char chksum[8]; /*@r{ 148 }*/
+ char typeflag; /*@r{ 156 }*/
+ char linkname[100]; /*@r{ 157 }*/
+ char magic[6]; /*@r{ 257 }*/
+ char version[2]; /*@r{ 263 }*/
+ char uname[32]; /*@r{ 265 }*/
+ char gname[32]; /*@r{ 297 }*/
+ char devmajor[8]; /*@r{ 329 }*/
+ char devminor[8]; /*@r{ 337 }*/
+ char prefix[155]; /*@r{ 345 }*/
+ /*@r{ 500 }*/
+@};
+
+#define TMAGIC "ustar" /*@r{ ustar and a null }*/
+#define TMAGLEN 6
+#define TVERSION "00" /*@r{ 00 and no null }*/
+#define TVERSLEN 2
+
+/*@r{ Values used in typeflag field. }*/
+#define REGTYPE '0' /*@r{ regular file }*/
+#define AREGTYPE '\0' /*@r{ regular file }*/
+#define LNKTYPE '1' /*@r{ link }*/
+#define SYMTYPE '2' /*@r{ reserved }*/
+#define CHRTYPE '3' /*@r{ character special }*/
+#define BLKTYPE '4' /*@r{ block special }*/
+#define DIRTYPE '5' /*@r{ directory }*/
+#define FIFOTYPE '6' /*@r{ FIFO special }*/
+#define CONTTYPE '7' /*@r{ reserved }*/
+
+#define XHDTYPE 'x' /*@r{ Extended header referring to the
+ next file in the archive }*/
+#define XGLTYPE 'g' /*@r{ Global extended header }*/
+
+/*@r{ Bits used in the mode field, values in octal. }*/
+#define TSUID 04000 /*@r{ set UID on execution }*/
+#define TSGID 02000 /*@r{ set GID on execution }*/
+#define TSVTX 01000 /*@r{ reserved }*/
+ /*@r{ file permissions }*/
+#define TUREAD 00400 /*@r{ read by owner }*/
+#define TUWRITE 00200 /*@r{ write by owner }*/
+#define TUEXEC 00100 /*@r{ execute/search by owner }*/
+#define TGREAD 00040 /*@r{ read by group }*/
+#define TGWRITE 00020 /*@r{ write by group }*/
+#define TGEXEC 00010 /*@r{ execute/search by group }*/
+#define TOREAD 00004 /*@r{ read by other }*/
+#define TOWRITE 00002 /*@r{ write by other }*/
+#define TOEXEC 00001 /*@r{ execute/search by other }*/
+
+/*@r{ tar Header Block, GNU extensions. }*/
+
+/*@r{ In GNU tar, SYMTYPE is for to symbolic links, and CONTTYPE is for
+ contiguous files, so maybe disobeying the "reserved" comment in POSIX
+ header description. I suspect these were meant to be used this way, and
+ should not have really been "reserved" in the published standards. }*/
+
+/*@r{ *BEWARE* *BEWARE* *BEWARE* that the following information is still
+ boiling, and may change. Even if the OLDGNU format description should be
+ accurate, the so-called GNU format is not yet fully decided. It is
+ surely meant to use only extensions allowed by POSIX, but the sketch
+ below repeats some ugliness from the OLDGNU format, which should rather
+ go away. Sparse files should be saved in such a way that they do *not*
+ require two passes at archive creation time. Huge files get some POSIX
+ fields to overflow, alternate solutions have to be sought for this. }*/
+
+/*@r{ Descriptor for a single file hole. }*/
+
+struct sparse
+@{ /*@r{ byte offset }*/
+ char offset[12]; /*@r{ 0 }*/
+ char numbytes[12]; /*@r{ 12 }*/
+ /*@r{ 24 }*/
+@};
+
+/*@r{ Sparse files are not supported in POSIX ustar format. For sparse files
+ with a POSIX header, a GNU extra header is provided which holds overall
+ sparse information and a few sparse descriptors. When an old GNU header
+ replaces both the POSIX header and the GNU extra header, it holds some
+ sparse descriptors too. Whether POSIX or not, if more sparse descriptors
+ are still needed, they are put into as many successive sparse headers as
+ necessary. The following constants tell how many sparse descriptors fit
+ in each kind of header able to hold them. }*/
+
+#define SPARSES_IN_EXTRA_HEADER 16
+#define SPARSES_IN_OLDGNU_HEADER 4
+#define SPARSES_IN_SPARSE_HEADER 21
+
+/*@r{ Extension header for sparse files, used immediately after the GNU extra
+ header, and used only if all sparse information cannot fit into that
+ extra header. There might even be many such extension headers, one after
+ the other, until all sparse information has been recorded. }*/
+
+struct sparse_header
+@{ /*@r{ byte offset }*/
+ struct sparse sp[SPARSES_IN_SPARSE_HEADER];
+ /*@r{ 0 }*/
+ char isextended; /*@r{ 504 }*/
+ /*@r{ 505 }*/
+@};
+
+/*@r{ The old GNU format header conflicts with POSIX format in such a way that
+ POSIX archives may fool old GNU tar's, and POSIX tar's might well be
+ fooled by old GNU tar archives. An old GNU format header uses the space
+ used by the prefix field in a POSIX header, and cumulates information
+ normally found in a GNU extra header. With an old GNU tar header, we
+ never see any POSIX header nor GNU extra header. Supplementary sparse
+ headers are allowed, however. }*/
+
+struct oldgnu_header
+@{ /*@r{ byte offset }*/
+ char unused_pad1[345]; /*@r{ 0 }*/
+ char atime[12]; /*@r{ 345 Incr. archive: atime of the file }*/
+ char ctime[12]; /*@r{ 357 Incr. archive: ctime of the file }*/
+ char offset[12]; /*@r{ 369 Multivolume archive: the offset of
+ the start of this volume }*/
+ char longnames[4]; /*@r{ 381 Not used }*/
+ char unused_pad2; /*@r{ 385 }*/
+ struct sparse sp[SPARSES_IN_OLDGNU_HEADER];
+ /*@r{ 386 }*/
+ char isextended; /*@r{ 482 Sparse file: Extension sparse header
+ follows }*/
+ char realsize[12]; /*@r{ 483 Sparse file: Real size}*/
+ /*@r{ 495 }*/
+@};
+
+/*@r{ OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
+ Found in an archive, it indicates an old GNU header format, which will be
+ hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are
+ valid, though the header is not truly POSIX conforming. }*/
+#define OLDGNU_MAGIC "ustar " /*@r{ 7 chars and a null }*/
+
+/*@r{ The standards committee allows only capital A through capital Z for
+ user-defined expansion. Other letters in use include:
+
+ 'A' Solaris Access Control List
+ 'E' Solaris Extended Attribute File
+ 'I' Inode only, as in 'star'
+ 'N' Obsolete GNU tar, for file names that do not fit into the main header.
+ 'X' POSIX 1003.1-2001 eXtended (VU version) }*/
+
+/*@r{ This is a dir entry that contains the names of files that were in the
+ dir at the time the dump was made. }*/
+#define GNUTYPE_DUMPDIR 'D'
+
+/*@r{ Identifies the *next* file on the tape as having a long linkname. }*/
+#define GNUTYPE_LONGLINK 'K'
+
+/*@r{ Identifies the *next* file on the tape as having a long name. }*/
+#define GNUTYPE_LONGNAME 'L'
+
+/*@r{ This is the continuation of a file that began on another volume. }*/
+#define GNUTYPE_MULTIVOL 'M'
+
+/*@r{ This is for sparse files. }*/
+#define GNUTYPE_SPARSE 'S'
+
+/*@r{ This file is a tape/volume header. Ignore it on extraction. }*/
+#define GNUTYPE_VOLHDR 'V'
+
+/*@r{ Solaris extended header }*/
+#define SOLARIS_XHDTYPE 'X'
+
+/*@r{ J@"org Schilling star header }*/
+
+struct star_header
+@{ /*@r{ byte offset }*/
+ char name[100]; /*@r{ 0 }*/
+ char mode[8]; /*@r{ 100 }*/
+ char uid[8]; /*@r{ 108 }*/
+ char gid[8]; /*@r{ 116 }*/
+ char size[12]; /*@r{ 124 }*/
+ char mtime[12]; /*@r{ 136 }*/
+ char chksum[8]; /*@r{ 148 }*/
+ char typeflag; /*@r{ 156 }*/
+ char linkname[100]; /*@r{ 157 }*/
+ char magic[6]; /*@r{ 257 }*/
+ char version[2]; /*@r{ 263 }*/
+ char uname[32]; /*@r{ 265 }*/
+ char gname[32]; /*@r{ 297 }*/
+ char devmajor[8]; /*@r{ 329 }*/
+ char devminor[8]; /*@r{ 337 }*/
+ char prefix[131]; /*@r{ 345 }*/
+ char atime[12]; /*@r{ 476 }*/
+ char ctime[12]; /*@r{ 488 }*/
+ /*@r{ 500 }*/
+@};
+
+#define SPARSES_IN_STAR_HEADER 4
+#define SPARSES_IN_STAR_EXT_HEADER 21
+
+struct star_in_header
+@{
+ char fill[345]; /*@r{ 0 Everything that is before t_prefix }*/
+ char prefix[1]; /*@r{ 345 t_name prefix }*/
+ char fill2; /*@r{ 346 }*/
+ char fill3[8]; /*@r{ 347 }*/
+ char isextended; /*@r{ 355 }*/
+ struct sparse sp[SPARSES_IN_STAR_HEADER]; /*@r{ 356 }*/
+ char realsize[12]; /*@r{ 452 Actual size of the file }*/
+ char offset[12]; /*@r{ 464 Offset of multivolume contents }*/
+ char atime[12]; /*@r{ 476 }*/
+ char ctime[12]; /*@r{ 488 }*/
+ char mfill[8]; /*@r{ 500 }*/
+ char xmagic[4]; /*@r{ 508 "tar" }*/
+@};
+
+struct star_ext_header
+@{
+ struct sparse sp[SPARSES_IN_STAR_EXT_HEADER];
+ char isextended;
+@};
+
diff --git a/doc/intern.texi b/doc/intern.texi
new file mode 100644
index 0000000..e5a8bd1
--- /dev/null
+++ b/doc/intern.texi
@@ -0,0 +1,332 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2006, 2014, 2016 Free Software Foundation, Inc.
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+@menu
+* Standard:: Basic Tar Format
+* Extensions:: @acronym{GNU} Extensions to the Archive Format
+* Sparse Formats:: Storing Sparse Files
+* Snapshot Files::
+* Dumpdir::
+@end menu
+
+@node Standard
+@unnumberedsec 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}.
+
+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 @acronym{UID}, Set @acronym{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
+@acronym{ID} of the file owners, respectively. If the operating system does
+not support numeric user or group @acronym{ID}s, 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.
+
+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 @acronym{ID}s 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
+@unnumberedsec @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 Sparse Formats
+@unnumberedsec Storing Sparse Files
+@include sparse.texi
+
+@node Snapshot Files
+@unnumberedsec Format of the Incremental Snapshot Files
+@include snapshot.texi
+
+@node Dumpdir
+@unnumberedsec Dumpdir
+@include dumpdir.texi
diff --git a/doc/mastermenu.el b/doc/mastermenu.el
new file mode 100644
index 0000000..6f5ea87
--- /dev/null
+++ b/doc/mastermenu.el
@@ -0,0 +1,90 @@
+;;; mastermenu.el --- Redefinition of texinfo-master-menu-list
+
+;; Copyright 2006-2007, 2013-2014, 2016 Free Software Foundation, Inc.
+
+;; Author: Sergey Poznyakoff
+;; Maintainer: bug-tar@gnu.org
+;; Keywords: maint, tex, docs
+
+;; This file is part of GNU tar.
+
+;; GNU tar is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation; either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU tar is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This file redefines texinfo-master-menu-list so that it takes into
+;; account included files.
+
+;; Known bugs: @menu without previous sectioning command will inherit
+;; documentation string from the previous menu. However, since such a
+;; menu is illegal in a texinfo file, we can live with it.
+
+(require 'texinfo)
+(require 'texnfo-upd)
+
+(defun texinfo-master-menu-list-recursive (title)
+ "Auxiliary function used by `texinfo-master-menu-list'."
+ (save-excursion
+ (let (master-menu-list)
+ (while (re-search-forward "\\(^@menu\\|^@include\\)" nil t)
+ (cond
+ ((string= (match-string 0) "@include")
+ (skip-chars-forward " \t")
+ (let ((included-name (let ((start (point)))
+ (end-of-line)
+ (skip-chars-backward " \t")
+ (buffer-substring start (point)))))
+ (end-of-line)
+ (let ((prev-title (texinfo-copy-menu-title)))
+ (save-excursion
+ (set-buffer (find-file-noselect included-name))
+ (setq master-menu-list
+ (append (texinfo-master-menu-list-recursive prev-title)
+ master-menu-list))))))
+ (t
+ (setq master-menu-list
+ (cons (list
+ (texinfo-copy-menu)
+ (let ((menu-title (texinfo-copy-menu-title)))
+ (if (string= menu-title "")
+ title
+ menu-title)))
+ master-menu-list)))))
+ master-menu-list)))
+
+(defun texinfo-master-menu-list ()
+ "Return a list of menu entries and header lines for the master menu,
+recursing into included files.
+
+Start with the menu for chapters and indices and then find each
+following menu and the title of the node preceding that menu.
+
+The master menu list has this form:
+
+ \(\(\(... \"entry-1-2\" \"entry-1\"\) \"title-1\"\)
+ \(\(... \"entry-2-2\" \"entry-2-1\"\) \"title-2\"\)
+ ...\)
+
+However, there does not need to be a title field."
+
+ (reverse (texinfo-master-menu-list-recursive "")))
+
+(defun make-master-menu ()
+ "Create master menu in the first Emacs argument."
+ (find-file (car command-line-args-left))
+ (texinfo-master-menu nil)
+ (save-buffer))
+
+
+;;; mastermenu.el ends here
diff --git a/doc/parse-datetime.texi b/doc/parse-datetime.texi
new file mode 100644
index 0000000..34e9ede
--- /dev/null
+++ b/doc/parse-datetime.texi
@@ -0,0 +1,594 @@
+@c GNU date syntax documentation
+
+@c Copyright (C) 1994-2006, 2009-2015 Free Software Foundation, Inc.
+
+@c Permission is granted to copy, distribute and/or modify this document
+@c under the terms of the GNU Free Documentation License, Version 1.3 or
+@c any later version published by the Free Software Foundation; with no
+@c Invariant Sections, no Front-Cover Texts, and no Back-Cover
+@c Texts. A copy of the license is included in the ``GNU Free
+@c Documentation License'' file as part of this distribution.
+
+@node Date input formats
+@chapter Date input formats
+
+@cindex date input formats
+@findex parse_datetime
+
+First, a quote:
+
+@quotation
+Our units of temporal measurement, from seconds on up to months, are so
+complicated, asymmetrical and disjunctive so as to make coherent mental
+reckoning in time all but impossible. Indeed, had some tyrannical god
+contrived to enslave our minds to time, to make it all but impossible
+for us to escape subjection to sodden routines and unpleasant surprises,
+he could hardly have done better than handing down our present system.
+It is like a set of trapezoidal building blocks, with no vertical or
+horizontal surfaces, like a language in which the simplest thought
+demands ornate constructions, useless particles and lengthy
+circumlocutions. Unlike the more successful patterns of language and
+science, which enable us to face experience boldly or at least
+level-headedly, our system of temporal calculation silently and
+persistently encourages our terror of time.
+
+@dots{} It is as though architects had to measure length in feet, width
+in meters and height in ells; as though basic instruction manuals
+demanded a knowledge of five different languages. It is no wonder then
+that we often look into our own immediate past or future, last Tuesday
+or a week from Sunday, with feelings of helpless confusion. @dots{}
+
+---Robert Grudin, @cite{Time and the Art of Living}.
+@end quotation
+
+This section describes the textual date representations that GNU
+programs accept. These are the strings you, as a user, can supply as
+arguments to the various programs. The C interface (via the
+@code{parse_datetime} function) is not described here.
+
+@menu
+* General date syntax:: Common rules.
+* Calendar date items:: 19 Dec 1994.
+* Time of day items:: 9:20pm.
+* Time zone items:: EST, PDT, UTC, @dots{}
+* Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500.
+* 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 parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+@end menu
+
+
+@node General date syntax
+@section General date syntax
+
+@cindex general date syntax
+
+@cindex items in date strings
+A @dfn{date} is a string, possibly empty, containing many items
+separated by whitespace. The whitespace may be omitted when no
+ambiguity arises. The empty string means the beginning of today (i.e.,
+midnight). Order of the items is immaterial. A date string may contain
+many flavors of items:
+
+@itemize @bullet
+@item calendar date items
+@item time of day items
+@item time zone items
+@item combined date and time of day items
+@item day of the week items
+@item relative items
+@item pure numbers.
+@end itemize
+
+@noindent We describe each of these item types in turn, below.
+
+@cindex numbers, written-out
+@cindex ordinal numbers
+@findex first @r{in date strings}
+@findex next @r{in date strings}
+@findex last @r{in date strings}
+A few ordinal numbers may be written out in words in some contexts. This is
+most useful for specifying day of the week items or relative items (see
+below). Among the most commonly used ordinal numbers, the word
+@samp{last} stands for @math{-1}, @samp{this} stands for 0, and
+@samp{first} and @samp{next} both stand for 1. Because the word
+@samp{second} stands for the unit of time there is no way to write the
+ordinal number 2, but for convenience @samp{third} stands for 3,
+@samp{fourth} for 4, @samp{fifth} for 5,
+@samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8,
+@samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and
+@samp{twelfth} for 12.
+
+@cindex months, written-out
+When a month is written this way, it is still considered to be written
+numerically, instead of being ``spelled in full''; this changes the
+allowed strings.
+
+@cindex language, in dates
+In the current implementation, only English is supported for words and
+abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first},
+@samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}.
+
+@cindex language, in dates
+@cindex time zone item
+The output of the @command{date} command
+is not always acceptable as a date string,
+not only because of the language problem, but also because there is no
+standard meaning for time zone items like @samp{IST}@. When using
+@command{date} to generate a date string intended to be parsed later,
+specify a date format that is independent of language and that does not
+use time zone items other than @samp{UTC} and @samp{Z}@. Here are some
+ways to do this:
+
+@example
+$ LC_ALL=C TZ=UTC0 date
+Mon Mar 1 00:21:42 UTC 2004
+$ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
+2004-03-01 00:21:42Z
+$ date --rfc-3339=ns # --rfc-3339 is a GNU extension.
+2004-02-29 16:21:42.692722128-08:00
+$ date --rfc-2822 # a GNU extension
+Sun, 29 Feb 2004 16:21:42 -0800
+$ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
+2004-02-29 16:21:42 -0800
+$ date +'@@%s.%N' # %s and %N are GNU extensions.
+@@1078100502.692722128
+@end example
+
+@cindex case, ignored in dates
+@cindex comments, in dates
+Alphabetic case is completely ignored in dates. Comments may be introduced
+between round parentheses, as long as included parentheses are properly
+nested. Hyphens not followed by a digit are currently ignored. Leading
+zeros on numbers are ignored.
+
+@cindex leap seconds
+Invalid dates like @samp{2005-02-29} or times like @samp{24:00} are
+rejected. In the typical case of a host that does not support leap
+seconds, a time like @samp{23:59:60} is rejected even if it
+corresponds to a valid leap second.
+
+
+@node Calendar date items
+@section Calendar date items
+
+@cindex calendar date item
+
+A @dfn{calendar date item} specifies a day of the year. It is
+specified differently, depending on whether the month is specified
+numerically or literally. All these strings specify the same calendar date:
+
+@example
+1972-09-24 # ISO 8601.
+72-9-24 # Assume 19xx for 69 through 99,
+ # 20xx for 00 through 68.
+72-09-24 # Leading zeros are ignored.
+9/24/72 # Common U.S. writing.
+24 September 1972
+24 Sept 72 # September has a special abbreviation.
+24 Sep 72 # Three-letter abbreviations always allowed.
+Sep 24, 1972
+24-sep-72
+24sep72
+@end example
+
+The year can also be omitted. In this case, the last specified year is
+used, or the current year if none. For example:
+
+@example
+9/24
+sep 24
+@end example
+
+Here are the rules.
+
+@cindex ISO 8601 date format
+@cindex date format, ISO 8601
+For numeric months, the ISO 8601 format
+@samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is
+any positive number, @var{month} is a number between 01 and 12, and
+@var{day} is a number between 01 and 31. A leading zero must be present
+if a number is less than ten. If @var{year} is 68 or smaller, then 2000
+is added to it; otherwise, if @var{year} is less than 100,
+then 1900 is added to it. The construct
+@samp{@var{month}/@var{day}/@var{year}}, popular in the United States,
+is accepted. Also @samp{@var{month}/@var{day}}, omitting the year.
+
+@cindex month names in date strings
+@cindex abbreviations for months
+Literal months may be spelled out in full: @samp{January},
+@samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June},
+@samp{July}, @samp{August}, @samp{September}, @samp{October},
+@samp{November} or @samp{December}. Literal months may be abbreviated
+to their first three letters, possibly followed by an abbreviating dot.
+It is also permitted to write @samp{Sept} instead of @samp{September}.
+
+When months are written literally, the calendar date may be given as any
+of the following:
+
+@example
+@var{day} @var{month} @var{year}
+@var{day} @var{month}
+@var{month} @var{day} @var{year}
+@var{day}-@var{month}-@var{year}
+@end example
+
+Or, omitting the year:
+
+@example
+@var{month} @var{day}
+@end example
+
+
+@node Time of day items
+@section Time of day items
+
+@cindex time of day item
+
+A @dfn{time of day item} in date strings specifies the time on a given
+day. Here are some examples, all of which represent the same time:
+
+@example
+20:02:00.000000
+20:02
+8:02pm
+20:02-0500 # In EST (U.S. Eastern Standard Time).
+@end example
+
+@cindex leap seconds
+More generally, the time of day may be given as
+@samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is
+a number between 0 and 23, @var{minute} is a number between 0 and
+59, and @var{second} is a number between 0 and 59 possibly followed by
+@samp{.} or @samp{,} and a fraction containing one or more digits.
+Alternatively,
+@samp{:@var{second}} can be omitted, in which case it is taken to
+be zero. On the rare hosts that support leap seconds, @var{second}
+may be 60.
+
+@findex am @r{in date strings}
+@findex pm @r{in date strings}
+@findex midnight @r{in date strings}
+@findex noon @r{in date strings}
+If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.}
+or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and
+@samp{:@var{minute}} may be omitted (taken to be zero). @samp{am}
+indicates the first half of the day, @samp{pm} indicates the second
+half of the day. In this notation, 12 is the predecessor of 1:
+midnight is @samp{12am} while noon is @samp{12pm}.
+(This is the zero-oriented interpretation of @samp{12am} and @samp{12pm},
+as opposed to the old tradition derived from Latin
+which uses @samp{12m} for noon and @samp{12pm} for midnight.)
+
+@cindex time zone correction
+@cindex minutes, time zone correction by
+The time may alternatively be followed by a time zone correction,
+expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+}
+or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number
+of zone minutes.
+The zone minutes term, @var{mm}, may be omitted, in which case
+the one- or two-digit correction is interpreted as a number of hours.
+You can also separate @var{hh} from @var{mm} with a colon.
+When a time zone correction is given this way, it
+forces interpretation of the time relative to
+Coordinated Universal Time (UTC), overriding any previous
+specification for the time zone or the local time zone. For example,
+@samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours
+ahead of UTC (e.g., India).
+This is the best way to
+specify a time zone correction by fractional parts of an hour.
+The maximum zone correction is 24 hours.
+
+Either @samp{am}/@samp{pm} or a time zone correction may be specified,
+but not both.
+
+
+@node Time zone items
+@section Time zone items
+
+@cindex time zone item
+
+A @dfn{time zone item} specifies an international time zone, indicated
+by a small set of letters, e.g., @samp{UTC} or @samp{Z}
+for Coordinated Universal
+Time. Any included periods are ignored. By following a
+non-daylight-saving time zone by the string @samp{DST} in a separate
+word (that is, separated by some white space), the corresponding
+daylight saving time zone may be specified.
+Alternatively, a non-daylight-saving time zone can be followed by a
+time zone correction, to add the two values. This is normally done
+only for @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to
+@samp{+05:30}.
+
+Time zone items other than @samp{UTC} and @samp{Z}
+are obsolescent and are not recommended, because they
+are ambiguous; for example, @samp{EST} has a different meaning in
+Australia than in the United States. Instead, it's better to use
+unambiguous numeric time zone corrections like @samp{-0500}, as
+described in the previous section.
+
+If neither a time zone item nor a time zone correction is supplied,
+time stamps are interpreted using the rules of the default time zone
+(@pxref{Specifying time zone rules}).
+
+
+@node Combined date and time of day items
+@section Combined date and time of day items
+
+@cindex combined date and time of day item
+@cindex ISO 8601 date and time of day format
+@cindex date and time of day format, ISO 8601
+
+The ISO 8601 date and time of day extended format consists of an ISO
+8601 date, a @samp{T} character separator, and an ISO 8601 time of
+day. This format is also recognized if the @samp{T} is replaced by a
+space.
+
+In this format, the time of day should use 24-hour notation.
+Fractional seconds are allowed, with either comma or period preceding
+the fraction. ISO 8601 fractional minutes and hours are not
+supported. Typically, hosts support nanosecond timestamp resolution;
+excess precision is silently discarded.
+
+Here are some examples:
+
+@example
+2012-09-24T20:02:00.052-0500
+2012-12-31T23:59:59,999999999+1100
+1970-01-01 00:00Z
+@end example
+
+@node Day of week items
+@section Day of week items
+
+@cindex day of week item
+
+The explicit mention of a day of the week will forward the date
+(only if necessary) to reach that day of the week in the future.
+
+Days of the week may be spelled out in full: @samp{Sunday},
+@samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday},
+@samp{Friday} or @samp{Saturday}. Days may be abbreviated to their
+first three letters, optionally followed by a period. The special
+abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for
+@samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are
+also allowed.
+
+@findex next @var{day}
+@findex last @var{day}
+A number may precede a day of the week item to move forward
+supplementary weeks. It is best used in expression like @samp{third
+monday}. In this context, @samp{last @var{day}} or @samp{next
+@var{day}} is also acceptable; they move one week before or after
+the day that @var{day} by itself would represent.
+
+A comma following a day of the week item is ignored.
+
+
+@node Relative items in date strings
+@section Relative items in date strings
+
+@cindex relative items in date strings
+@cindex displacement of dates
+
+@dfn{Relative items} adjust a date (or the current date if none) forward
+or backward. The effects of relative items accumulate. Here are some
+examples:
+
+@example
+1 year
+1 year ago
+3 years
+2 days
+@end example
+
+@findex year @r{in date strings}
+@findex month @r{in date strings}
+@findex fortnight @r{in date strings}
+@findex week @r{in date strings}
+@findex day @r{in date strings}
+@findex hour @r{in date strings}
+@findex minute @r{in date strings}
+The unit of time displacement may be selected by the string @samp{year}
+or @samp{month} for moving by whole years or months. These are fuzzy
+units, as years and months are not all of equal duration. More precise
+units are @samp{fortnight} which is worth 14 days, @samp{week} worth 7
+days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes,
+@samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or
+@samp{sec} worth one second. An @samp{s} suffix on these units is
+accepted and ignored.
+
+@findex ago @r{in date strings}
+The unit of time may be preceded by a multiplier, given as an optionally
+signed number. Unsigned numbers are taken as positively signed. No
+number at all implies 1 for a multiplier. Following a relative item by
+the string @samp{ago} is equivalent to preceding the unit by a
+multiplier with value @math{-1}.
+
+@findex day @r{in date strings}
+@findex tomorrow @r{in date strings}
+@findex yesterday @r{in date strings}
+The string @samp{tomorrow} is worth one day in the future (equivalent
+to @samp{day}), the string @samp{yesterday} is worth
+one day in the past (equivalent to @samp{day ago}).
+
+@findex now @r{in date strings}
+@findex today @r{in date strings}
+@findex this @r{in date strings}
+The strings @samp{now} or @samp{today} are relative items corresponding
+to zero-valued time displacement, these strings come from the fact
+a zero-valued time displacement represents the current time when not
+otherwise changed by previous items. They may be used to stress other
+items, like in @samp{12:00 today}. The string @samp{this} also has
+the meaning of a zero-valued time displacement, but is preferred in
+date strings like @samp{this thursday}.
+
+When a relative item causes the resulting date to cross a boundary
+where the clocks were adjusted, typically for daylight saving time,
+the resulting date and time are adjusted accordingly.
+
+The fuzz in units can cause problems with relative items. For
+example, @samp{2003-07-31 -1 month} might evaluate to 2003-07-01,
+because 2003-06-31 is an invalid date. To determine the previous
+month more reliably, you can ask for the month before the 15th of the
+current month. For example:
+
+@example
+$ date -R
+Thu, 31 Jul 2003 13:02:39 -0700
+$ date --date='-1 month' +'Last month was %B?'
+Last month was July?
+$ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
+Last month was June!
+@end example
+
+Also, take care when manipulating dates around clock changes such as
+daylight saving leaps. In a few cases these have added or subtracted
+as much as 24 hours from the clock, so it is often wise to adopt
+universal time by setting the @env{TZ} environment variable to
+@samp{UTC0} before embarking on calendrical calculations.
+
+@node Pure numbers in date strings
+@section Pure numbers in date strings
+
+@cindex pure numbers in date strings
+
+The precise interpretation of a pure decimal number depends
+on the context in the date string.
+
+If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no
+other calendar date item (@pxref{Calendar date items}) appears before it
+in the date string, then @var{yyyy} is read as the year, @var{mm} as the
+month number and @var{dd} as the day of the month, for the specified
+calendar date.
+
+If the decimal number is of the form @var{hh}@var{mm} and no other time
+of day item appears before it in the date string, then @var{hh} is read
+as the hour of the day and @var{mm} as the minute of the hour, for the
+specified time of day. @var{mm} can also be omitted.
+
+If both a calendar date and a time of day appear to the left of a number
+in the date string, but no relative item, then the number overrides the
+year.
+
+
+@node Seconds since the Epoch
+@section Seconds since the Epoch
+
+If you precede a number with @samp{@@}, it represents an internal time
+stamp as a count of seconds. The number can contain an internal
+decimal point (either @samp{.} or @samp{,}); any excess precision not
+supported by the internal representation is truncated toward minus
+infinity. Such a number cannot be combined with any other date
+item, as it specifies a complete time stamp.
+
+@cindex beginning of time, for POSIX
+@cindex epoch, for POSIX
+Internally, computer times are represented as a count of seconds since
+an epoch---a well-defined point of time. On GNU and
+POSIX systems, the epoch is 1970-01-01 00:00:00 UTC, so
+@samp{@@0} represents this time, @samp{@@1} represents 1970-01-01
+00:00:01 UTC, and so forth. GNU and most other
+POSIX-compliant systems support such times as an extension
+to POSIX, using negative counts, so that @samp{@@-1}
+represents 1969-12-31 23:59:59 UTC.
+
+Traditional Unix systems count seconds with 32-bit two's-complement
+integers and can represent times from 1901-12-13 20:45:52 through
+2038-01-19 03:14:07 UTC@. More modern systems use 64-bit counts
+of seconds with nanosecond subcounts, and can represent all the times
+in the known lifetime of the universe to a resolution of 1 nanosecond.
+
+@cindex leap seconds
+On most hosts, these counts ignore the presence of leap seconds.
+For example, on most hosts @samp{@@915148799} represents 1998-12-31
+23:59:59 UTC, @samp{@@915148800} represents 1999-01-01 00:00:00
+UTC, and there is no way to represent the intervening leap second
+1998-12-31 23:59:60 UTC.
+
+@node Specifying time zone rules
+@section Specifying time zone rules
+
+@vindex TZ
+Normally, dates are interpreted using the rules of the current time
+zone, which in turn are specified by the @env{TZ} environment
+variable, or by a system default if @env{TZ} is not set. To specify a
+different set of default time zone rules that apply just to one date,
+start the date with a string of the form @samp{TZ="@var{rule}"}. The
+two quote characters (@samp{"}) must be present in the date, and any
+quotes or backslashes within @var{rule} must be escaped by a
+backslash.
+
+For example, with the GNU @command{date} command you can
+answer the question ``What time is it in New York when a Paris clock
+shows 6:30am on October 31, 2004?'' by using a date beginning with
+@samp{TZ="Europe/Paris"} as shown in the following shell transcript:
+
+@example
+$ export TZ="America/New_York"
+$ date --date='TZ="Europe/Paris" 2004-10-31 06:30'
+Sun Oct 31 01:30:00 EDT 2004
+@end example
+
+In this example, the @option{--date} operand begins with its own
+@env{TZ} setting, so the rest of that operand is processed according
+to @samp{Europe/Paris} rules, treating the string @samp{2004-10-31
+06:30} as if it were in Paris. However, since the output of the
+@command{date} command is processed according to the overall time zone
+rules, it uses New York time. (Paris was normally six hours ahead of
+New York in 2004, but this example refers to a brief Halloween period
+when the gap was five hours.)
+
+A @env{TZ} value is a rule that typically names a location in the
+@uref{http://www.twinsun.com/tz/tz-link.htm, @samp{tz} database}.
+A recent catalog of location names appears in the
+@uref{http://twiki.org/cgi-bin/xtra/tzdate, TWiki Date and Time
+Gateway}. A few non-GNU hosts require a colon before a
+location name in a @env{TZ} setting, e.g.,
+@samp{TZ=":America/New_York"}.
+
+The @samp{tz} database includes a wide variety of locations ranging
+from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but
+if you are at sea and have your own private time zone, or if you are
+using a non-GNU host that does not support the @samp{tz}
+database, you may need to use a POSIX rule instead. Simple
+POSIX rules like @samp{UTC0} specify a time zone without
+daylight saving time; other rules can specify simple daylight saving
+regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ},
+libc, The GNU C Library}.
+
+@node Authors of parse_datetime
+@section Authors of @code{parse_datetime}
+@c the anchor keeps the old node name, to try to avoid breaking links
+@anchor{Authors of get_date}
+
+@cindex authors of @code{parse_datetime}
+
+@cindex Bellovin, Steven M.
+@cindex Salz, Rich
+@cindex Berets, Jim
+@cindex MacKenzie, David
+@cindex Meyering, Jim
+@cindex Eggert, Paul
+@code{parse_datetime} started life as @code{getdate}, as originally
+implemented by Steven M. Bellovin
+(@email{smb@@research.att.com}) while at the University of North Carolina
+at Chapel Hill. The code was later tweaked by a couple of people on
+Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com})
+and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various
+revisions for the GNU system were made by David MacKenzie, Jim Meyering,
+Paul Eggert and others, including renaming it to @code{get_date} to
+avoid a conflict with the alternative Posix function @code{getdate},
+and a later rename to @code{parse_datetime}. The Posix function
+@code{getdate} can parse more locale-specific dates using
+@code{strptime}, but relies on an environment variable and external
+file, and lacks the thread-safety of @code{parse_datetime}.
+
+@cindex Pinard, F.
+@cindex Berry, K.
+This chapter was originally produced by Fran@,{c}ois Pinard
+(@email{pinard@@iro.umontreal.ca}) from the @file{parse_datetime.y} source code,
+and then edited by K. Berry (@email{kb@@cs.umb.edu}).
diff --git a/doc/rendition.texi b/doc/rendition.texi
new file mode 100644
index 0000000..453c4e8
--- /dev/null
+++ b/doc/rendition.texi
@@ -0,0 +1,99 @@
+@c This is part of GNU tar manual.
+@c Copyright 1992, 1994-1997, 1999-2004, 2006, 2013-2014, 2016 Free
+@c Software Foundation, Inc.
+@c See file tar.texi for copying conditions.
+
+@c This file contains support for 'renditions' by Fran@,{c}ois Pinard
+@c I extended it by adding a FIXME_FOOTNOTE variable, which controls
+@c whether FIXME information should be placed in footnotes or
+@c inlined. --gray
+
+@c ======================================================================
+@c This document has three levels of rendition: PUBLISH, DISTRIB or PROOF,
+@c as decided by @set symbols. The PUBLISH rendition does not show
+@c notes or marks asking for revision. Most users will prefer having more
+@c information, even if this information is not fully revised for adequacy,
+@c so DISTRIB is the default for distributions. The PROOF rendition
+@c show all marks to the point of ugliness, but is nevertheless useful to
+@c those working on the manual itself.
+@c ======================================================================
+
+@c Set this symbol if you wish FIXMEs to appear in footnotes, instead
+@c of being inserted into the text.
+@c @set PROOF_FOOTNOTED
+
+@ifclear PUBLISH
+@ifclear DISTRIB
+@ifclear PROOF
+@set DISTRIB
+@end ifclear
+@end ifclear
+@end ifclear
+
+@ifset PUBLISH
+@set RENDITION The book, version
+@end ifset
+
+@ifset DISTRIB
+@set RENDITION FTP release, version
+@end ifset
+
+@ifset PROOF
+@set RENDITION Proof reading version
+@end ifset
+
+@c Output marks for nodes needing revision, but not in PUBLISH rendition.
+
+@macro UNREVISED
+@ifclear PUBLISH
+@quotation
+@emph{(This message will disappear, once this node revised.)}
+@end quotation
+@end ifclear
+@end macro
+
+@c Output various FIXME information only in PROOF rendition.
+
+@macro FIXME{string}
+@ifset PROOF
+@ifset PROOF_FOOTNOTED
+@footnote{@strong{FIXME:} \string\}
+@end ifset
+@ifclear PROOF_FOOTNOTED
+@cartouche
+@strong{<FIXME>} \string\ @strong{</>}
+@end cartouche
+@end ifclear
+@end ifset
+
+@end macro
+
+@macro FIXME-ref{string}
+@ifset PROOF
+@strong{<REF>} \string\ @strong{</>}
+@end ifset
+@ifclear PROOF
+@cite{\string\}
+@end ifclear
+@end macro
+
+@macro FIXME-pxref{string}
+@ifset PROOF
+See @strong{<PXREF>} \string\ @strong{</>}
+@end ifset
+@ifclear PROOF
+See @cite{\string\}
+@end ifclear
+
+@end macro
+
+@macro FIXME-xref{string}
+@ifset PROOF
+See @strong{<XREF>} \string\ @strong{</>}
+@end ifset
+@ifclear PROOF
+See @cite{\string\}
+@end ifclear
+@end macro
+
+@c End of rendition.texi
diff --git a/doc/rmt.8 b/doc/rmt.8
new file mode 100644
index 0000000..7550277
--- /dev/null
+++ b/doc/rmt.8
@@ -0,0 +1,254 @@
+.\" This file is part of GNU tar. -*- nroff -*-
+.\" Copyright 2013 Free Software Foundation, Inc.
+.\"
+.\" GNU tar is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 3 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" GNU tar is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
+.TH RMT 1 "January 27, 2014" "RMT" "GNU TAR Manual"
+.SH NAME
+rmt \- remote magnetic tape server
+.SH SYNOPSIS
+.B rmt
+.SH DESCRIPTION
+.B Rmt
+provides remote access to files and devices for
+.BR tar (1),
+.BR cpio (1),
+and similar backup utilities. It is normally called by running
+.BR rsh (1)
+or
+.BR ssh (1)
+to the remote machine, optionally using a different
+login name if one is supplied.
+.PP
+The calling program communicates with
+.B rmt
+by sending requests on its standard input and reading replies from the
+standard output. A request consists of a request letter followed by
+an argument (if required) and a newline character. Additional data,
+if any, are sent after the newline. On success,
+.B rmt
+returns
+.PP
+.in +4
+.BI A number \en
+.PP
+where \fInumber\fR is an ASCII representation of a decimal return
+code. Additional data are returned after this line. On error, the
+following response is returned:
+.PP
+.in +4
+.BI E errno \en error-message \en
+.PP
+where \fIerrno\fR is one of the system error codes, as described in
+.BR errno (3),
+and \fIerror-message\fR is a one-line human-readable description of
+the error, as printed by
+.BR perror (3).
+.PP
+Available commands and possible responses are discussed in detail in
+the subsequent section.
+.SH COMMANDS
+.TP
+.BI O device \en flags \en
+Opens the \fIdevice\fR with given \fIflags\fR. If a
+device had already been opened, it is closed before opening the new one.
+.sp
+.B Arguments
+.RS
+.TP
+.I device
+The name of the device to open.
+.TP
+.I flags
+Flags for
+.BR open (2):
+a decimal number, or any valid \fBO_*\fR constant from
+.B fcntl.h
+(the initial \fBO_\fR may be omitted), or a bitwise or (using \fB|\fR)
+of any number of these, e.g.:
+.in +4
+.EX
+576
+64|512
+CREAT|TRUNC
+.EE
+.RS
+In addition, a combined form is also allowed, i.e. a decimal mode followed
+by its symbolic representation. In this case the symbolic representation
+is given preference.
+.RE
+.sp
+.B Reply
+.RS
+.B A0\en
+on success.
+.RE
+.sp
+.B Extensions
+.RS
+BSD version allows only decimal number as \fIflags\fR.
+.RE 1
+.TP
+\fBC\fR[\fIdevice\fR]\fB\en\fR
+Close the currently open device.
+.RS
+.TP
+.B Arguments
+.br
+Any arguments are silently ignored.
+.TP
+.B Reply
+.br
+.B A0\en
+on success.
+.RE
+.TP
+.BI L whence \en offset \en
+.RS
+Performs an
+.BR lseek (2)
+on the currently open device with the specified
+parameters.
+.TP
+.B Arguments
+.RS
+.TP
+.I whence
+Where to measure offset from. Valid values are:
+.sp
+.nf
+.ta 1n 20n
+ 0, SET, SEEK_SET seek from the file beginning
+ 1, CUR, SEEK_CUR seek from the current location
+ 2, END, SEEK_END seek from the file end
+.fi
+.RE
+.TP
+.B Reply
+.br
+.BI A offset \en
+on success. The \fIoffset\fR is the new offset in file.
+.TP
+.B Extensions
+BSD version allows only 0,1,2 as \fIwhence\fR.
+.RE
+.TP
+.BI R count \en
+.br
+Read \fIcount\fR bytes of data from the current device.
+.RS
+.TP
+.B Arguments
+.RS
+.TP
+.I count
+number of bytes to read.
+.RE
+.TP
+.B Reply
+.br
+On success:
+.sp
+.in +4
+.BI A rdcount \en
+.in
+.sp
+followed by \fIrdcount\fR bytes of data read from the device.
+.RE
+.TP
+.BI W count \en
+Writes data onto the current device. The command is followed by
+\fIcount\fR bytes of input data.
+.RS
+.TP
+.B Arguments
+.RS
+.TP
+.I count
+Number of bytes to write.
+.RE
+.TP
+.B Reply
+.br
+On success: \fBA\fIwrcount\fB\en\fR, where \fIwrcount\fR is the number of
+bytes actually written.
+.RE
+.TP
+.BI I opcode \en count \en
+Perform a
+.B MTIOCOP
+.BR ioctl (2)
+command with the specified paramedters.
+.RS
+.TP
+.B Arguments
+.RS
+.TP
+.I opcode
+.B MTIOCOP
+operation code.
+.TP
+.I count
+mt_count.
+.RE
+.TP
+.B Reply
+.br
+On success: \fBA0\en\fR.
+.RE
+.TP
+.B S\en
+Returns the status of the currently open device, as obtained from a
+.B MTIOCGET
+.BR ioctl (2)
+call.
+.RS
+.TP
+.B Arguments
+.br
+None
+.TP
+.B Reply
+.br
+On success: \fBA\fIcount\fB\en\fR followed by \fIcount\fR bytes of
+data.
+.RE
+.SH "SEE ALSO"
+.BR tar (1).
+.SH BUGS
+Using this utility as a general-purpose remote file access tool is
+discouraged.
+.SH "BUG REPORTS"
+Report bugs to <bug\-tar@gnu.org>.
+.SH HISTORY
+The
+.B rmt
+command appeared in 4.2BSD. The GNU
+.BR rmt
+is written from scratch, using the BSD specification.
+.SH COPYRIGHT
+Copyright \(co 2013 Free Software Foundation, Inc.
+.br
+.na
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+.ad
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.\" Local variables:
+.\" eval: (add-hook 'write-file-hooks 'time-stamp)
+.\" time-stamp-start: ".TH [A-Z_][A-Z0-9_.\\-]* [0-9] \""
+.\" time-stamp-format: "%:B %:d, %:y"
+.\" time-stamp-end: "\""
+.\" time-stamp-line-limit: 20
+.\" end:
diff --git a/doc/snapshot.texi b/doc/snapshot.texi
new file mode 100644
index 0000000..ad3d398
--- /dev/null
+++ b/doc/snapshot.texi
@@ -0,0 +1,164 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2005, 2007, 2014, 2016 Free Software Foundation, Inc.
+@c Written by Sergey Poznyakoff
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+ A @dfn{snapshot file} (or @dfn{directory file}) is created during
+incremental backups (@pxref{Incremental Dumps}). It
+contains the status of the file system at the time of the dump and is
+used to determine which files were modified since the last backup.
+
+ @GNUTAR{} version @value{VERSION} supports three snapshot file
+formats. The first format, called @dfn{format 0}, is the one used by
+@GNUTAR{} versions up to and including 1.15.1. The second format, called
+@dfn{format 1} is an extended version of this format, that contains more
+metadata and allows for further extensions. It was used by alpha release
+version 1.15.90. For alpha version 1.15.91 and stable releases
+version 1.16 up through @value{VERSION}, the @dfn{format 2} is used.
+
+ @GNUTAR{} is able to read all three formats, but will create
+snapshots only in format 2.
+
+ This appendix describes all three formats in detail.
+
+@enumerate 0
+@cindex format 0, snapshot file
+@cindex snapshot file, format 0
+@item
+ @samp{Format 0} snapshot file begins with a line containing a
+decimal number that represents a @acronym{UNIX} timestamp of the
+beginning of the last archivation. This line is followed by directory
+metadata descriptions, one per line. Each description has the
+following format:
+
+@smallexample
+[@var{nfs}]@var{dev} @var{inode} @var{name}
+@end smallexample
+
+@noindent
+where:
+
+@table @var
+@item nfs
+A single plus character (@samp{+}), if this directory is located on
+an @acronym{NFS}-mounted partition, otherwise empty.
+
+(That is, for non-NFS directories, the first character on the
+description line contains the start of the @var{dev} field.)
+
+@item dev
+Device number of the directory;
+
+@item inode
+I-node number of the directory;
+
+@item name
+Name of the directory. Any special characters (white-space,
+backslashes, etc.) are quoted.
+@end table
+
+@cindex format 1, snapshot file
+@cindex snapshot file, format 1
+@item
+ @samp{Format 1} snapshot file begins with a line specifying the
+format of the file. This line has the following structure:
+
+@smallexample
+@samp{GNU tar-}@var{tar-version}@samp{-}@var{incr-format-version}
+@end smallexample
+
+@noindent
+where @var{tar-version} is the version number of @GNUTAR{}
+implementation that created this snapshot, and
+@var{incr-format-version} is the version number of the snapshot format
+(in this case @samp{1}).
+
+ Next line contains two decimal numbers, representing the
+time of the last backup. First number is the number of seconds, the
+second one is the number of nanoseconds, since the beginning of the
+epoch.
+
+ Lines that follow contain directory metadata, one line per
+directory. Each line is formatted as follows:
+
+@smallexample
+[@var{nfs}]@var{mtime-sec} @var{mtime-nsec} @var{dev} @var{inode} @var{name}
+@end smallexample
+
+@noindent
+where @var{mtime-sec} and @var{mtime-nsec} represent last
+modification time of this directory with nanosecond precision;
+@var{nfs}, @var{dev}, @var{inode} and @var{name} have the same meaning
+as with @samp{format 0}.
+
+@cindex format 2, snapshot file
+@cindex snapshot file, format 2
+@item
+ @samp{Format 2} snapshot file begins with a format identifier, as described for
+version 1, e.g.:
+
+@smallexample
+GNU tar-@value{VERSION}-2
+@end smallexample
+
+ This line is followed by newline. Rest of file consists of
+records, separated by null (@acronym{ASCII} 0)
+characters. Thus, in contrast to the previous formats, format 2
+snapshot is a binary file.
+
+ First two records are decimal integers, representing the
+time of the last backup. First number is the number of seconds, the
+second one is the number of nanoseconds, since the beginning of the
+epoch. These are followed by arbitrary number of directory records.
+
+ Each @dfn{directory record} contains a set of metadata describing a
+particular directory. Parts of a directory record are delimited with
+@acronym{ASCII} 0 characters. The following table describes each
+part. The @dfn{Number} type in this table stands for a decimal integer
+in @acronym{ASCII} notation. (Negative values are preceded with a "-"
+character, while positive values have no leading punctuation.)
+
+@multitable @columnfractions 0.25 0.15 0.6
+@headitem Field @tab Type @tab Description
+@item nfs @tab Character @tab @samp{1} if the directory is located on
+an @acronym{NFS}-mounted partition, or @samp{0} otherwise;
+@item timestamp_sec @tab Number @tab Modification time, seconds;
+@item timestamp_nsec @tab Number @tab Modification time, nanoseconds;
+@item dev @tab Number @tab Device number;
+@item ino @tab Number @tab I-node number;
+@item name @tab String @tab Directory name; in contrast to the
+previous versions it is not quoted;
+@item contents @tab Dumpdir @tab Contents of the directory;
+@xref{Dumpdir}, for a description of its format.
+@item
+@end multitable
+
+ Dumpdirs stored in snapshot files contain only records of types
+@samp{Y}, @samp{N} and @samp{D}.
+
+@cindex snapshot file field ranges
+@opindex show-snapshot-field-ranges
+The specific range of values allowed in each of the @dfn{Number} fields
+depends on the underlying C datatypes as determined when @command{tar}
+is compiled. To see the specific ranges allowed for a particular
+@command{tar} binary, you can use the
+@option{--show-snapshot-field-ranges} option:
+
+@smallexample
+$ @kbd{tar --show-shapshot-field-ranges}
+This tar's snapshot file field ranges are
+ (field name => [ min, max ]):
+
+ nfs => [ 0, 1 ],
+ timestamp_sec => [ -9223372036854775808, 9223372036854775807 ],
+ timestamp_nsec => [ 0, 999999999 ],
+ dev => [ 0, 18446744073709551615 ],
+ ino => [ 0, 18446744073709551615 ],
+@end smallexample
+
+(This example is from a GNU/Linux x86_64 system.)
+
+@end enumerate
+
+@c End of snapshot.texi
diff --git a/doc/sparse.texi b/doc/sparse.texi
new file mode 100644
index 0000000..2b07063
--- /dev/null
+++ b/doc/sparse.texi
@@ -0,0 +1,234 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2006, 2014, 2016 Free Software Foundation, Inc.
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+@cindex sparse formats
+@cindex sparse versions
+The notion of sparse file, and the ways of handling it from the point
+of view of @GNUTAR{} user have been described in detail in
+@ref{sparse}. This chapter describes the internal format @GNUTAR{}
+uses to store such files.
+
+The support for sparse files in @GNUTAR{} has a long history. The
+earliest version featuring this support that I was able to find was 1.09,
+released in November, 1990. The format introduced back then is called
+@dfn{old GNU} sparse format and in spite of the fact that its design
+contained many flaws, it was the only format @GNUTAR{} supported
+until version 1.14 (May, 2004), which introduced initial support for
+sparse archives in @acronym{PAX} archives (@pxref{posix}). This
+format was not free from design flaws, either and it was subsequently
+improved in versions 1.15.2 (November, 2005) and 1.15.92 (June,
+2006).
+
+In addition to GNU sparse format, @GNUTAR{} is able to read and
+extract sparse files archived by @command{star}.
+
+The following subsections describe each format in detail.
+
+@menu
+* Old GNU Format::
+* PAX 0:: PAX Format, Versions 0.0 and 0.1
+* PAX 1:: PAX Format, Version 1.0
+@end menu
+
+@node Old GNU Format
+@appendixsubsec Old GNU Format
+
+@cindex sparse formats, Old GNU
+@cindex Old GNU sparse format
+The format introduced in November 1990 (v. 1.09) was
+designed on top of standard @code{ustar} headers in such an
+unfortunate way that some of its fields overwrote fields required by
+POSIX.
+
+An old GNU sparse header is designated by type @samp{S}
+(@code{GNUTYPE_SPARSE}) and has the following layout:
+
+@multitable @columnfractions 0.10 0.10 0.20 0.20 0.40
+@headitem Offset @tab Size @tab Name @tab Data type @tab Contents
+@item 0 @tab 345 @tab @tab N/A @tab Not used.
+@item 345 @tab 12 @tab atime @tab Number @tab @code{atime} of the file.
+@item 357 @tab 12 @tab ctime @tab Number @tab @code{ctime} of the file .
+@item 369 @tab 12 @tab offset @tab Number @tab For
+multivolume archives: the offset of the start of this volume.
+@item 381 @tab 4 @tab @tab N/A @tab Not used.
+@item 385 @tab 1 @tab @tab N/A @tab Not used.
+@item 386 @tab 96 @tab sp @tab @code{sparse_header} @tab (4 entries) File map.
+@item 482 @tab 1 @tab isextended @tab Bool @tab @code{1} if an
+extension sparse header follows, @code{0} otherwise.
+@item 483 @tab 12 @tab realsize @tab Number @tab Real size of the file.
+@end multitable
+
+Each of @code{sparse_header} object at offset 386 describes a single
+data chunk. It has the following structure:
+
+@multitable @columnfractions 0.10 0.10 0.20 0.60
+@headitem Offset @tab Size @tab Data type @tab Contents
+@item 0 @tab 12 @tab Number @tab Offset of the
+beginning of the chunk.
+@item 12 @tab 12 @tab Number @tab Size of the chunk.
+@end multitable
+
+If the member contains more than four chunks, the @code{isextended}
+field of the header has the value @code{1} and the main header is
+followed by one or more @dfn{extension headers}. Each such header has
+the following structure:
+
+@multitable @columnfractions 0.10 0.10 0.20 0.20 0.40
+@headitem Offset @tab Size @tab Name @tab Data type @tab Contents
+@item 0 @tab 21 @tab sp @tab @code{sparse_header} @tab
+(21 entries) File map.
+@item 504 @tab 1 @tab isextended @tab Bool @tab @code{1} if an
+extension sparse header follows, or @code{0} otherwise.
+@end multitable
+
+A header with @code{isextended=0} ends the map.
+
+@node PAX 0
+@appendixsubsec PAX Format, Versions 0.0 and 0.1
+
+@cindex sparse formats, v.0.0
+There are two formats available in this branch. The version @code{0.0}
+is the initial version of sparse format used by @command{tar}
+versions 1.14--1.15.1. The sparse file map is kept in extended
+(@code{x}) PAX header variables:
+
+@table @code
+@vrindex GNU.sparse.size, extended header variable
+@item GNU.sparse.size
+Real size of the stored file;
+
+@item GNU.sparse.numblocks
+@vrindex GNU.sparse.numblocks, extended header variable
+Number of blocks in the sparse map;
+
+@item GNU.sparse.offset
+@vrindex GNU.sparse.offset, extended header variable
+Offset of the data block;
+
+@item GNU.sparse.numbytes
+@vrindex GNU.sparse.numbytes, extended header variable
+Size of the data block.
+@end table
+
+The latter two variables repeat for each data block, so the overall
+structure is like this:
+
+@smallexample
+@group
+GNU.sparse.size=@var{size}
+GNU.sparse.numblocks=@var{numblocks}
+repeat @var{numblocks} times
+ GNU.sparse.offset=@var{offset}
+ GNU.sparse.numbytes=@var{numbytes}
+end repeat
+@end group
+@end smallexample
+
+This format presented the following two problems:
+
+@enumerate 1
+@item
+Whereas the POSIX specification allows a variable to appear multiple
+times in a header, it requires that only the last occurrence be
+meaningful. Thus, multiple occurrences of @code{GNU.sparse.offset} and
+@code{GNU.sparse.numbytes} are conflicting with the POSIX specs.
+
+@item
+Attempting to extract such archives using a third-party's @command{tar}
+results in extraction of sparse files in @emph{condensed form}. If
+the @command{tar} implementation in question does not support POSIX
+format, it will also extract a file containing extension header
+attributes. This file can be used to expand the file to its original
+state. However, posix-aware @command{tar}s will usually ignore the
+unknown variables, which makes restoring the file more
+difficult. @xref{extracting sparse v.0.x, Extraction of sparse
+members in v.0.0 format}, for the detailed description of how to
+restore such members using non-GNU @command{tar}s.
+@end enumerate
+
+@cindex sparse formats, v.0.1
+@GNUTAR{} 1.15.2 introduced sparse format version @code{0.1}, which
+attempted to solve these problems. As its predecessor, this format
+stores sparse map in the extended POSIX header. It retains
+@code{GNU.sparse.size} and @code{GNU.sparse.numblocks} variables, but
+instead of @code{GNU.sparse.offset}/@code{GNU.sparse.numbytes} pairs
+it uses a single variable:
+
+@table @code
+@item GNU.sparse.map
+@vrindex GNU.sparse.map, extended header variable
+Map of non-null data chunks. It is a string consisting of
+comma-separated values "@var{offset},@var{size}[,@var{offset-1},@var{size-1}...]"
+@end table
+
+To address the 2nd problem, the @code{name} field in @code{ustar}
+is replaced with a special name, constructed using the following pattern:
+
+@smallexample
+%d/GNUSparseFile.%p/%f
+@end smallexample
+
+@vrindex GNU.sparse.name, extended header variable
+The real name of the sparse file is stored in the variable
+@code{GNU.sparse.name}. Thus, those @command{tar} implementations
+that are not aware of GNU extensions will at least extract the files
+into separate directories, giving the user a possibility to expand it
+afterwards. @xref{extracting sparse v.0.x, Extraction of sparse
+members in v.0.1 format}, for the detailed description of how to
+restore such members using non-GNU @command{tar}s.
+
+The resulting @code{GNU.sparse.map} string can be @emph{very} long.
+Although POSIX does not impose any limit on the length of a @code{x}
+header variable, this possibly can confuse some @command{tar}s.
+
+@node PAX 1
+@appendixsubsec PAX Format, Version 1.0
+
+@cindex sparse formats, v.1.0
+The version @code{1.0} of sparse format was introduced with @GNUTAR{}
+1.15.92. Its main objective was to make the resulting file
+extractable with little effort even by non-posix aware @command{tar}
+implementations. Starting from this version, the extended header
+preceding a sparse member always contains the following variables that
+identify the format being used:
+
+@table @code
+@item GNU.sparse.major
+@vrindex GNU.sparse.major, extended header variable
+Major version
+
+@item GNU.sparse.minor
+@vrindex GNU.sparse.minor, extended header variable
+Minor version
+@end table
+
+The @code{name} field in @code{ustar} header contains a special name,
+constructed using the following pattern:
+
+@smallexample
+%d/GNUSparseFile.%p/%f
+@end smallexample
+
+@vrindex GNU.sparse.name, extended header variable, in v.1.0
+@vrindex GNU.sparse.realsize, extended header variable
+The real name of the sparse file is stored in the variable
+@code{GNU.sparse.name}. The real size of the file is stored in the
+variable @code{GNU.sparse.realsize}.
+
+The sparse map itself is stored in the file data block, preceding the actual
+file data. It consists of a series of octal numbers of arbitrary length, delimited
+by newlines. The map is padded with nulls to the nearest block boundary.
+
+The first number gives the number of entries in the map. Following are map entries,
+each one consisting of two numbers giving the offset and size of the
+data block it describes.
+
+The format is designed in such a way that non-posix aware @command{tar}s and @command{tar}s not
+supporting @code{GNU.sparse.*} keywords will extract each sparse file
+in its condensed form with the file map prepended and will place it
+into a separate directory. Then, using a simple program it would be
+possible to expand the file to its original form even without @GNUTAR{}.
+@xref{Sparse Recovery}, for the detailed information on how to extract
+sparse members without @GNUTAR{}.
diff --git a/doc/stamp-vti b/doc/stamp-vti
new file mode 100644
index 0000000..eacd45d
--- /dev/null
+++ b/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 14 April 2016
+@set UPDATED-MONTH April 2016
+@set EDITION 1.29
+@set VERSION 1.29
diff --git a/doc/tar-snapshot-edit.texi b/doc/tar-snapshot-edit.texi
new file mode 100644
index 0000000..b93639f
--- /dev/null
+++ b/doc/tar-snapshot-edit.texi
@@ -0,0 +1,91 @@
+@c This is part of the paxutils manual.
+@c Copyright (C) 2007, 2014, 2016 Free Software Foundation, Inc.
+@c This file is distributed under GFDL 1.1 or any later version
+@c published by the Free Software Foundation.
+
+@cindex Device numbers, changing
+@cindex snapshot files, editing
+@cindex snapshot files, fixing device numbers
+ Various situations can cause device numbers to change: upgrading your
+kernel version, reconfiguring your hardware, loading kernel modules in a
+different order, using virtual volumes that are assembled dynamically
+(such as with @acronym{LVM} or @acronym{RAID}), hot-plugging drives
+(e.g. external USB or Firewire drives), etc. In the majority of
+cases this change is unnoticed by the users. However, it influences
+@command{tar} incremental backups: the device number is stored in tar
+snapshot files (@pxref{Snapshot Files}) and is used to determine whether
+the file has changed since the last backup. If the device numbers
+change for some reason, by default the next backup you run will be a
+full backup.
+
+
+@pindex tar-snapshot-edit
+ To minimize the impact in these cases, GNU @command{tar} comes with
+the @command{tar-snapshot-edit} utility for inspecting and updating
+device numbers in snapshot files. (The utility, written by
+Dustin J.@: Mitchell, is also available from the
+@uref{http://www.gnu.org/@/software/@/tar/@/utils/@/tar-snapshot-edit.html,
+@GNUTAR{} home page}.)
+
+ To obtain a summary of the device numbers found in the snapshot file, run
+
+@smallexample
+$ @kbd{tar-snapshot-edit @var{snapfile}}
+@end smallexample
+
+@noindent
+where @var{snapfile} is the name of the snapshot file (you can supply as many
+files as you wish in a single command line). You can then compare the
+numbers across snapshot files, or against those currently in use on the
+live filesystem (using @command{ls -l} or @command{stat}).
+
+ Assuming the device numbers have indeed changed, it's often possible
+to simply tell @GNUTAR{} to ignore the device number when processing the
+incremental snapshot files for these backups, using the
+@option{--no-check-device} option (@pxref{device numbers}).
+
+ Alternatively, you can use the @command{tar-edit-snapshot} script's
+@option{-r} option to update all occurrences of the given device
+number in the snapshot file(s). It takes a single argument
+of the form
+@samp{@var{olddev}-@var{newdev}}, where @var{olddev} is the device number
+used in the snapshot file, and @var{newdev} is the corresponding new device
+number. Both numbers may be specified in hex (e.g., @samp{0xfe01}),
+decimal (e.g., @samp{65025}), or as a major:minor number pair (e.g.,
+@samp{254:1}). To change several device numbers at once, specify them
+in a single comma-separated list, as in
+@option{-r 0x3060-0x4500,0x307-0x4600}.
+
+Before updating the snapshot file, it is a good idea to create a backup
+copy of it. This is accomplished by @samp{-b} option. The name of the
+backup file is obtained by appending @samp{~} to the original file name.
+
+An example session:
+@smallexample
+$ @kbd{tar-snapshot-edit root_snap.0 boot_snap.0}
+File: root_snap.0
+ Detected snapshot file version: 2
+
+ Device 0x0000 occurs 1 times.
+ Device 0x0003 occurs 1 times.
+ Device 0x0005 occurs 1 times.
+ Device 0x0013 occurs 1 times.
+ Device 0x6801 occurs 1 times.
+ Device 0x6803 occurs 6626 times.
+ Device 0xfb00 occurs 1 times.
+
+File: boot_snap.0
+ Detected snapshot file version: 2
+
+ Device 0x6801 occurs 3 times.
+$ @kbd{tar-snapshot-edit -b -r 0x6801-0x6901,0x6803-0x6903 root_snap.0 boot_snap.0}
+File: root_snap.0
+ Detected snapshot file version: 2
+
+ Updated 6627 records.
+
+File: boot_snap.0
+ Detected snapshot file version: 2
+
+ Updated 3 records.
+@end smallexample
diff --git a/doc/tar.1 b/doc/tar.1
new file mode 100644
index 0000000..b72f28e
--- /dev/null
+++ b/doc/tar.1
@@ -0,0 +1,1319 @@
+.\" This file is part of GNU tar. -*- nroff -*-
+.\" Copyright 2013-2014, 2016 Free Software Foundation, Inc.
+.\"
+.\" GNU tar is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 3 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" GNU tar is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
+.TH TAR 1 "March 23, 2016" "TAR" "GNU TAR Manual"
+.SH NAME
+tar \- an archiving utility
+.SH SYNOPSIS
+.SS Traditional usage
+\fBtar\fR {\fBA\fR|\fBc\fR|\fBd\fR|\fBr\fR|\fBt\fR|\fBu\fR|\fBx\fR}\
+[\fBGnSkUWOmpsMBiajJzZhPlRvwo\fR] [\fIARG\fR...]
+.SS UNIX-style usage
+.sp
+\fBtar\fR \fB\-A\fR [\fIOPTIONS\fR] \fIARCHIVE\fR \fIARCHIVE\fR
+.sp
+\fBtar\fR \fB\-c\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-d\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-t\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIMEMBER\fR...]
+.sp
+\fBtar\fR \fB\-r\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-u\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-x\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIMEMBER\fR...]
+.SS GNU-style usage
+.sp
+\fBtar\fR {\fB\-\-catenate\fR|\fB\-\-concatenate\fR} [\fIOPTIONS\fR] \fIARCHIVE\fR \fIARCHIVE\fR
+.sp
+\fBtar\fR \fB\-\-create\fR [\fB\-\-file\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR {\fB\-\-diff\fR|\fB\-\-compare\fR} [\fB\-\-file\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-\-delete\fR [\fB\-\-file\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIMEMBER\fR...]
+.sp
+\fBtar\fR \fB\-\-append\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-\-list\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIMEMBER\fR...]
+.sp
+\fBtar\fR \fB\-\-test\-label\fR [\fB\-\-file\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fILABEL\fR...]
+.sp
+\fBtar\fR \fB\-\-update\fR [\fB\-\-file\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR \fB\-\-update\fR [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIFILE\fR...]
+.sp
+\fBtar\fR {\fB\-\-extract\fR|\fB\-\-get\fR} [\fB\-f\fR \fIARCHIVE\fR] [\fIOPTIONS\fR] [\fIMEMBER\fR...]
+.SH NOTE
+This manpage is a short description of GNU \fBtar\fR. For a detailed
+discussion, including examples and usage recommendations, refer to the
+\fBGNU Tar Manual\fR available in texinfo format. If the \fBinfo\fR
+reader and the tar documentation are properly installed on your
+system, the command
+.PP
+.RS +4
+.B info tar
+.RE
+.PP
+should give you access to the complete manual.
+.PP
+You can also view the manual using the info mode in
+.BR emacs (1),
+or find it in various formats online at
+.PP
+.RS +4
+.B http://www.gnu.org/software/tar/manual
+.RE
+.PP
+If any discrepancies occur between this manpage and the
+\fBGNU Tar Manual\fR, the later shall be considered the authoritative
+source.
+.SH DESCRIPTION
+GNU
+.B tar
+is an archiving program designed to store multiple files in a single
+file (an \fBarchive\fR), and to manipulate such archives. The archive
+can be either a regular file or a device (e.g. a tape drive, hence the name
+of the program, which stands for \fBt\fRape \fBar\fRchiver), which can
+be located either on the local or on a remote machine.
+.PP
+
+.SS Option styles
+Options to GNU \fBtar\fR can be given in three different styles.
+In
+.BR "traditional style" ,
+the first argument is a cluster of option letters and all subsequent
+arguments supply arguments to those options that require them. The
+arguments are read in the same order as the option letters. Any
+command line words that remain after all options has been processed
+are treated as non-optional arguments: file or archive member names.
+.PP
+For example, the \fBc\fR option requires creating the archive, the
+\fBv\fR option requests the verbose operation, and the \fBf\fR option
+takes an argument that sets the name of the archive to operate upon.
+The following command, written in the traditional style, instructs tar
+to store all files from the directory
+.B /etc
+into the archive file
+.B etc.tar
+verbosely listing the files being archived:
+.PP
+.EX
+.B tar cfv a.tar /etc
+.EE
+.PP
+In
+.BR "UNIX " or " short-option style" ,
+each option letter is prefixed with a single dash, as in other command
+line utilities. If an option takes argument, the argument follows it,
+either as a separate command line word, or immediately following the
+option. However, if the option takes an \fBoptional\fR argument, the
+argument must follow the option letter without any intervening
+whitespace, as in \fB\-g/tmp/snar.db\fR.
+.PP
+Any number of options not taking arguments can be
+clustered together after a single dash, e.g. \fB\-vkp\fR. Options
+that take arguments (whether mandatory or optional), can appear at
+the end of such a cluster, e.g. \fB\-vkpf a.tar\fR.
+.PP
+The example command above written in the
+.B short-option style
+could look like:
+.PP
+.EX
+.B tar -cvf a.tar /etc
+or
+.B tar -c -v -f a.tar /etc
+.EE
+.PP
+In
+.BR "GNU " or " long-option style" ,
+each option begins with two dashes and has a meaningful name,
+consisting of lower-case letters and dashes. When used, the long
+option can be abbreviated to its initial letters, provided that
+this does not create ambiguity. Arguments to long options are
+supplied either as a separate command line word, immediately following
+the option, or separated from the option by an equals sign with no
+intervening whitespace. Optional arguments must always use the latter
+method.
+.PP
+Here are several ways of writing the example command in this style:
+.PP
+.EX
+.B tar --create --file a.tar --verbose /etc
+.EE
+or (abbreviating some options):
+.EX
+.B tar --cre --file=a.tar --verb /etc
+.EE
+.PP
+The options in all three styles can be intermixed, although doing so
+with old options is not encouraged.
+.SS Operation mode
+The options listed in the table below tell GNU \fBtar\fR what
+operation it is to perform. Exactly one of them must be given.
+Meaning of non-optional arguments depends on the operation mode
+requested.
+.TP
+\fB\-A\fR, \fB\-\-catenate\fR, \fB\-\-concatenate\fR
+Append archive to the end of another archive. The arguments are
+treated as the names of archives to append. All archives must be of
+the same format as the archive they are appended to, otherwise the
+resulting archive might be unusable with non-GNU implementations of
+\fBtar\fR. Notice also that when more than one archive is given, the
+members from archives other than the first one will be accessible in
+the resulting archive only if using the \fB\-i\fR
+(\fB\-\-ignore\-zeros\fR) option.
+
+Compressed archives cannot be concatenated.
+.TP
+\fB\-c\fR, \fB\-\-create\fR
+Create a new archive. Arguments supply the names of the files to be
+archived. Directories are archived recursively, unless the
+\fB\-\-no\-recursion\fR option is given.
+.TP
+\fB\-d\fR, \fB\-\-diff\fR, \fB\-\-compare\fR
+Find differences between archive and file system. The arguments are
+optional and specify archive members to compare. If not given, the
+current working directory is assumed.
+.TP
+\fB\-\-delete\fR
+Delete from the archive. The arguments supply names of the archive
+members to be removed. At least one argument must be given.
+
+This option does not operate on compressed archives. There is no
+short option equivalent.
+.TP
+\fB\-r\fR, \fB\-\-append\fR
+Append files to the end of an archive. Arguments have the same
+meaning as for \fB\-c\fR (\fB\-\-create\fR).
+.TP
+\fB\-t\fR, \fB\-\-list\fR
+List the contents of an archive. Arguments are optional. When given,
+they specify the names of the members to list.
+.TP
+\fB\-\-test\-label
+Test the archive volume label and exit. When used without arguments,
+it prints the volume label (if any) and exits with status \fB0\fR.
+When one or more command line arguments are given.
+.B tar
+compares the volume label with each argument. It exits with code
+\fB0\fR if a match is found, and with code \fB1\fR otherwise. No
+output is displayed, unless used together with the \fB\-v\fR
+(\fB\-\-verbose\fR) option.
+
+There is no short option equivalent for this option.
+.TP
+\fB\-u\fR, \fB\-\-update\fR
+Append files which are newer than the corresponding copy in the
+archive. Arguments have the same meaning as with \fB\-c\fR and
+\fB\-r\fR options.
+.TP
+\fB\-x\fR, \fB\-\-extract\fR, \fB\-\-get\fR
+Extract files from an archive. Arguments are optional. When given,
+they specify names of the archive members to be extracted.
+.TP
+.TP
+\fB\-\-show\-defaults\fR
+Show built-in defaults for various \fBtar\fR options and exit. No
+arguments are allowed.
+.TP
+\fB\-?\fR, \fB\-\-help
+Display a short option summary and exit. No arguments allowed.
+.TP
+\fB\-\-usage\fR
+Display a list of available options and exit. No arguments allowed.
+.TP
+\fB\-\-version\fR
+Print program version and copyright information and exit.
+.SH OPTIONS
+.SS Operation modifiers
+.TP
+\fB\-\-check\-device\fR
+Check device numbers when creating incremental archives (default).
+.TP
+\fB\-g\fR, \fB\-\-listed\-incremental\fR=\fIFILE\fR
+Handle new GNU-format incremental backups. \fIFILE\fR is the name of
+a \fBsnapshot file\fR, where tar stores additional information which
+is used to decide which files changed since the previous incremental
+dump and, consequently, must be dumped again. If \fIFILE\fR does not
+exist when creating an archive, it will be created and all files will
+be added to the resulting archive (the \fBlevel 0\fR dump). To create
+incremental archives of non-zero level \fBN\fR, create a copy of the
+snapshot file created during the level \fBN-1\fR, and use it as
+\fIFILE\fR.
+
+When listing or extracting, the actual contents of \fIFILE\fR is not
+inspected, it is needed only due to syntactical requirements. It is
+therefore common practice to use \fB/dev/null\fR in its place.
+.TP
+\fB\-\-hole\-detection\fR=\fIMETHOD\fR
+Use \fIMETHOD\fR to detect holes in sparse files. This option implies
+\fB\-\-sparse\fR. Valid values for \fIMETHOD\fR are \fBseek\fR and
+\fBraw\fR. Default is \fBseek\fR with fallback to \fBraw\fR when not
+applicable.
+.TP
+\fB\-G\fR, \fB\-\-incremental\fR
+Handle old GNU-format incremental backups.
+.TP
+\fB\-\-ignore\-failed\-read\fR
+Do not exit with nonzero on unreadable files.
+.TP
+\fB\-\-level\fR=\fINUMBER\fR
+Set dump level for created listed-incremental archive. Currently only
+\fB\-\-level=0\fR is meaningful: it instructs \fBtar\fR to truncate
+the snapshot file before dumping, thereby forcing a level 0 dump.
+.TP
+\fB\-n\fR, \fB\-\-seek\fR
+Assume the archive is seekable. Normally \fBtar\fR determines
+automatically whether the archive can be seeked or not. This option
+is intended for use in cases when such recognition fails. It takes
+effect only if the archive is open for reading (e.g. with
+.B \-\-list
+or
+.B \-\-extract
+options).
+.TP
+\fB\-\-no\-check\-device\fR
+Do not check device numbers when creating incremental archives.
+.TP
+\fB\-\-no\-seek\fR
+Assume the archive is not seekable.
+.TP
+\fB\-\-occurrence\fR[=\fIN\fR]
+Process only the \fIN\fRth occurrence of each file in the
+archive. This option is valid only when used with one of the
+following subcommands: \fB\-\-delete\fR, \fB\-\-diff\fR,
+\fB\-\-extract\fR or \fB\-\-list\fR and when a list of files is given
+either on the command line or via the \fB\-T\fR option. The default
+\fIN\fR is \fB1\fR.
+.TP
+\fB\-\-restrict\fR
+Disable the use of some potentially harmful options.
+.TP
+\fB\-\-sparse\-version\fR=\fIMAJOR\fR[.\fIMINOR\fR]
+Set version of the sparse format to use (implies \fB\-\-sparse\fR).
+This option implies
+.BR \-\-sparse .
+Valid argument values are
+.BR 0.0 ,
+.BR 0.1 ", and"
+.BR 1.0 .
+For a detailed discussion of sparse formats, refer to the \fBGNU Tar
+Manual\fR, appendix \fBD\fR, "\fBSparse Formats\fR". Using \fBinfo\fR
+reader, it can be accessed running the following command:
+.BR "info tar 'Sparse Formats'" .
+.TP
+\fB\-S\fR, \fB\-\-sparse\fR
+Handle sparse files efficiently. Some files in the file system may
+have segments which were actually never written (quite often these are
+database files created by such systems as \fBDBM\fR). When given this
+option, \fBtar\fR attempts to determine if the file is sparse prior to
+archiving it, and if so, to reduce the resulting archive size by not
+dumping empty parts of the file.
+.SS Overwrite control
+These options control \fBtar\fR actions when extracting a file over
+an existing copy on disk.
+.TP
+\fB\-k\fR, \fB\-\-keep\-old\-files\fR
+Don't replace existing files when extracting.
+.TP
+\fB\-\-keep\-newer\-files\fR
+Don't replace existing files that are newer than their archive copies.
+.TP
+\fB\-\-no\-overwrite\-dir\fR
+Preserve metadata of existing directories.
+.TP
+\fB\-\-one\-top\-level\fR[\fB=\fIDIR\fR]
+Extract all files into \fIDIR\fR, or, if used without argument, into a
+subdirectory named by the base name of the archive (minus standard
+compression suffixes recognizable by \fB\-\-auto\-compress).
+.TP
+\fB\-\-overwrite\fR
+Overwrite existing files when extracting.
+.TP
+\fB\-\-overwrite\-dir\fR
+Overwrite metadata of existing directories when extracting (default).
+.TP
+\fB\-\-recursive\-unlink\fR
+Recursively remove all files in the directory prior to extracting it.
+.TP
+\fB\-\-remove\-files\fR
+Remove files from disk after adding them to the archive.
+.TP
+\fB\-\-skip\-old\-files
+Don't replace existing files when extracting, silently skip over them.
+.TP
+\fB\-U\fR, \fB\-\-unlink\-first\fR
+Remove each file prior to extracting over it.
+.TP
+\fB\-W\fR, \fB\-\-verify\fR
+Verify the archive after writing it.
+.SS Output stream selection
+.TP
+\fB\-\-ignore\-command\-error\fR
+.TP
+Ignore subprocess exit codes.
+.TP
+\fB\-\-no\-ignore\-command\-error\fR
+Treat non-zero exit codes of children as error (default).
+.TP
+\fB\-O\fR, \fB\-\-to\-stdout\fR
+Extract files to standard output.
+.TP
+\fB\-\-to\-command\fR=\fICOMMAND\fR
+Pipe extracted files to \fICOMMAND\fR. The argument is the pathname
+of an external program, optionally with command line arguments. The
+program will be invoked and the contents of the file being extracted
+supplied to it on its standard output. Additional data will be
+supplied via the following environment variables:
+.RS
+.TP
+.B TAR_FILETYPE
+Type of the file. It is a single letter with the following meaning:
+.sp
+.nf
+.ta 8n 20n
+ f Regular file
+ d Directory
+ l Symbolic link
+ h Hard link
+ b Block device
+ c Character device
+.fi
+
+Currently only regular files are supported.
+.TP
+.B TAR_MODE
+File mode, an octal number.
+.TP
+.B TAR_FILENAME
+The name of the file.
+.TP
+.B TAR_REALNAME
+Name of the file as stored in the archive.
+.TP
+.B TAR_UNAME
+Name of the file owner.
+.TP
+.B TAR_GNAME
+Name of the file owner group.
+.TP
+.B TAR_ATIME
+Time of last access. It is a decimal number, representing seconds
+since the Epoch. If the archive provides times with nanosecond
+precision, the nanoseconds are appended to the timestamp after a
+decimal point.
+.TP
+.B TAR_MTIME
+Time of last modification.
+.TP
+.B TAR_CTIME
+Time of last status change.
+.TP
+.B TAR_SIZE
+Size of the file.
+.TP
+.B TAR_UID
+UID of the file owner.
+.TP
+.B TAR_GID
+GID of the file owner.
+.RE
+.RS
+
+Additionally, the following variables contain information about
+\fBtar\fR operation mode and the archive being processed:
+.TP
+.B TAR_VERSION
+GNU \fBtar\fR version number.
+.TP
+.B TAR_ARCHIVE
+The name of the archive \fBtar\fR is processing.
+.TP
+.B TAR_BLOCKING_FACTOR
+Current blocking factor, i.e. number of 512-byte blocks in a record.
+.TP
+.B TAR_VOLUME
+Ordinal number of the volume \fBtar\fR is processing (set if
+reading a multi-volume archive).
+.TP
+.B TAR_FORMAT
+Format of the archive being processed. One of:
+.BR gnu ,
+.BR oldgnu ,
+.BR posix ,
+.BR ustar ,
+.BR v7 .
+.B TAR_SUBCOMMAND
+A short option (with a leading dash) describing the operation \fBtar\fR is
+executing.
+.RE
+.SS Handling of file attributes
+.TP
+\fB\-\-atime\-preserve\fR[=\fIMETHOD\fR]
+Preserve access times on dumped files, either by restoring the times
+after reading (\fIMETHOD\fR=\fBreplace\fR, this is the default) or by
+not setting the times in the first place (\fIMETHOD\fR=\fBsystem\fR)
+.TP
+\fB\-\-delay\-directory\-restore\fR
+Delay setting modification times and permissions of extracted
+directories until the end of extraction. Use this option when
+extracting from an archive which has unusual member ordering.
+.TP
+\fB\-\-group\fR=\fINAME\fR[:\fIGID\fR]
+Force \fINAME\fR as group for added files. If \fIGID\fR is not
+supplied, \fINAME\fR can be either a user name or numeric GID. In
+this case the missing part (GID or name) will be inferred from the
+current host's group database.
+
+When used with \fB\-\-group\-map\fR=\fIFILE\fR, affects only those
+files whose owner group is not listed in \fIFILE\fR.
+.TP
+\fB\-\-group\-map\fR=\fIFILE\fR
+Read group translation map from \fIFILE\fR. Empty lines are ignored.
+Comments are introduced with \fB#\fR sign and extend to the end of line.
+Each non-empty line in \fIFILE\fR defines translation for a single
+group. It must consist of two fields, delimited by any amount of whitespace:
+
+.EX
+\fIOLDGRP\fR \fINEWGRP\fR[\fB:\fINEWGID\fR]
+.EE
+
+\fIOLDGRP\fR is either a valid group name or a GID prefixed with
+\fB+\fR. Unless \fINEWGID\fR is supplied, \fINEWGRP\fR must also be
+either a valid group name or a \fB+\fIGID\fR. Otherwise, both
+\fINEWGRP\fR and \fINEWGID\fR need not be listed in the system group
+database.
+
+As a result, each input file with owner group \fIOLDGRP\fR will be
+stored in archive with owner group \fINEWGRP\fR and GID \fINEWGID\fR.
+.TP
+\fB\-\-mode\fR=\fICHANGES\fR
+Force symbolic mode \fICHANGES\fR for added files.
+.TP
+\fB\-\-mtime\fR=\fIDATE-OR-FILE\fR
+Set mtime for added files. \fIDATE-OR-FILE\fR is either a date/time
+in almost arbitrary format, or the name of an existing file. In the
+latter case the mtime of that file will be used.
+.TP
+\fB\-m\fR, \fB\-\-touch\fR
+Don't extract file modified time.
+.TP
+\fB\-\-no\-delay\-directory\-restore\fR
+Cancel the effect of the prior \fB\-\-delay\-directory\-restore\fR option.
+.TP
+\fB\-\-no\-same\-owner\fR
+Extract files as yourself (default for ordinary users).
+.TP
+\fB\-\-no\-same\-permissions\fR
+Apply the user's umask when extracting permissions from the archive
+(default for ordinary users).
+.TP
+\fB\-\-numeric\-owner\fR
+Always use numbers for user/group names.
+.TP
+\fB\-\-owner\fR=\fINAME\fR[:\fIUID\fR]
+Force \fINAME\fR as owner for added files. If \fIUID\fR is not
+supplied, \fINAME\fR can be either a user name or numeric UID. In
+this case the missing part (UID or name) will be inferred from the
+current host's user database.
+
+When used with \fB\-\-owner\-map\fR=\fIFILE\fR, affects only those
+files whose owner is not listed in \fIFILE\fR.
+.TP
+\fB\-\-owner\-map\fR=\fIFILE\fR
+Read owner translation map from \fIFILE\fR. Empty lines are ignored.
+Comments are introduced with \fB#\fR sign and extend to the end of line.
+Each non-empty line in \fIFILE\fR defines translation for a single
+UID. It must consist of two fields, delimited by any amount of whitespace:
+
+.EX
+\fIOLDUSR\fR \fINEWUSR\fR[\fB:\fINEWUID\fR]
+.EE
+
+\fIOLDUSR\fR is either a valid user name or a UID prefixed with
+\fB+\fR. Unless \fINEWUID\fR is supplied, \fINEWUSR\fR must also be
+either a valid user name or a \fB+\fIUID\fR. Otherwise, both
+\fINEWUSR\fR and \fINEWUID\fR need not be listed in the system user
+database.
+
+As a result, each input file owned by \fIOLDUSR\fR will be
+stored in archive with owner name \fINEWUSR\fR and UID \fINEWUID\fR.
+.TP
+\fB\-p\fR, \fB\-\-preserve\-permissions\fR, \fB\-\-same\-permissions\fR
+extract information about file permissions (default for superuser)
+.TP
+\fB\-\-preserve\fR
+Same as both \fB\-p\fR and \fB\-s\fR.
+.TP
+\fB\-\-same\-owner\fR
+Try extracting files with the same ownership as exists in the archive
+(default for superuser).
+.TP
+\fB\-s\fR, \fB\-\-preserve\-order\fR, \fB\-\-same\-order\fR
+Sort names to extract to match archive
+.TP
+\fB\-\-sort=\fIORDER\fR
+When creating an archive, sort directory entries according to
+\fIORDER\fR, which is one of
+.BR none ,
+.BR name ", or"
+.BR inode .
+
+The default is \fB\-\-sort=none\fR, which stores archive members in
+the same order as returned by the operating system.
+
+Using \fB\-\-sort=name\fR ensures the member ordering in the created archive
+is uniform and reproducible.
+
+Using \fB\-\-sort=inode\fR reduces the number of disk seeks made when
+creating the archive and thus can considerably speed up archivation.
+This sorting order is supported only if the underlying system provides
+the necessary information.
+.SS Extended file attributes
+.TP
+.B \-\-acls
+Enable POSIX ACLs support.
+.TP
+.B \-\-no\-acls
+Disable POSIX ACLs support.
+.TP
+.B \-\-selinux
+Enable SELinux context support.
+.TP
+.B \-\-no-selinux
+Disable SELinux context support.
+.TP
+.B \-\-xattrs
+Enable extended attributes support.
+.TP
+.B \-\-no\-xattrs
+Disable extended attributes support.
+.TP
+.BI \-\-xattrs\-exclude= PATTERN
+Specify the exclude pattern for xattr keys. \fIPATTERN\fR is a POSIX
+regular expression, e.g. \fB\-\-xattrs\-exclude='^user\.'\fR, to exclude
+attributes from the user namespace.
+.TP
+.BI \-\-xattrs\-include= PATTERN
+Specify the include pattern for xattr keys. \fIPATTERN\fR is a POSIX
+regular expression.
+.SS Device selection and switching
+.TP
+\fB\-f\fR, \fB\-\-file\fR=\fIARCHIVE\fR
+Use archive file or device \fIARCHIVE\fR. If this option is not
+given, \fBtar\fR will first examine the environment variable `TAPE'.
+If it is set, its value will be used as the archive name. Otherwise,
+\fBtar\fR will assume the compiled-in default. The default
+value can be inspected either using the
+.B \-\-show\-defaults
+option, or at the end of the \fBtar \-\-help\fR output.
+
+An archive name that has a colon in it specifies a file or device on a
+remote machine. The part before the colon is taken as the machine
+name or IP address, and the part after it as the file or device
+pathname, e.g.:
+
+.EX
+--file=remotehost:/dev/sr0
+.EE
+
+An optional username can be prefixed to the hostname, placing a \fB@\fR
+sign between them.
+
+By default, the remote host is accessed via the
+.BR rsh (1)
+command. Nowadays it is common to use
+.BR ssh (1)
+instead. You can do so by giving the following command line option:
+
+.EX
+--rsh-command=/usr/bin/ssh
+.EE
+
+The remote machine should have the
+.BR rmt (8)
+command installed. If its pathname does not match \fBtar\fR's
+default, you can inform \fBtar\fR about the correct pathname using the
+.B \-\-rmt\-command
+option.
+.TP
+\fB\-\-force\-local\fR
+Archive file is local even if it has a colon.
+.TP
+\fB\-F\fR, \fB\-\-info\-script\fR=\fICOMMAND\fR, \fB\-\-new\-volume\-script\fR=\fICOMMAND\fR
+Run \fICOMMAND\fR at the end of each tape (implies \fB\-M\fR). The
+command can include arguments. When started, it will inherit \fBtar\fR's
+environment plus the following variables:
+.RS
+.TP
+.B TAR_VERSION
+GNU \fBtar\fR version number.
+.TP
+.B TAR_ARCHIVE
+The name of the archive \fBtar\fR is processing.
+.TP
+.B TAR_BLOCKING_FACTOR
+Current blocking factor, i.e. number of 512-byte blocks in a record.
+.TP
+.B TAR_VOLUME
+Ordinal number of the volume \fBtar\fR is processing (set if
+reading a multi-volume archive).
+.TP
+.B TAR_FORMAT
+Format of the archive being processed. One of:
+.BR gnu ,
+.BR oldgnu ,
+.BR posix ,
+.BR ustar ,
+.BR v7 .
+.TP
+.B TAR_SUBCOMMAND
+A short option (with a leading dash) describing the operation \fBtar\fR is
+executing.
+.TP
+.B TAR_FD
+File descriptor which can be used to communicate the new volume name
+to
+.BR tar .
+.RE
+.RS
+
+If the info script fails, \fBtar\fR exits; otherwise, it begins writing
+the next volume.
+.RE
+.TP
+\fB\-L\fR, \fB\-\-tape\-length\fR=\fIN\fR
+Change tape after writing \fIN\fRx1024 bytes. If \fIN\fR is followed
+by a size suffix (see the subsection
+.B Size suffixes
+below), the suffix specifies the multiplicative factor to be used
+instead of 1024.
+
+This option implies
+.BR \-M .
+.TP
+\fB\-M\fR, \fB\-\-multi\-volume\fR
+Create/list/extract multi-volume archive.
+.TP
+\fB\-\-rmt\-command\fR=\fICOMMAND\fR
+Use \fICOMMAND\fR instead of \fBrmt\fR when accessing remote
+archives. See the description of the
+.B \-f
+option, above.
+.TP
+\fB\-\-rsh\-command\fR=\fICOMMAND\fR
+Use \fICOMMAND\fR instead of \fBrsh\fR when accessing remote
+archives. See the description of the
+.B \-f
+option, above.
+.TP
+\fB\-\-volno\-file\fR=\fIFILE\fR
+When this option is used in conjunction with
+.BR \-\-multi\-volume ,
+.B tar
+will keep track of which volume of a multi-volume archive it is
+working in \fIFILE\fR.
+.SS Device blocking
+.TP
+\fB\-b\fR, \fB\-\-blocking\-factor\fR=\fIBLOCKS\fR
+Set record size to \fIBLOCKS\fRx\fB512\fR bytes.
+.TP
+\fB\-B\fR, \fB\-\-read\-full\-records\fR
+When listing or extracting, accept incomplete input records after
+end-of-file marker.
+.TP
+\fB\-i\fR, \fB\-\-ignore\-zeros\fR
+Ignore zeroed blocks in archive. Normally two consecutive 512-blocks
+filled with zeroes mean EOF and tar stops reading after encountering
+them. This option instructs it to read further and is useful when
+reading archives created with the \fB\-A\fR option.
+.TP
+\fB\-\-record\-size\fR=\fINUMBER\fR
+Set record size. \fINUMBER\fR is the number of bytes per record. It
+must be multiple of \fB512\fR. It can can be suffixed with a \fBsize
+suffix\fR, e.g. \fB\-\-record-size=10K\fR, for 10 Kilobytes. See the
+subsection
+.BR "Size suffixes" ,
+for a list of valid suffixes.
+.SS Archive format selection
+.TP
+\fB\-H\fR, \fB\-\-format\fR=\fIFORMAT\fR
+Create archive of the given format. Valid formats are:
+.RS
+.TP
+.B gnu
+GNU tar 1.13.x format
+.TP
+.B oldgnu
+GNU format as per tar <= 1.12.
+.TP
+\fBpax\fR, \fBposix\fR
+POSIX 1003.1-2001 (pax) format.
+.TP
+.B ustar
+POSIX 1003.1-1988 (ustar) format.
+.TP
+.B v7
+Old V7 tar format.
+.RE
+.TP
+\fB\-\-old\-archive\fR, \fB\-\-portability\fR
+Same as \fB\-\-format=v7\fR.
+.TP
+\fB\-\-pax\-option\fR=\fIkeyword\fR[[:]=\fIvalue\fR][,\fIkeyword\fR[[:]=\fIvalue\fR]]...
+Control pax keywords when creating \fBPAX\fR archives (\fB\-H
+pax\fR). This option is equivalent to the \fB\-o\fR option of the
+.BR pax (1) utility.
+.TP
+\fB\-\-posix\fR
+Same as \fB\-\-format=posix\fR.
+.TP
+\fB\-V\fR, \fB\-\-label\fR=\fITEXT\fR
+Create archive with volume name \fITEXT\fR. If listing or extracting,
+use \fITEXT\fR as a globbing pattern for volume name.
+.SS Compression options
+.TP
+\fB\-a\fR, \fB\-\-auto\-compress\fR
+Use archive suffix to determine the compression program.
+.TP
+\fB\-I\fR, \fB\-\-use\-compress\-program\fI=\fICOMMAND\fR
+Filter data through \fICOMMAND\fR. It must accept the \fB\-d\fR
+option, for decompression. The argument can contain command line
+options.
+.TP
+\fB\-j\fR, \fB\-\-bzip2\fR
+Filter the archive through
+.BR bzip2 (1).
+.TP
+\fB\-J\fR, \fB\-\-xz\fR
+Filter the archive through
+.BR xz (1).
+.TP
+\fB\-\-lzip\fR
+Filter the archive through
+.BR lzip (1).
+.TP
+\fB\-\-lzma\fR
+Filter the archive through
+.BR lzma (1).
+.TP
+\fB\-\-lzop\fR
+Filter the archive through
+.BR lzop (1).
+.TP
+\fB\-\-no\-auto\-compress\fR
+Do not use archive suffix to determine the compression program.
+.TP
+\fB\-z\fR, \fB\-\-gzip\fR, \fB\-\-gunzip\fR, \fB\-\-ungzip\fR
+Filter the archive through
+.BR gzip (1).
+.TP
+\fB\-Z\fR, \fB\-\-compress\fR, \fB\-\-uncompress\fR
+Filter the archive through
+.BR compress (1).
+.SS Local file selection
+.TP
+\fB\-\-add\-file\fR=\fIFILE\fR
+Add \fIFILE\fR to the archive (useful if its name starts with a dash).
+.TP
+\fB\-\-backup\fR[=\fICONTROL\fR]
+Backup before removal. The \fICONTROL\fR argument, if supplied,
+controls the backup policy. Its valid values are:
+.RS
+.TP
+.BR none ", " off
+Never make backups.
+.TP
+.BR t ", " numbered
+Make numbered backups.
+.TP
+.BR nil ", " existing
+Make numbered backups if numbered backups exist, simple backups otherwise.
+.TP
+.BR never ", " simple
+Always make simple backups
+.RS
+.RE
+
+If \fICONTROL\fR is not given, the value is taken from the
+.B VERSION_CONTROL
+environment variable. If it is not set, \fBexisting\fR is assumed.
+.RE
+.TP
+\fB\-C\fR, \fB\-\-directory\fR=\fIDIR\fR
+Change to \fIDIR\fR before performing any operations. This option is
+order-sensitive, i.e. it affects all options that follow.
+.TP
+\fB\-\-exclude\fR=\fIPATTERN\fR
+Exclude files matching \fIPATTERN\fR, a
+.BR glob (3)-style
+wildcard pattern.
+.TP
+\fB\-\-exclude\-backups\fR
+Exclude backup and lock files.
+.TP
+\fB\-\-exclude\-caches\fR
+Exclude contents of directories containing file \fBCACHEDIR.TAG\fR,
+except for the tag file itself.
+.TP
+\fB\-\-exclude\-caches\-all\fR
+Exclude directories containing file \fBCACHEDIR.TAG\fR and the file itself.
+.TP
+\fB\-\-exclude\-caches\-under\fR
+Exclude everything under directories containing \fBCACHEDIR.TAG\fR
+.TP
+\fB\-\-exclude\-ignore=\fIFILE\fR
+Before dumping a directory, see if it contains \fIFILE\fR.
+If so, read exclusion patterns from this file. The patterns affect
+only the directory itself.
+.TP
+\fB\-\-exclude\-ignore\-recursive=\fIFILE\fR
+Same as \fB\-\-exclude\-ignore\fR, except that patterns from
+\fIFILE\fR affect both the directory and all its subdirectories.
+.TP
+\fB\-\-exclude\-tag\fR=\fIFILE\fR
+Exclude contents of directories containing \fIFILE\fR, except for
+\fIFILE\fR itself.
+.TP
+\fB\-\-exclude\-tag\-all\fR=\fIFILE\fR
+Exclude directories containing \fIFILE\fR.
+.TP
+\fB\-\-exclude\-tag\-under\fR=\fIFILE\fR
+Exclude everything under directories containing \fIFILE\fR.
+.TP
+\fB\-\-exclude\-vcs\fR
+Exclude version control system directories.
+.TP
+\fB\-\-exclude\-vcs\-ignores\fR
+Exclude files that match patterns read from VCS-specific ignore
+files. Supported files are:
+.BR .cvsignore ,
+.BR .gitignore ,
+.BR .bzrignore ", and"
+.BR .hgignore .
+.TP
+\fB\-h\fR, \fB\-\-dereference\fR
+Follow symlinks; archive and dump the files they point to.
+.TP
+\fB\-\-hard\-dereference\fR
+Follow hard links; archive and dump the files they refer to.
+.TP
+\fB\-K\fR, \fB\-\-starting\-file\fR=\fIMEMBER\fR
+Begin at the given member in the archive.
+.TP
+\fB\-\-newer\-mtime\fR=\fIDATE\fR
+Work on files whose data changed after the \fIDATE\fR. If \fIDATE\fR
+starts with \fB/\fR or \fB.\fR it is taken to be a file name; the
+mtime of that file is used as the date.
+.TP
+\fB\-\-no\-null\fR
+Disable the effect of the previous \fB\-\-null\fR option.
+.TP
+\fB\-\-no\-recursion\fR
+Avoid descending automatically in directories.
+.TP
+\fB\-\-no\-unquote\fR
+Do not unquote input file or member names.
+.TP
+\fB\-\-no\-verbatim\-files\-from\fR
+Treat each line read from a file list as if it were supplied in the
+command line. I.e., leading and trailing whitespace is removed and,
+if the resulting string begins with a dash, it is treated as \fBtar\fR
+command line option.
+
+This is the default behavior. The \fB\-\-no\-verbatim\-files\-from\fR
+option is provided as a way to restore it after
+\fB\-\-verbatim\-files\-from\fR option.
+
+This option is positional: it affects all \fB\-\-files\-from\fR
+options that occur after it in, until \fB\-\-verbatim\-files\-from\fR
+option or end of line, whichever occurs first.
+
+It is implied by the \fB\-\-no\-null\fR option.
+.TP
+\fB\-\-null\fR
+Instruct subsequent \fB\-T\fR options to read null-terminated names
+verbatim (disables special handling of names that start with a dash).
+
+See also \fB\-\-verbatim\-files\-from\fR.
+.TP
+\fB\-N\fR, \fB\-\-newer\fR=\fIDATE\fR, \fB\-\-after\-date\fR=\fIDATE\fR
+Only store files newer than DATE. If \fIDATE\fR starts with \fB/\fR
+or \fB.\fR it is taken to be a file name; the ctime of that file is
+used as the date.
+.TP
+\fB\-\-one\-file\-system\fR
+Stay in local file system when creating archive.
+.TP
+\fB\-P\fR, \fB\-\-absolute\-names\fR
+Don't strip leading slashes from file names when creating archives.
+.TP
+\fB\-\-recursion\fR
+Recurse into directories (default).
+.TP
+\fB\-\-suffix\fR=\fISTRING\fR
+Backup before removal, override usual suffix. Default suffix is \fB~\fR,
+unless overridden by environment variable \fBSIMPLE_BACKUP_SUFFIX\fR.
+.TP
+\fB\-T\fR, \fB\-\-files\-from\fR=\fIFILE\fR
+Get names to extract or create from \fIFILE\fR.
+
+Unless specified otherwise, the \fIFILE\fR must contain a list of
+names separated by ASCII \fBLF\fR (i.e. one name per line). The
+names read are handled the same way as command line arguments. They
+undergo quote removal and word splitting, and any string that starts
+with a \fB\-\fR is handled as \fBtar\fR command line option.
+
+If this behavior is undesirable, it can be turned off using the
+\fB\-\-verbatim\-files\-from\fR option.
+
+The \fB\-\-null\fR option instructs \fBtar\fR that the names in
+\fIFILE\fR are separated by ASCII \fBNUL\fR character, instead of
+\fBLF\fR. It is useful if the list is generated by
+.BR find (1)
+.B \-print0
+predicate.
+.TP
+\fB\-\-unquote\fR
+Unquote file or member names (default).
+.TP
+\fB\-\-verbatim\-files\-from\fR
+Treat each line obtained from a file list as a file name, even if it
+starts with a dash. File lists are supplied with the
+\fB\-\-files\-from\fR (\fB\-T\fR) option. The default behavior is to
+handle names supplied in file lists as if they were typed in the
+command line, i.e. any names starting with a dash are treated as
+\fBtar\fR options. The \fB\-\-verbatim\-files\-from\fR option
+disables this behavior.
+
+This option affects all \fB\-\-files\-from\fR options that occur after
+it in the command line. Its effect is reverted by the
+\fB\-\-no\-verbatim\-files\-from} option.
+
+This option is implied by the \fB\-\-null\fR option.
+
+See also \fB\-\-add\-file\fR.
+.TP
+\fB\-X\fR, \fB\-\-exclude\-from\fR=\fIFILE\fR
+Exclude files matching patterns listed in FILE.
+.SS File name transformations
+.TP
+\fB\-\-strip\-components\fR=\fINUMBER\fR
+Strip \fINUMBER\fR leading components from file names on extraction.
+.TP
+\fB\-\-transform\fR=\fIEXPRESSION\fR, \fB\-\-xform\fR=\fIEXPRESSION\fR
+Use sed replace \fIEXPRESSION\fR to transform file names.
+.SS File name matching options
+These options affect both exclude and include patterns.
+.TP
+\fB\-\-anchored\fR
+Patterns match file name start.
+.TP
+\fB\-\-ignore\-case\fR
+Ignore case.
+.TP
+\fB\-\-no\-anchored\fR
+Patterns match after any \fB/\fR (default for exclusion).
+.TP
+\fB\-\-no\-ignore\-case\fR
+Case sensitive matching (default).
+.TP
+\fB\-\-no\-wildcards\fR
+Verbatim string matching.
+.TP
+\fB\-\-no\-wildcards\-match\-slash\fR
+Wildcards do not match \fB/\fR.
+.TP
+\fB\-\-wildcards\fR
+Use wildcards (default for exclusion).
+.TP
+\fB\-\-wildcards\-match\-slash\fR
+Wildcards match \fB/\fR (default for exclusion).
+.SS Informative output
+.TP
+\fB\-\-checkpoint\fR[=\fIN\fR]
+Display progress messages every \fIN\fRth record (default 10).
+.TP
+\fB\-\-checkpoint\-action\fR=\fIACTION\fR
+Run \fIACTION\fR on each checkpoint.
+.TP
+\fB\-\-clamp\-mtime\fR
+Only set time when the file is more recent than what was given with \-\-mtime.
+.TP
+\fB\-\-full\-time\fR
+Print file time to its full resolution.
+.TP
+\fB\-\-index\-file\fR=\fIFILE\fR
+Send verbose output to \fIFILE\fR.
+.TP
+\fB\-l\fR, \fB\-\-check\-links\fR
+Print a message if not all links are dumped.
+.TP
+\fB\-\-no\-quote\-chars\fR=\fISTRING\fR
+Disable quoting for characters from \fISTRING\fR.
+.TP
+\fB\-\-quote\-chars\fR=\fISTRING\fR
+Additionally quote characters from \fISTRING\fR.
+.TP
+\fB\-\-quoting\-style\fR=\fISTYLE\fR
+Set quoting style for file and member names. Valid values for
+\fISTYLE\fR are
+.BR literal ,
+.BR shell ,
+.BR shell-always ,
+.BR c ,
+.BR c-maybe ,
+.BR escape ,
+.BR locale ,
+.BR clocale .
+.TP
+\fB\-R\fR, \fB\-\-block\-number\fR
+Show block number within archive with each message.
+.TP
+\fB\-\-show\-omitted\-dirs\fR
+When listing or extracting, list each directory that does not match
+search criteria.
+.TP
+\fB\-\-show\-transformed\-names\fR, \fB\-\-show\-stored\-names\fR
+Show file or archive names after transformation by \fB\-\-strip\fR and
+\fB\-\-transform\fR options.
+.TP
+\fB\-\-totals\fR[=\fISIGNAL\fR]
+Print total bytes after processing the archive. If \fISIGNAL\fR is
+given, print total bytes when this signal is delivered. Allowed
+signals are:
+.BR SIGHUP ,
+.BR SIGQUIT ,
+.BR SIGINT ,
+.BR SIGUSR1 ", and"
+.BR SIGUSR2 .
+The \fBSIG\fR prefix can be omitted.
+.TP
+\fB\-\-utc\fR
+Print file modification times in UTC.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Verbosely list files processed.
+.TP
+\fB\-\-warning\fR=\fIKEYWORD\fR
+Enable or disable warning messages identified by \fIKEYWORD\fR. The
+messages are suppressed if \fIKEYWORD\fR is prefixed with \fBno\-\fR
+and enabled otherwise.
+
+Multiple \fB\-\-warning\fR messages accumulate.
+
+Keywords controlling general \fBtar\fR operation:
+.RS
+.TP
+.B all
+Enable all warning messages. This is the default.
+.TP
+.B none
+Disable all warning messages.
+.TP
+.B filename-with-nuls
+"%s: file name read contains nul character"
+.TP
+.B alone-zero-block
+"A lone zero block at %s"
+.HP
+Keywords applicable for \fBtar --create\fR:
+.TP
+.B cachedir
+"%s: contains a cache directory tag %s; %s"
+.TP
+.B file-shrank
+"%s: File shrank by %s bytes; padding with zeros"
+.TP
+.B xdev
+"%s: file is on a different filesystem; not dumped"
+.TP
+.B file-ignored
+"%s: Unknown file type; file ignored"
+.br
+"%s: socket ignored"
+.br
+"%s: door ignored"
+.TP
+.B file-unchanged
+"%s: file is unchanged; not dumped"
+.TP
+.B ignore-archive
+"%s: file is the archive; not dumped"
+.TP
+.B file-removed
+"%s: File removed before we read it"
+.TP
+.B file-changed
+"%s: file changed as we read it"
+.HP
+Keywords applicable for \fBtar --extract\fR:
+.TP
+.B existing\-file
+"%s: skipping existing file"
+.TP
+.B timestamp
+"%s: implausibly old time stamp %s"
+.br
+"%s: time stamp %s is %s s in the future"
+.TP
+.B contiguous-cast
+"Extracting contiguous files as regular files"
+.TP
+.B symlink-cast
+"Attempting extraction of symbolic links as hard links"
+.TP
+.B unknown-cast
+"%s: Unknown file type '%c', extracted as normal file"
+.TP
+.B ignore-newer
+"Current %s is newer or same age"
+.TP
+.B unknown-keyword
+"Ignoring unknown extended header keyword '%s'"
+.TP
+.B decompress-program
+Controls verbose description of failures occurring when trying to run
+alternative decompressor programs. This warning is disabled by
+default (unless \fB\-\-verbose\fR is used). A common example of what
+you can get when using this warning is:
+
+.EX
+$ \fBtar --warning=decompress-program -x -f archive.Z
+tar (child): cannot run compress: No such file or directory
+tar (child): trying gzip
+.EE
+
+This means that \fBtar\fR first tried to decompress
+\fBarchive.Z\fR using \fBcompress\fR, and, when that
+failed, switched to \fBgzip\fR.
+.TP
+.B record-size
+"Record size = %lu blocks"
+.HP
+Keywords controlling incremental extraction:
+.TP
+.B rename-directory
+"%s: Directory has been renamed from %s"
+.br
+"%s: Directory has been renamed"
+.TP
+.B new-directory
+"%s: Directory is new"
+.TP
+.B xdev
+"%s: directory is on a different device: not purging"
+.TP
+.B bad-dumpdir
+"Malformed dumpdir: 'X' never used"
+.RE
+.TP
+\fB\-w\fR, \fB\-\-interactive\fR, \fB\-\-confirmation\fR
+Ask for confirmation for every action.
+.SS Compatibility options
+.TP
+\fB\-o\fR
+When creating, same as \fB\-\-old\-archive\fR. When extracting, same
+as \fB\-\-no\-same\-owner\fR.
+.SS Size suffixes
+.sp
+.nf
+.ta 8n 18n 42n
+.ul
+ Suffix Units Byte Equivalent
+ b Blocks \fISIZE\fR x 512
+ B Kilobytes \fISIZE\fR x 1024
+ c Bytes \fISIZE\fR
+ G Gigabytes \fISIZE\fR x 1024^3
+ K Kilobytes \fISIZE\fR x 1024
+ k Kilobytes \fISIZE\fR x 1024
+ M Megabytes \fISIZE\fR x 1024^2
+ P Petabytes \fISIZE\fR x 1024^5
+ T Terabytes \fISIZE\fR x 1024^4
+ w Words \fISIZE\fR x 2
+.fi
+.PP
+.SH "RETURN VALUE"
+Tar exit code indicates whether it was able to successfully perform
+the requested operation, and if not, what kind of error occurred.
+.TP
+.B 0
+Successful termination.
+.TP
+.B 1
+.I Some files differ.
+If tar was invoked with the \fB\-\-compare\fR (\fB\-\-diff\fR, \fB\-d\fR)
+command line option, this means that some files in the archive differ
+from their disk counterparts. If tar was given one of the \fB\-\-create\fR,
+\fB\-\-append\fR or \fB\-\-update\fR options, this exit code means
+that some files were changed while being archived and so the resulting
+archive does not contain the exact copy of the file set.
+.TP
+.B 2
+.I Fatal error.
+This means that some fatal, unrecoverable error occurred.
+.PP
+If a subprocess that had been invoked by
+.B tar
+exited with a nonzero exit code,
+.B tar
+itself exits with that code as well. This can happen, for example, if
+a compression option (e.g. \fB\-z\fR) was used and the external
+compressor program failed. Another example is
+.B rmt
+failure during backup to a remote device.
+.SH "SEE ALSO"
+.BR bzip2 (1),
+.BR compress (1),
+.BR gzip (1),
+.BR lzma (1),
+.BR lzop (1),
+.BR rmt (8),
+.BR symlink (7),
+.BR tar (5),
+.BR xz (1).
+.PP
+Complete \fBtar\fR manual: run
+.B info tar
+or use
+.BR emacs (1)
+info mode to read it.
+.PP
+Online copies of \fBGNU tar\fR documentation in various formats can be
+found at:
+.PP
+.in +4
+.B http://www.gnu.org/software/tar/manual
+.SH "BUG REPORTS"
+Report bugs to <bug\-tar@gnu.org>.
+.SH COPYRIGHT
+Copyright \(co 2013 Free Software Foundation, Inc.
+.br
+.na
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
+.br
+.ad
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+.\" Local variables:
+.\" eval: (add-hook 'write-file-hooks 'time-stamp)
+.\" time-stamp-start: ".TH [A-Z_][A-Z0-9_.\\-]* [0-9] \""
+.\" time-stamp-format: "%:B %:d, %:y"
+.\" time-stamp-end: "\""
+.\" time-stamp-line-limit: 20
+.\" end:
+
diff --git a/doc/tar.info b/doc/tar.info
new file mode 100644
index 0000000..9488af3
--- /dev/null
+++ b/doc/tar.info
@@ -0,0 +1,466 @@
+This is tar.info, produced by makeinfo version 5.9.93 from tar.texi.
+
+This manual is for GNU 'tar' (version 1.29, 14 April 2016), which
+creates and extracts files from archives.
+
+ Copyright (C) 1992, 1994-1997, 1999-2001, 2003-2016 Free Software
+Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being "GNU General Public
+ License", with the Front-Cover Texts being "A GNU Manual", and with
+ the Back-Cover Texts as in (a) below. A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
+INFO-DIR-SECTION Archiving
+START-INFO-DIR-ENTRY
+* Tar: (tar). Making tape (or disk) archives.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* tar: (tar)tar invocation. Invoking GNU 'tar'.
+END-INFO-DIR-ENTRY
+
+
+Indirect:
+tar.info-1: 1138
+tar.info-2: 302896
+
+Tag Table:
+(Indirect)
+Node: Top1138
+Node: Introduction10495
+Node: Book Contents11282
+Node: Definitions13454
+Node: What tar Does15257
+Node: Naming tar Archives18024
+Node: Authors18745
+Node: Reports20558
+Node: Tutorial20915
+Node: assumptions21728
+Node: stylistic conventions24202
+Node: basic tar options24645
+Node: frequent operations28284
+Node: Two Frequent Options28934
+Node: file tutorial29565
+Node: verbose tutorial30923
+Ref: verbose member listing33137
+Node: help tutorial35905
+Node: create36260
+Node: prepare for examples37698
+Node: Creating the archive39467
+Node: create verbose43054
+Node: short create43874
+Node: create dir46609
+Node: list49317
+Ref: listing member and file names50852
+Node: list dir53471
+Node: extract54483
+Node: extracting archives55597
+Node: extracting files56102
+Ref: extracting files-Footnote-157988
+Node: extract dir58368
+Node: extracting untrusted archives60760
+Node: failing commands61640
+Node: going further63225
+Node: tar invocation63438
+Node: Synopsis65218
+Ref: exit status68540
+Node: using tar options70173
+Ref: TAR_OPTIONS71753
+Node: Styles72772
+Ref: Styles-Footnote-174271
+Node: Long Options74527
+Node: Short Options76699
+Ref: Short Options-Footnote-178507
+Node: Old Options78724
+Node: Mixing81487
+Ref: Mixing-Footnote-183853
+Node: All Options83973
+Node: Operation Summary84609
+Ref: --append84729
+Ref: --catenate84810
+Ref: --compare84882
+Ref: --concatenate85086
+Ref: --create85197
+Ref: --delete85266
+Ref: --diff85381
+Ref: --extract85438
+Ref: --get85541
+Ref: --list85600
+Ref: --update85669
+Node: Option Summary85880
+Ref: --absolute-names86035
+Ref: --acls86327
+Ref: --after-date86408
+Ref: --anchored86461
+Ref: --atime-preserve86594
+Ref: --auto-compress89110
+Ref: --backup89338
+Ref: --block-number89530
+Ref: --blocking-factor89705
+Ref: --bzip289858
+Ref: --check-device89966
+Ref: --checkpoint90161
+Ref: --checkpoint-action90604
+Ref: --check-links91763
+Ref: --compress92040
+Ref: --uncompress92040
+Ref: --clamp-mtime92245
+Ref: --confirmation92285
+Ref: --delay-directory-restore92354
+Ref: --dereference92557
+Ref: --directory92752
+Ref: --exclude93006
+Ref: --exclude-backups93126
+Ref: --exclude-from93216
+Ref: --exclude-caches93363
+Ref: --exclude-caches-under93572
+Ref: --exclude-caches-all93751
+Ref: --exclude-ignore93881
+Ref: --exclude-ignore-recursive94101
+Ref: --exclude-tag94345
+Ref: --exclude-tag-under94517
+Ref: --exclude-tag-all94708
+Ref: --exclude-vcs94838
+Ref: --exclude-vcs-ignores94998
+Ref: --file95391
+Ref: --files-from95592
+Ref: --force-local95796
+Ref: --format95988
+Ref: --full-time96663
+Ref: --group97343
+Ref: --group-map97670
+Ref: --gzip98062
+Ref: --gunzip98062
+Ref: --ungzip98062
+Ref: --hard-dereference98286
+Ref: --help98473
+Ref: --hole-detection98609
+Ref: --ignore-case98845
+Ref: --ignore-command-error98972
+Ref: --ignore-failed-read99084
+Ref: --ignore-zeros99226
+Ref: --incremental99371
+Ref: --index-file99637
+Ref: --info-script99723
+Ref: --new-volume-script99723
+Ref: --interactive100021
+Ref: --keep-directory-symlink100234
+Ref: --keep-newer-files100783
+Ref: --keep-old-files100926
+Ref: --label101139
+Ref: --level101428
+Ref: --listed-incremental101868
+Ref: --lzip102233
+Ref: --lzma102334
+Ref: --mode102536
+Ref: --mtime102829
+Ref: --multi-volume103509
+Ref: --newer103715
+Ref: --newer-mtime103994
+Ref: --no-acls104219
+Ref: --no-anchored104313
+Ref: --no-auto-compress104450
+Ref: --no-check-device104602
+Ref: --no-delay-directory-restore104785
+Ref: --no-ignore-case105034
+Ref: --no-ignore-command-error105127
+Ref: --no-null105283
+Ref: --no-overwrite-dir105489
+Ref: --no-quote-chars105633
+Ref: --no-recursion105814
+Ref: --no-same-owner105920
+Ref: --no-same-permissions106104
+Ref: --no-seek106307
+Ref: --no-selinux106526
+Ref: --no-unquote106627
+Ref: --no-verbatim-files-from106765
+Ref: --no-wildcards107266
+Ref: --no-wildcards-match-slash107350
+Ref: --no-xattrs107452
+Ref: --null107555
+Ref: --numeric-owner107906
+Ref: --occurrence108558
+Ref: --old-archive109126
+Ref: --one-file-system109175
+Ref: --one-top-level109353
+Ref: --overwrite109989
+Ref: --overwrite-dir110132
+Ref: --owner110278
+Ref: --owner-map110641
+Ref: --pax-option111017
+Ref: --portability111324
+Ref: --posix111389
+Ref: --preserve-order111431
+Ref: --preserve-permissions111496
+Ref: --same-permissions111496
+Ref: --quote-chars111911
+Ref: --quoting-style112064
+Ref: --read-full-records112387
+Ref: --record-size112553
+Ref: --recursion112906
+Ref: --recursive-unlink113011
+Ref: --remove-files113174
+Ref: --restrict113321
+Ref: --rmt-command113510
+Ref: --rsh-command113652
+Ref: --same-order113775
+Ref: --same-owner114068
+Ref: --seek114447
+Ref: --selinux114818
+Ref: --show-defaults114919
+Ref: --show-omitted-dirs115429
+Ref: --show-snapshot-field-ranges115584
+Ref: --show-transformed-names115781
+Ref: --show-stored-names115781
+Ref: --skip-old-files116171
+Ref: --sort116622
+Ref: --sparse117261
+Ref: --sparse-version117401
+Ref: --starting-file117627
+Ref: --strip-components117817
+Ref: --suffix118154
+Ref: --tape-length118274
+Ref: --test-label118699
+Ref: --to-command118852
+Ref: --to-stdout119012
+Ref: --totals119166
+Ref: --touch119398
+Ref: --transform119601
+Ref: --xform119601
+Ref: --unlink-first120215
+Ref: --unquote120379
+Ref: --use-compress-program120486
+Ref: --utc120665
+Ref: --verbatim-files-from120759
+Ref: --verbose121603
+Ref: --verify121856
+Ref: --version121975
+Ref: --volno-file122148
+Ref: --warning122336
+Ref: --wildcards122514
+Ref: --wildcards-match-slash122634
+Ref: --xattrs122726
+Ref: --xattrs-exclude122825
+Ref: --xattrs-include122952
+Ref: --xz123217
+Ref: Option Summary-Footnote-1123347
+Node: Short Option Summary123566
+Node: Position-Sensitive Options126469
+Ref: Position-Sensitive Options-Footnote-1129341
+Node: help129503
+Ref: help-Footnote-1133338
+Node: defaults133549
+Node: verbose134568
+Ref: totals136871
+Ref: Progress information138461
+Ref: show-omitted-dirs139440
+Ref: block-number139859
+Ref: verbose-Footnote-1140886
+Node: checkpoints140993
+Ref: checkpoint exec147058
+Node: warnings149087
+Node: interactive152490
+Node: external154589
+Node: operations156177
+Node: Basic tar156436
+Ref: Basic tar-Footnote-1159543
+Node: Advanced tar159687
+Node: Operations160532
+Node: append162427
+Ref: append-Footnote-1165524
+Node: appending files165711
+Node: multiple167448
+Node: update170170
+Node: how to update171147
+Node: concatenate172931
+Ref: concatenate-Footnote-1176179
+Node: delete176322
+Node: compare178096
+Node: create options179530
+Node: override180017
+Node: Extended File Attributes187078
+Node: Ignore Failed Read191713
+Node: extract options191949
+Node: Reading192782
+Node: read full records194282
+Node: Ignore Zeros194617
+Node: Writing195608
+Node: Dealing with Old Files196165
+Node: Overwrite Old Files198967
+Node: Keep Old Files200424
+Node: Keep Newer Files201231
+Node: Unlink First201521
+Node: Recursive Unlink201925
+Node: Data Modification Times202478
+Node: Setting Access Permissions203288
+Node: Directory Modification Times and Permissions203920
+Node: Writing to Standard Output207533
+Node: Writing to an External Program209068
+Node: remove files212658
+Node: Scarce212851
+Node: Starting File213099
+Node: Same Order213900
+Node: backup214736
+Node: Applications217827
+Node: looking ahead219291
+Node: Backups220117
+Node: Full Dumps221698
+Node: Incremental Dumps223507
+Ref: --level=0226421
+Ref: device numbers226954
+Ref: incremental-op230937
+Ref: Incremental Dumps-Footnote-1231311
+Ref: Incremental Dumps-Footnote-2231461
+Node: Backup Levels231949
+Node: Backup Parameters234336
+Node: General-Purpose Variables235517
+Ref: RSH238685
+Node: Magnetic Tape Control240569
+Node: User Hooks241908
+Node: backup-specs example243241
+Node: Scripted Backups244381
+Ref: Scripted Backups-Footnote-1247246
+Node: Scripted Restoration247630
+Node: Choosing250236
+Node: file251358
+Ref: remote-dev253994
+Ref: local and remote archives254379
+Node: Selecting Archive Members255410
+Ref: input name quoting256091
+Node: files258066
+Ref: verbatim-files-from260773
+Ref: no-verbatim-files-from261033
+Ref: files-Footnote-1261775
+Node: nul261933
+Node: exclude264391
+Ref: exclude-vcs-ignores265949
+Ref: exclude-vcs267662
+Ref: exclude-Footnote-1271598
+Ref: exclude-Footnote-2271852
+Node: problems with exclude271923
+Node: wildcards273973
+Node: controlling pattern-matching276556
+Ref: anchored patterns279197
+Ref: case-insensitive matches279467
+Ref: controlling pattern-matching-Footnote-1280544
+Node: quoting styles280761
+Ref: escape sequences281106
+Node: transform287250
+Ref: show-transformed-names289241
+Node: after295433
+Node: recurse299035
+Node: one302896
+Node: directory304329
+Node: absolute307428
+Ref: absolute-Footnote-1310755
+Node: Date input formats311106
+Node: General date syntax313502
+Node: Calendar date items316479
+Node: Time of day items318476
+Node: Time zone items320672
+Node: Combined date and time of day items321923
+Node: Day of week items322776
+Node: Relative items in date strings323784
+Node: Pure numbers in date strings326586
+Node: Seconds since the Epoch327567
+Node: Specifying time zone rules329189
+Node: Authors of parse_datetime331562
+Ref: Authors of get_date331741
+Node: Formats332704
+Node: Compression337379
+Node: gzip337671
+Ref: alternative decompression programs339882
+Ref: auto-compress343431
+Ref: use-compress-program344196
+Ref: gzip-Footnote-1346163
+Ref: gzip-Footnote-2346212
+Node: lbzip2346352
+Node: sparse347449
+Node: Attributes351993
+Node: Portability357655
+Node: Portable Names359141
+Node: dereference359846
+Node: hard links360973
+Ref: hard links-Footnote-1363858
+Node: old363914
+Node: ustar365097
+Node: gnu365700
+Node: posix366577
+Node: PAX keywords367058
+Node: Checksumming373056
+Node: Large or Negative Values375000
+Node: Other Tars376601
+Node: Split Recovery377737
+Node: Sparse Recovery381486
+Ref: extracting sparse v.0.x385115
+Ref: Sparse Recovery-Footnote-1388404
+Ref: Sparse Recovery-Footnote-2388427
+Node: cpio388548
+Node: Media393309
+Node: Device395260
+Ref: size-suffixes400051
+Node: Remote Tape Server401191
+Node: Common Problems and Solutions404855
+Node: Blocking405247
+Ref: Blocking-Footnote-1411731
+Node: Format Variations411835
+Node: Blocking Factor412750
+Node: Many424401
+Node: Tape Positioning428195
+Node: mt430071
+Node: Using Multiple Tapes431628
+Node: Multi-Volume Archives433694
+Ref: tape-length435179
+Ref: change volume prompt435734
+Ref: volno-file436601
+Ref: info-script437154
+Ref: Multi-Volume Archives-Footnote-1442739
+Ref: Multi-Volume Archives-Footnote-2442849
+Node: Tape Files442917
+Node: Tarcat444402
+Node: label445447
+Ref: --test-label option447035
+Ref: label-Footnote-1450486
+Ref: label-Footnote-2450595
+Ref: label-Footnote-3450728
+Node: verify450963
+Node: Write Protection454263
+Node: Reliability and security455093
+Node: Reliability455481
+Node: Permissions problems456259
+Node: Data corruption and repair456698
+Node: Race conditions457625
+Node: Security459364
+Node: Privacy459967
+Node: Integrity461216
+Node: Live untrusted data463427
+Node: Security rules of thumb465766
+Node: Changes467294
+Node: Configuring Help Summary470915
+Node: Fixing Snapshot Files477431
+Node: Tar Internals480800
+Node: Standard481132
+Node: Extensions503335
+Node: Sparse Formats505897
+Node: Old GNU Format507186
+Node: PAX 0509573
+Node: PAX 1512691
+Node: Snapshot Files514419
+Node: Dumpdir520017
+Node: Genfile523247
+Node: Generate Mode524343
+Node: Status Mode529583
+Node: Exec Mode531385
+Node: Free Software Needs Free Documentation534145
+Node: GNU Free Documentation License539126
+Node: Index of Command Line Options564329
+Node: Index592555
+
+End Tag Table
diff --git a/doc/tar.info-1 b/doc/tar.info-1
new file mode 100644
index 0000000..ac57a2f
--- /dev/null
+++ b/doc/tar.info-1
@@ -0,0 +1,7890 @@
+This is tar.info, produced by makeinfo version 5.9.93 from tar.texi.
+
+This manual is for GNU 'tar' (version 1.29, 14 April 2016), which
+creates and extracts files from archives.
+
+ Copyright (C) 1992, 1994-1997, 1999-2001, 2003-2016 Free Software
+Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being "GNU General Public
+ License", with the Front-Cover Texts being "A GNU Manual", and with
+ the Back-Cover Texts as in (a) below. A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
+INFO-DIR-SECTION Archiving
+START-INFO-DIR-ENTRY
+* Tar: (tar). Making tape (or disk) archives.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* tar: (tar)tar invocation. Invoking GNU 'tar'.
+END-INFO-DIR-ENTRY
+
+
+File: tar.info, Node: Top, Next: Introduction, Up: (dir)
+
+GNU tar: an archiver tool
+*************************
+
+This manual is for GNU 'tar' (version 1.29, 14 April 2016), which
+creates and extracts files from archives.
+
+ Copyright (C) 1992, 1994-1997, 1999-2001, 2003-2016 Free Software
+Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being "GNU General Public
+ License", with the Front-Cover Texts being "A GNU Manual", and with
+ the Back-Cover Texts as in (a) below. A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
+
+ 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.
+
+* Menu:
+
+* Introduction::
+* Tutorial::
+* tar invocation::
+* operations::
+* Backups::
+* Choosing::
+* Date input formats::
+* Formats::
+* Media::
+* Reliability and security::
+
+Appendices
+
+* Changes::
+* Configuring Help Summary::
+* Fixing Snapshot Files::
+* Tar Internals::
+* Genfile::
+* Free Software Needs Free Documentation::
+* GNU Free Documentation License::
+* Index of Command Line Options::
+* Index::
+
+ -- The Detailed Node Listing --
+
+Introduction
+
+* Book Contents:: What this Book Contains
+* Definitions:: Some Definitions
+* What tar Does:: What 'tar' Does
+* Naming tar Archives:: How 'tar' Archives are Named
+* Authors:: GNU 'tar' Authors
+* Reports:: Reporting bugs or suggestions
+
+Tutorial Introduction to 'tar'
+
+* assumptions::
+* stylistic conventions::
+* basic tar options:: Basic 'tar' Operations and Options
+* frequent operations::
+* Two Frequent Options::
+* create:: How to Create Archives
+* list:: How to List Archives
+* extract:: How to Extract Members from an Archive
+* going further::
+
+Two Frequently Used Options
+
+* file tutorial::
+* verbose tutorial::
+* help tutorial::
+
+How to Create Archives
+
+* prepare for examples::
+* Creating the archive::
+* create verbose::
+* short create::
+* create dir::
+
+How to List Archives
+
+* list dir::
+
+How to Extract Members from an Archive
+
+* extracting archives::
+* extracting files::
+* extract dir::
+* extracting untrusted archives::
+* failing commands::
+
+Invoking GNU 'tar'
+
+* Synopsis::
+* using tar options::
+* Styles::
+* All Options::
+* help::
+* defaults::
+* verbose::
+* checkpoints::
+* warnings::
+* interactive::
+
+The Three Option Styles
+
+* Long Options:: Long Option Style
+* Short Options:: Short Option Style
+* Old Options:: Old Option Style
+* Mixing:: Mixing Option Styles
+
+All 'tar' Options
+
+* Operation Summary::
+* Option Summary::
+* Short Option Summary::
+* Position-Sensitive Options::
+
+GNU 'tar' Operations
+
+* Basic tar::
+* Advanced tar::
+* create options::
+* extract options::
+* backup::
+* Applications::
+* looking ahead::
+
+Advanced GNU 'tar' Operations
+
+* Operations::
+* append::
+* update::
+* concatenate::
+* delete::
+* compare::
+
+How to Add Files to Existing Archives: '--append'
+
+* appending files:: Appending Files to an Archive
+* multiple::
+
+Updating an Archive
+
+* how to update::
+
+Options Used by '--create'
+
+* override:: Overriding File Metadata.
+* Extended File Attributes::
+* Ignore Failed Read::
+
+Options Used by '--extract'
+
+* Reading:: Options to Help Read Archives
+* Writing:: Changing How 'tar' Writes Files
+* Scarce:: Coping with Scarce Resources
+
+Options to Help Read Archives
+
+* read full records::
+* Ignore Zeros::
+
+Changing How 'tar' Writes Files
+
+* Dealing with Old Files::
+* Overwrite Old Files::
+* Keep Old Files::
+* Keep Newer Files::
+* Unlink First::
+* 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
+
+* Starting File::
+* Same Order::
+
+Performing Backups and Restoring Files
+
+* Full Dumps:: Using 'tar' to Perform Full Dumps
+* Incremental Dumps:: Using 'tar' to Perform Incremental Dumps
+* Backup Levels:: Levels of Backups
+* Backup Parameters:: Setting Parameters for Backups and Restoration
+* Scripted Backups:: Using the Backup Scripts
+* Scripted Restoration:: Using the Restore Script
+
+Setting Parameters for Backups and Restoration
+
+* General-Purpose Variables::
+* Magnetic Tape Control::
+* User Hooks::
+* backup-specs example:: An Example Text of 'Backup-specs'
+
+Choosing Files and Names for 'tar'
+
+* file:: Choosing the Archive's Name
+* Selecting Archive Members::
+* files:: Reading Names from a File
+* exclude:: Excluding Some Files
+* 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
+
+Reading Names from a File
+
+* nul::
+
+Excluding Some Files
+
+* problems with exclude::
+
+Wildcards Patterns and Matching
+
+* controlling pattern-matching::
+
+Crossing File System Boundaries
+
+* directory:: Changing Directory
+* absolute:: Absolute File Names
+
+Date input formats
+
+* General date syntax:: Common rules.
+* Calendar date items:: 19 Dec 1994.
+* Time of day items:: 9:20pm.
+* Time zone items:: EST, PDT, 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 parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+
+Controlling the Archive Format
+
+* Compression:: Using Less Space through Compression
+* Attributes:: Handling File Attributes
+* Portability:: Making 'tar' Archives More Portable
+* cpio:: Comparison of 'tar' and 'cpio'
+
+Using Less Space through Compression
+
+* gzip:: Creating and Reading Compressed Archives
+* sparse:: Archiving Sparse Files
+
+Creating and Reading Compressed Archives
+
+* lbzip2:: Using lbzip2 with GNU 'tar'.
+
+Making 'tar' Archives More Portable
+
+* Portable Names:: Portable Names
+* dereference:: Symbolic Links
+* hard links:: Hard Links
+* old:: Old V7 Archives
+* ustar:: Ustar Archives
+* gnu:: GNU and old GNU format archives.
+* posix:: 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 'tar' Implementations
+
+GNU 'tar' and POSIX 'tar'
+
+* PAX keywords:: Controlling Extended Header Keywords.
+
+How to Extract GNU-Specific Data Using Other 'tar' Implementations
+
+* Split Recovery:: Members Split Between Volumes
+* Sparse Recovery:: Sparse Members
+
+Tapes and Other Archive Media
+
+* Device:: Device selection and switching
+* Remote Tape Server::
+* Common Problems and Solutions::
+* Blocking:: Blocking
+* Many:: Many archives on one tape
+* Using Multiple Tapes:: Using Multiple Tapes
+* label:: Including a Label in the Archive
+* verify::
+* Write Protection::
+
+Blocking
+
+* Format Variations:: Format Variations
+* Blocking Factor:: The Blocking Factor of an Archive
+
+Many Archives on One Tape
+
+* Tape Positioning:: Tape Positions and Tape Marks
+* mt:: The 'mt' Utility
+
+Using Multiple Tapes
+
+* Multi-Volume Archives:: Archives Longer than One Tape or Disk
+* Tape Files:: Tape Files
+* Tarcat:: Concatenate Volumes into a Single Archive
+
+
+Tar Internals
+
+* Standard:: Basic Tar Format
+* Extensions:: 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
+
+* GNU Free Documentation License:: License for copying this manual
+
+
+
+File: tar.info, Node: Introduction, Next: Tutorial, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+GNU 'tar' creates and manipulates "archives" which are actually
+collections of many other files; the program provides users with an
+organized and systematic method for controlling a large amount of data.
+The name "tar" originally came from the phrase "Tape ARchive", but
+archives need not (and these days, typically do not) reside on tapes.
+
+* Menu:
+
+* Book Contents:: What this Book Contains
+* Definitions:: Some Definitions
+* What tar Does:: What 'tar' Does
+* Naming tar Archives:: How 'tar' Archives are Named
+* Authors:: GNU 'tar' Authors
+* Reports:: Reporting bugs or suggestions
+
+
+File: tar.info, Node: Book Contents, Next: Definitions, Up: Introduction
+
+1.1 What this Book Contains
+===========================
+
+The first part of this chapter introduces you to various terms that will
+recur throughout the book. It also tells you who has worked on GNU
+'tar' and its documentation, and where you should send bug reports or
+comments.
+
+ The second chapter is a tutorial (*note Tutorial::) which provides a
+gentle introduction for people who are new to using 'tar'. It is meant
+to be self-contained, not requiring any reading from subsequent chapters
+to make sense. It moves from topic to topic in a logical, progressive
+order, building on information already explained.
+
+ Although the tutorial is paced and structured to allow beginners to
+learn how to use 'tar', it is not intended solely for beginners. The
+tutorial explains how to use the three most frequently used operations
+('create', 'list', and 'extract') as well as two frequently used options
+('file' and 'verbose'). The other chapters do not refer to the tutorial
+frequently; however, if a section discusses something which is a complex
+variant of a basic concept, there may be a cross-reference to that basic
+concept. (The entire book, including the tutorial, assumes that the
+reader understands some basic concepts of using a Unix-type operating
+system; *note Tutorial::.)
+
+ The third chapter presents the remaining five operations, and
+information about using 'tar' options and option syntax.
+
+ The other chapters are meant to be used as a reference. Each chapter
+presents everything that needs to be said about a specific topic.
+
+ One of the chapters (*note Date input formats::) exists in its
+entirety in other GNU manuals, and is mostly self-contained. In
+addition, one section of this manual (*note Standard::) contains a big
+quote which is taken directly from 'tar' sources.
+
+ In general, we give both long and short (abbreviated) option names at
+least once in each section where the relevant option is covered, so that
+novice readers will become familiar with both styles. (A few options
+have no short versions, and the relevant sections will indicate this.)
+
+
+File: tar.info, Node: Definitions, Next: What tar Does, Prev: Book Contents, Up: Introduction
+
+1.2 Some Definitions
+====================
+
+The 'tar' program is used to create and manipulate 'tar' archives. An
+"archive" is a single file which contains the contents of many files,
+while still identifying the names of the files, their owner(s), and so
+forth. (In addition, archives record access permissions, user and
+group, size in bytes, and data modification time. Some archives also
+record the file names in each archived directory, as well as other file
+and directory information.) You can use 'tar' to "create" a new archive
+in a specified directory.
+
+ The files inside an archive are called "members". Within this
+manual, we use the term "file" to refer only to files accessible in the
+normal ways (by 'ls', 'cat', and so forth), and the term "member" to
+refer only to the members of an archive. Similarly, a "file name" is
+the name of a file, as it resides in the file system, and a "member
+name" is the name of an archive member within the archive.
+
+ The term "extraction" refers to the process of copying an archive
+member (or multiple members) into a file in the file system. Extracting
+all the members of an archive is often called "extracting the archive".
+The term "unpack" can also be used to refer to the extraction of many or
+all the members of an archive. Extracting an archive does not destroy
+the archive's structure, just as creating an archive does not destroy
+the copies of the files that exist outside of the archive. You may also
+"list" the members in a given archive (this is often thought of as
+"printing" them to the standard output, or the command line), or
+"append" members to a pre-existing archive. All of these operations can
+be performed using 'tar'.
+
+
+File: tar.info, Node: What tar Does, Next: Naming tar Archives, Prev: Definitions, Up: Introduction
+
+1.3 What 'tar' Does
+===================
+
+The 'tar' program provides the ability to create 'tar' archives, as well
+as various other kinds of manipulation. For example, you can use 'tar'
+on previously created archives to extract files, to store additional
+files, or to update or list files which were already stored.
+
+ Initially, 'tar' archives were used to store files conveniently on
+magnetic tape. The name 'tar' comes from this use; it stands for 't'ape
+'ar'chiver. Despite the utility's name, 'tar' can direct its output to
+available devices, files, or other programs (using pipes). 'tar' may
+even access remote devices or files (as archives).
+
+ You can use 'tar' archives in many ways. We want to stress a few of
+them: storage, backup, and transportation.
+
+Storage
+ Often, 'tar' archives are used to store related files for
+ convenient file transfer over a network. For example, the GNU
+ Project distributes its software bundled into 'tar' archives, so
+ that all the files relating to a particular program (or set of
+ related programs) can be transferred as a single unit.
+
+ A magnetic tape can store several files in sequence. However, the
+ tape has no names for these files; it only knows their relative
+ position on the tape. One way to store several files on one tape
+ and retain their names is by creating a 'tar' archive. Even when
+ the basic transfer mechanism can keep track of names, as FTP can,
+ the nuisance of handling multiple files, directories, and multiple
+ links makes 'tar' archives useful.
+
+ Archive files are also used for long-term storage. You can think
+ of this as transportation from the present into the future. (It is
+ a science-fiction idiom that you can move through time as well as
+ in space; the idea here is that 'tar' can be used to move archives
+ in all dimensions, even time!)
+
+Backup
+ Because the archive created by 'tar' is capable of preserving file
+ information and directory structure, 'tar' is commonly used for
+ performing full and incremental backups of disks. A backup puts a
+ collection of files (possibly pertaining to many users and
+ projects) together on a disk or a tape. This guards against
+ accidental destruction of the information in those files. GNU
+ 'tar' has special features that allow it to be used to make
+ incremental and full dumps of all the files in a file system.
+
+Transportation
+ You can create an archive on one system, transfer it to another
+ system, and extract the contents there. This allows you to
+ transport a group of files from one system to another.
+
+
+File: tar.info, Node: Naming tar Archives, Next: Authors, Prev: What tar Does, Up: Introduction
+
+1.4 How 'tar' Archives are Named
+================================
+
+Conventionally, 'tar' archives are given names ending with '.tar'. This
+is not necessary for 'tar' to operate properly, but this manual follows
+that convention in order to accustom readers to it and to make examples
+more clear.
+
+ Often, people refer to 'tar' archives as "'tar' files," and archive
+members as "files" or "entries". For people familiar with the operation
+of 'tar', this causes no difficulty. However, in this manual, we
+consistently refer to "archives" and "archive members" to make learning
+to use 'tar' easier for novice users.
+
+
+File: tar.info, Node: Authors, Next: Reports, Prev: Naming tar Archives, Up: Introduction
+
+1.5 GNU 'tar' Authors
+=====================
+
+GNU 'tar' was originally written by John Gilmore, and modified by many
+people. The GNU enhancements were written by Jay Fenlason, then Joy
+Kendall, and the whole package has been further maintained by Thomas
+Bushnell, n/BSG, Franc,ois Pinard, Paul Eggert, and finally Sergey
+Poznyakoff with the help of numerous and kind users.
+
+ We wish to stress that 'tar' is a collective work, and owes much to
+all those people who reported problems, offered solutions and other
+insights, or shared their thoughts and suggestions. An impressive, yet
+partial list of those contributors can be found in the 'THANKS' file
+from the GNU 'tar' distribution.
+
+ Jay Fenlason put together a draft of a GNU 'tar' manual, borrowing
+notes from the original man page from John Gilmore. This was withdrawn
+in version 1.11. Thomas Bushnell, n/BSG and Amy Gorin worked on a
+tutorial and manual for GNU 'tar'. Franc,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. The book for versions from 1.14 up to 1.29 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 *note
+Backups::.
+
+ In July, 2003 GNU 'tar' was put on CVS at savannah.gnu.org (see
+<http://savannah.gnu.org/projects/tar>), and active development and
+maintenance work has started again. Currently GNU 'tar' is being
+maintained by Paul Eggert, Sergey Poznyakoff and Jeff Bailey.
+
+ Support for POSIX archives was added by Sergey Poznyakoff.
+
+
+File: tar.info, Node: Reports, Prev: Authors, Up: Introduction
+
+1.6 Reporting bugs or suggestions
+=================================
+
+If you find problems or have suggestions about this program or manual,
+please report them to 'bug-tar@gnu.org'.
+
+ When reporting a bug, please be sure to include as much detail as
+possible, in order to reproduce it.
+
+
+File: tar.info, Node: Tutorial, Next: tar invocation, Prev: Introduction, Up: Top
+
+2 Tutorial Introduction to 'tar'
+********************************
+
+This chapter guides you through some basic examples of three 'tar'
+operations: '--create', '--list', and '--extract'. If you already know
+how to use some other version of 'tar', then you may not need to read
+this chapter. This chapter omits most complicated details about how
+'tar' works.
+
+* Menu:
+
+* assumptions::
+* stylistic conventions::
+* basic tar options:: Basic 'tar' Operations and Options
+* frequent operations::
+* Two Frequent Options::
+* create:: How to Create Archives
+* list:: How to List Archives
+* extract:: How to Extract Members from an Archive
+* going further::
+
+
+File: tar.info, Node: assumptions, Next: stylistic conventions, Up: Tutorial
+
+2.1 Assumptions this Tutorial Makes
+===================================
+
+This chapter is paced to allow beginners to learn about 'tar' slowly.
+At the same time, we will try to cover all the basic aspects of these
+three operations. In order to accomplish both of these tasks, we have
+made certain assumptions about your knowledge before reading this
+manual, and the hardware you will be using:
+
+ * Before you start to work through this tutorial, you should
+ understand what the terms "archive" and "archive member" mean
+ (*note Definitions::). In addition, you should understand
+ something about how Unix-type operating systems work, and you
+ should know how to use some basic utilities. For example, you
+ should know how to create, list, copy, rename, edit, and delete
+ files and directories; how to change between directories; and how
+ to figure out where you are in the file system. You should have
+ some basic understanding of directory structure and how files are
+ named according to which directory they are in. You should
+ understand concepts such as standard output and standard input,
+ what various definitions of the term 'argument' mean, and the
+ differences between relative and absolute file names.
+
+ * This manual assumes that you are working from your own home
+ directory (unless we state otherwise). In this tutorial, you will
+ create a directory to practice 'tar' commands in. When we show
+ file names, we will assume that those names are relative to your
+ home directory. For example, my home directory is
+ '/home/fsf/melissa'. All of my examples are in a subdirectory of
+ the directory named by that file name; the subdirectory is called
+ 'practice'.
+
+ * In general, we show examples of archives which exist on (or can be
+ written to, or worked with from) a directory on a hard disk. In
+ most cases, you could write those archives to, or work with them on
+ any other device, such as a tape drive. However, some of the later
+ examples in the tutorial and next chapter will not work on tape
+ drives. Additionally, working with tapes is much more complicated
+ than working with hard disks. For these reasons, the tutorial does
+ not cover working with tape drives. *Note Media::, for complete
+ information on using 'tar' archives with tape drives.
+
+
+File: tar.info, Node: stylistic conventions, Next: basic tar options, Prev: assumptions, Up: Tutorial
+
+2.2 Stylistic Conventions
+=========================
+
+In the examples, '$' represents a typical shell prompt. It precedes
+lines you should type; to make this more clear, those lines are shown in
+'this font', as opposed to lines which represent the computer's
+response; those lines are shown in 'this font', or sometimes 'like
+this'.
+
+
+File: tar.info, Node: basic tar options, Next: frequent operations, Prev: stylistic conventions, Up: Tutorial
+
+2.3 Basic 'tar' Operations and Options
+======================================
+
+'tar' can take a wide variety of arguments which specify and define the
+actions it will have on the particular set of files or the archive. The
+main types of arguments to 'tar' fall into one of two classes:
+operations, and options.
+
+ Some arguments fall into a class called "operations"; exactly one of
+these is both allowed and required for any instance of using 'tar'; you
+may _not_ specify more than one. People sometimes speak of "operating
+modes". You are in a particular operating mode when you have specified
+the operation which specifies it; there are eight operations in total,
+and thus there are eight operating modes.
+
+ The other arguments fall into the class known as "options". You are
+not required to specify any options, and you are allowed to specify more
+than one at a time (depending on the way you are using 'tar' at that
+time). Some options are used so frequently, and are so useful for
+helping you type commands more carefully that they are effectively
+"required". We will discuss them in this chapter.
+
+ You can write most of the 'tar' operations and options in any of
+three forms: long (mnemonic) form, short form, and old style. Some of
+the operations and options have no short or "old" forms; however, the
+operations and options which we will cover in this tutorial have
+corresponding abbreviations. We will indicate those abbreviations
+appropriately to get you used to seeing them. Note, that the "old
+style" option forms exist in GNU 'tar' for compatibility with Unix
+'tar'. In this book we present a full discussion of this way of writing
+options and operations (*note Old Options::), and we discuss the other
+two styles of writing options (*Note Long Options::, and *note Short
+Options::).
+
+ In the examples and in the text of this tutorial, we usually use the
+long forms of operations and options; but the "short" forms produce the
+same result and can make typing long 'tar' commands easier. For
+example, instead of typing
+
+ tar --create --verbose --file=afiles.tar apple angst aspic
+
+you can type
+ tar -c -v -f afiles.tar apple angst aspic
+
+or even
+ tar -cvf afiles.tar apple angst aspic
+
+For more information on option syntax, see *note Advanced tar::. In
+discussions in the text, when we name an option by its long form, we
+also give the corresponding short option in parentheses.
+
+ The term, "option", can be confusing at times, since "operations" are
+often lumped in with the actual, _optional_ "options" in certain general
+class statements. For example, we just talked about "short and long
+forms of options and operations". However, experienced 'tar' users
+often refer to these by shorthand terms such as, "short and long
+options". This term assumes that the "operations" are included, also.
+Context will help you determine which definition of "options" to use.
+
+ Similarly, the term "command" can be confusing, as it is often used
+in two different ways. People sometimes refer to 'tar' "commands". A
+'tar' "command" is the entire command line of user input which tells
+'tar' what to do -- including the operation, options, and any arguments
+(file names, pipes, other commands, etc.). However, you will also
+sometimes hear the term "the 'tar' command". When the word "command" is
+used specifically like this, a person is usually referring to the 'tar'
+_operation_, not the whole line. Again, use context to figure out which
+of the meanings the speaker intends.
+
+
+File: tar.info, Node: frequent operations, Next: Two Frequent Options, Prev: basic tar options, Up: Tutorial
+
+2.4 The Three Most Frequently Used Operations
+=============================================
+
+Here are the three most frequently used operations (both short and long
+forms), as well as a brief description of their meanings. The rest of
+this chapter will cover how to use these operations in detail. We will
+present the rest of the operations in the next chapter.
+
+'--create'
+'-c'
+ Create a new 'tar' archive.
+'--list'
+'-t'
+ List the contents of an archive.
+'--extract'
+'-x'
+ Extract one or more members from an archive.
+
+
+File: tar.info, Node: Two Frequent Options, Next: create, Prev: frequent operations, Up: Tutorial
+
+2.5 Two Frequently Used Options
+===============================
+
+To understand how to run 'tar' in the three operating modes listed
+previously, you also need to understand how to use two of the options to
+'tar': '--file' (which takes an archive file as an argument) and
+'--verbose'. (You are usually not _required_ to specify either of these
+options when you run 'tar', but they can be very useful in making things
+more clear and helping you avoid errors.)
+
+* Menu:
+
+* file tutorial::
+* verbose tutorial::
+* help tutorial::
+
+
+File: tar.info, Node: file tutorial, Next: verbose tutorial, Up: Two Frequent Options
+
+The '--file' Option
+-------------------
+
+'--file=ARCHIVE-NAME'
+'-f ARCHIVE-NAME'
+ Specify the name of an archive file.
+
+ You can specify an argument for the '--file=ARCHIVE-NAME' ('-f
+ARCHIVE-NAME') option whenever you use 'tar'; this option determines the
+name of the archive file that 'tar' will work on.
+
+ If you don't specify this argument, then 'tar' will examine the
+environment variable 'TAPE'. If it is set, its value will be used as
+the archive name. Otherwise, 'tar' will use the default archive,
+determined at compile time. Usually it is standard output or some
+physical tape drive attached to your machine (you can verify what the
+default is by running 'tar --show-defaults', *note defaults::). If
+there is no tape drive attached, or the default is not meaningful, then
+'tar' will print an error message. The error message might look roughly
+like one of the following:
+
+ tar: can't open /dev/rmt8 : No such device or address
+ tar: can't open /dev/rsmt0 : I/O error
+
+To avoid confusion, we recommend that you always specify an archive file
+name by using '--file=ARCHIVE-NAME' ('-f ARCHIVE-NAME') when writing
+your 'tar' commands. For more information on using the
+'--file=ARCHIVE-NAME' ('-f ARCHIVE-NAME') option, see *note file::.
+
+
+File: tar.info, Node: verbose tutorial, Next: help tutorial, Prev: file tutorial, Up: Two Frequent Options
+
+The '--verbose' Option
+----------------------
+
+'--verbose'
+'-v'
+ Show the files being worked on as 'tar' is running.
+
+ '--verbose' ('-v') shows details about the results of running 'tar'.
+This can be especially useful when the results might not be obvious.
+For example, if you want to see the progress of 'tar' as it writes files
+into the archive, you can use the '--verbose' option. In the beginning,
+you may find it useful to use '--verbose' at all times; when you are
+more accustomed to 'tar', you will likely want to use it at certain
+times but not at others. We will use '--verbose' at times to help make
+something clear, and we will give many examples both using and not using
+'--verbose' to show the differences.
+
+ Each instance of '--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 ('--list', '--extract', '--diff'), 'tar' by
+default prints only the names of the members being extracted. Using
+'--verbose' will show a full, 'ls' style member listing.
+
+ In contrast, when writing archives ('--create', '--append',
+'--update'), 'tar' does not print file names by default. So, a single
+'--verbose' option shows the file names being added to the archive,
+while two '--verbose' options enable the full listing.
+
+ For example, to create an archive in verbose mode:
+
+ $ tar -cvf afiles.tar apple angst aspic
+ apple
+ angst
+ aspic
+
+Creating the same archive with the verbosity level 2 could give:
+
+ $ 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
+
+This works equally well using short or long forms of options. Using
+long forms, you would simply write out the mnemonic form of the option
+twice, like this:
+
+ $ tar --create --verbose --verbose ...
+
+Note that you must double the hyphens properly each time.
+
+ Later in the tutorial, we will give examples using
+'--verbose --verbose'.
+
+ The full output consists of six fields:
+
+ * File type and permissions in symbolic form. These are displayed in
+ the same format as the first column of 'ls -l' output (*note
+ format=verbose: (fileutils)What information is listed.).
+
+ * Owner name and group separated by a slash character. If these data
+ are not available (for example, when listing a 'v7' format
+ archive), numeric ID values are printed instead.
+
+ * Size of the file, in bytes.
+
+ * File modification date in ISO 8601 format.
+
+ * File modification time.
+
+ * File name. If the name contains any special characters (white
+ space, newlines, etc.) these are displayed in an unambiguous form
+ using so called "quoting style". For the detailed discussion of
+ available styles and on how to use them, see *note quoting
+ styles::.
+
+ Depending on the file type, the name can be followed by some
+ additional information, described in the following table:
+
+ '-> LINK-NAME'
+ The file or archive member is a "symbolic link" and LINK-NAME
+ is the name of file it links to.
+
+ 'link to LINK-NAME'
+ The file or archive member is a "hard link" and LINK-NAME is
+ the name of file it links to.
+
+ '--Long Link--'
+ The archive member is an old GNU format long link. You will
+ normally not encounter this.
+
+ '--Long Name--'
+ The archive member is an old GNU format long name. You will
+ normally not encounter this.
+
+ '--Volume Header--'
+ The archive member is a GNU "volume header" (*note Tape
+ Files::).
+
+ '--Continued at byte N--'
+ Encountered only at the beginning of a multi-volume archive
+ (*note Using Multiple Tapes::). This archive member is a
+ continuation from the previous volume. The number N gives the
+ offset where the original file was split.
+
+ 'unknown file type C'
+ An archive member of unknown type. 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 GNU 'tar' is not able to handle, or the archive is
+ corrupted.
+
+ For example, here is an archive listing containing most of the
+special suffixes explained above:
+
+ 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
+
+
+
+File: tar.info, Node: help tutorial, Prev: verbose tutorial, Up: Two Frequent Options
+
+Getting Help: Using the '--help' Option
+---------------------------------------
+
+'--help'
+
+ The '--help' option to 'tar' prints out a very brief list of all
+ operations and option available for the current version of 'tar'
+ available on your system.
+
+
+File: tar.info, Node: create, Next: list, Prev: Two Frequent Options, Up: Tutorial
+
+2.6 How to Create Archives
+==========================
+
+One of the basic operations of 'tar' is '--create' ('-c'), which you use
+to create a 'tar' archive. We will explain '--create' first because, in
+order to learn about the other operations, you will find it useful to
+have an archive available to practice on.
+
+ To make this easier, in this section you will first create a
+directory containing three files. Then, we will show you how to create
+an _archive_ (inside the new directory). Both the directory, and the
+archive are specifically for you to practice on. The rest of this
+chapter and the next chapter will show many examples using this
+directory and the files you will create: some of those files may be
+other directories and other archives.
+
+ The three files you will archive in this example are called 'blues',
+'folk', and 'jazz'. The archive is called 'collection.tar'.
+
+ This section will proceed slowly, detailing how to use '--create' in
+'verbose' mode, and showing examples using both short and long forms.
+In the rest of the tutorial, and in the examples in the next chapter, we
+will proceed at a slightly quicker pace. This section moves more slowly
+to allow beginning users to understand how 'tar' works.
+
+* Menu:
+
+* prepare for examples::
+* Creating the archive::
+* create verbose::
+* short create::
+* create dir::
+
+
+File: tar.info, Node: prepare for examples, Next: Creating the archive, Up: create
+
+2.6.1 Preparing a Practice Directory for Examples
+-------------------------------------------------
+
+To follow along with this and future examples, create a new directory
+called 'practice' containing files called 'blues', 'folk' and 'jazz'.
+The files can contain any information you like: ideally, they should
+contain information which relates to their names, and be of different
+lengths. Our examples assume that 'practice' is a subdirectory of your
+home directory.
+
+ Now 'cd' to the directory named 'practice'; 'practice' is now your
+"working directory". (_Please note_: Although the full file name of
+this directory is '/HOMEDIR/practice', in our examples we will refer to
+this directory as 'practice'; the HOMEDIR is presumed.)
+
+ In general, you should check that the files to be archived exist
+where you think they do (in the working directory) by running 'ls'.
+Because you just created the directory and the files and have changed to
+that directory, you probably don't need to do that this time.
+
+ It is very important to make sure there isn't already a file in the
+working directory with the archive name you intend to use (in this case,
+'collection.tar'), or that you don't care about its contents. Whenever
+you use 'create', 'tar' will erase the current contents of the file
+named by '--file=ARCHIVE-NAME' ('-f ARCHIVE-NAME') if it exists. 'tar'
+will not tell you if you are about to overwrite an archive unless you
+specify an option which does this (*note backup::, for the information
+on how to do so). To add files to an existing archive, you need to use
+a different option, such as '--append' ('-r'); see *note append:: for
+information on how to do this.
+
+
+File: tar.info, Node: Creating the archive, Next: create verbose, Prev: prepare for examples, Up: create
+
+2.6.2 Creating the Archive
+--------------------------
+
+To place the files 'blues', 'folk', and 'jazz' into an archive named
+'collection.tar', use the following command:
+
+ $ tar --create --file=collection.tar blues folk jazz
+
+ The order of the arguments is not very important, _when using long
+option forms_, however you should always remember to use option as the
+first argument to tar. For example, the following is wrong:
+
+ $ tar blues -c folk -f collection.tar jazz
+ tar: -c: Invalid blocking factor
+ Try 'tar --help' or 'tar --usage' for more information.
+
+ The error message is produced because 'tar' always treats its first
+argument as an option (or cluster of options), even if it does not start
+with dash. This is "traditional" or "old option" style, called so
+because all implementations of 'tar' have used it since the very
+inception of the tar archiver in 1970s. This option style will be
+explained later (*note Old Options::), for now just remember to always
+place option as the first argument.
+
+ That being said, you could issue the following command:
+
+ $ tar --create folk blues --file=collection.tar jazz
+
+However, you can see that this order is harder to understand; this is
+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
+'tar', to avoid errors).
+
+ Note that the sequence '--file=collection.tar' is considered to be
+_one_ argument. If you substituted any other string of characters for
+'collection.tar', then that string would become the name of the archive
+file you create.
+
+ The order of the options becomes more important when you begin to use
+short forms. With short forms, if you type commands in the wrong order
+(even if you type them correctly in all other ways), you may end up with
+results you don't expect. For this reason, it is a good idea to get
+into the habit of typing options in the order that makes inherent sense.
+*Note short create::, for more information on this.
+
+ In this example, you type the command as shown above: '--create' is
+the operation which creates the new archive ('collection.tar'), and
+'--file' is the option which lets you give it the name you chose. The
+files, 'blues', 'folk', and 'jazz', are now members of the archive,
+'collection.tar' (they are "file name arguments" to the '--create'
+operation. *Note Choosing::, for the detailed discussion on these.)
+Now that they are in the archive, they are called _archive members_, not
+files. (*note members: Definitions.).
+
+ When you create an archive, you _must_ specify which files you want
+placed in the archive. If you do not specify any archive members, GNU
+'tar' will complain.
+
+ If you now list the contents of the working directory ('ls'), you
+will find the archive file listed as well as the files you saw
+previously:
+
+ blues folk jazz collection.tar
+
+Creating the archive 'collection.tar' did not destroy the copies of the
+files in the directory.
+
+ Keep in mind that if you don't indicate an operation, 'tar' will not
+run and will prompt you for one. If you don't name any files, 'tar'
+will complain. You must have write access to the working directory, or
+else you will not be able to create an archive in that directory.
+
+ _Caution_: Do not attempt to use '--create' ('-c') to add files to an
+existing archive; it will delete the archive and write a new one. Use
+'--append' ('-r') instead. *Note append::.
+
+
+File: tar.info, Node: create verbose, Next: short create, Prev: Creating the archive, Up: create
+
+2.6.3 Running '--create' with '--verbose'
+-----------------------------------------
+
+If you include the '--verbose' ('-v') option on the command line, 'tar'
+will list the files it is acting on as it is working. In verbose mode,
+the 'create' example above would appear as:
+
+ $ tar --create --verbose --file=collection.tar blues folk jazz
+ blues
+ folk
+ jazz
+
+ This example is just like the example we showed which did not use
+'--verbose', except that 'tar' generated the remaining lines.
+
+ In the rest of the examples in this chapter, we will frequently use
+'verbose' mode so we can show actions or 'tar' responses that you would
+otherwise not see, and which are important for you to understand.
+
+
+File: tar.info, Node: short create, Next: create dir, Prev: create verbose, Up: create
+
+2.6.4 Short Forms with 'create'
+-------------------------------
+
+As we said before, the '--create' ('-c') operation is one of the most
+basic uses of 'tar', and you will use it countless times. Eventually,
+you will probably want to use abbreviated (or "short") forms of options.
+A full discussion of the three different forms that options can take
+appears in *note Styles::; for now, here is what the previous example
+(including the '--verbose' ('-v') option) looks like using short option
+forms:
+
+ $ tar -cvf collection.tar blues folk jazz
+ blues
+ folk
+ jazz
+
+As you can see, the system responds the same no matter whether you use
+long or short option forms.
+
+ One difference between using short and long option forms is that,
+although the exact placement of arguments following options is no more
+specific when using short forms, it is easier to become confused and
+make a mistake when using short forms. For example, suppose you
+attempted the above example in the following way:
+
+ $ tar -cfv collection.tar blues folk jazz
+
+In this case, 'tar' will make an archive file called 'v', containing the
+files 'blues', 'folk', and 'jazz', because the 'v' is the closest "file
+name" to the '-f' option, and is thus taken to be the chosen archive
+file name. 'tar' will try to add a file called 'collection.tar' to the
+'v' archive file; if the file 'collection.tar' did not already exist,
+'tar' will report an error indicating that this file does not exist. If
+the file 'collection.tar' does already exist (e.g., from a previous
+command you may have run), then 'tar' will add this file to the archive.
+Because the '-v' option did not get registered, 'tar' will not run under
+'verbose' mode, and will not report its progress.
+
+ The end result is that you may be quite confused about what happened,
+and possibly overwrite a file. To illustrate this further, we will show
+you how an example we showed previously would look using short forms.
+
+ This example,
+
+ $ tar --create folk blues --file=collection.tar jazz
+
+is confusing as it is. It becomes even more so when using short forms:
+
+ $ tar -c folk blues -f collection.tar jazz
+
+It would be very easy to put the wrong string of characters immediately
+following the '-f', but doing that could sacrifice valuable data.
+
+ For this reason, we recommend that you pay very careful attention to
+the order of options and placement of file and archive names, especially
+when using short option forms. Not having the option name written out
+mnemonically can affect how well you remember which option does what,
+and therefore where different names have to be placed.
+
+
+File: tar.info, Node: create dir, Prev: short create, Up: create
+
+2.6.5 Archiving Directories
+---------------------------
+
+You can archive a directory by specifying its directory name as a file
+name argument to 'tar'. The files in the directory will be archived
+relative to the working directory, and the directory will be re-created
+along with its contents when the archive is extracted.
+
+ To archive a directory, first move to its superior directory. If you
+have followed the previous instructions in this tutorial, you should
+type:
+
+ $ cd ..
+ $
+
+This will put you into the directory which contains 'practice', i.e.,
+your home directory. Once in the superior directory, you can specify
+the subdirectory, 'practice', as a file name argument. To store
+'practice' in the new archive file 'music.tar', type:
+
+ $ tar --create --verbose --file=music.tar practice
+
+'tar' should output:
+
+ practice/
+ practice/blues
+ practice/folk
+ practice/jazz
+ practice/collection.tar
+
+ Note that the archive thus created is not in the subdirectory
+'practice', but rather in the current working directory--the directory
+from which 'tar' was invoked. Before trying to archive a directory from
+its superior directory, you should make sure you have write access to
+the superior directory itself, not only the directory you are trying
+archive with 'tar'. For example, you will probably not be able to store
+your home directory in an archive by invoking 'tar' from the root
+directory; *Note absolute::. (Note also that 'collection.tar', the
+original archive file, has itself been archived. 'tar' will accept any
+file as a file to be archived, regardless of its content. When
+'music.tar' is extracted, the archive file 'collection.tar' will be
+re-written into the file system).
+
+ If you give 'tar' a command such as
+
+ $ tar --create --file=foo.tar .
+
+'tar' will report 'tar: ./foo.tar is the archive; not dumped'. This
+happens because 'tar' creates the archive 'foo.tar' in the current
+directory before putting any files into it. Then, when 'tar' attempts
+to add all the files in the directory '.' to the archive, it notices
+that the file './foo.tar' is the same as the archive 'foo.tar', and
+skips it. (It makes no sense to put an archive into itself.) GNU 'tar'
+will continue in this case, and create the archive normally, except for
+the exclusion of that one file. (_Please note:_ Other implementations
+of 'tar' may not be so clever; they will enter an infinite loop when
+this happens, so you should not depend on this behavior unless you are
+certain you are running GNU 'tar'. In general, it is wise to always
+place the archive outside of the directory being dumped.)
+
+
+File: tar.info, Node: list, Next: extract, Prev: create, Up: Tutorial
+
+2.7 How to List Archives
+========================
+
+Frequently, you will find yourself wanting to determine exactly what a
+particular archive contains. You can use the '--list' ('-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, assuming 'practice' is your working directory, you can examine
+the archive 'collection.tar' that you created in the last section with
+the command,
+
+ $ tar --list --file=collection.tar
+
+The output of 'tar' would then be:
+
+ blues
+ folk
+ jazz
+
+Be sure to use a '--file=ARCHIVE-NAME' ('-f ARCHIVE-NAME') option just
+as with '--create' ('-c') to specify the name of the archive.
+
+ You can specify one or more individual member names as arguments when
+using 'list'. In this case, 'tar' will only list the names of members
+you identify. For example, 'tar --list --file=collection.tar folk'
+would only print 'folk':
+
+ $ tar --list --file=collection.tar folk
+ folk
+
+ If you use the '--verbose' ('-v') option with '--list', then 'tar'
+will print out a listing reminiscent of 'ls -l', showing owner, file
+size, and so forth. This output is described in detail in *note verbose
+member listing::.
+
+ If you had used '--verbose' ('-v') mode, the example above would look
+like:
+
+ $ tar --list --verbose --file=collection.tar folk
+ -rw-r--r-- myself/user 62 1990-05-23 10:55 folk
+
+ It is important to notice that the output of 'tar --list --verbose'
+does not necessarily match that produced by 'tar --create --verbose'
+while creating the archive. It is because GNU 'tar', unless told
+explicitly not to do so, removes some directory prefixes from file names
+before storing them in the archive (*Note absolute::, for more
+information). In other words, in verbose mode GNU 'tar' shows "file
+names" when creating an archive and "member names" when listing it.
+Consider this example, run from your home directory:
+
+ $ tar --create --verbose --file practice.tar ~/practice
+ tar: Removing leading '/' from member names
+ /home/myself/practice/
+ /home/myself/practice/blues
+ /home/myself/practice/folk
+ /home/myself/practice/jazz
+ /home/myself/practice/collection.tar
+ $ tar --test --file practice.tar
+ home/myself/practice/
+ home/myself/practice/blues
+ home/myself/practice/folk
+ home/myself/practice/jazz
+ home/myself/practice/collection.tar
+
+ This default behavior can sometimes be inconvenient. You can force
+GNU 'tar' show member names when creating archive by supplying
+'--show-stored-names' option.
+
+'--show-stored-names'
+ Print member (as opposed to _file_) names when creating the
+ archive.
+
+ With this option, both commands produce the same output:
+
+ $ tar --create --verbose --show-stored-names \
+ --file practice.tar ~/practice
+ tar: Removing leading '/' from member names
+ home/myself/practice/
+ home/myself/practice/blues
+ home/myself/practice/folk
+ home/myself/practice/jazz
+ home/myself/practice/collection.tar
+ $ tar --test --file practice.tar
+ home/myself/practice/
+ home/myself/practice/blues
+ home/myself/practice/folk
+ home/myself/practice/jazz
+ home/myself/practice/collection.tar
+
+ Since 'tar' preserves file names, those you wish to list must be
+specified as they appear in the archive (i.e., relative to the directory
+from which the archive was created). Continuing the example above:
+
+ $ tar --list --file=practice.tar folk
+ tar: folk: Not found in archive
+ tar: Exiting with failure status due to previous errors
+
+ the error message is produced because there is no member named
+'folk', only one named 'home/myself/folk'.
+
+ If you are not sure of the exact file name, use "globbing patterns",
+for example:
+
+ $ tar --list --file=practice.tar --wildcards '*/folk'
+ home/myself/practice/folk
+
+*Note wildcards::, for a detailed discussion of globbing patterns and
+related 'tar' command line options.
+
+* Menu:
+
+* list dir::
+
+
+File: tar.info, Node: list dir, Up: list
+
+Listing the Contents of a Stored Directory
+------------------------------------------
+
+To get information about the contents of an archived directory, use the
+directory name as a file name argument in conjunction with '--list'
+('-t'). To find out file attributes, include the '--verbose' ('-v')
+option.
+
+ For example, to find out about files in the directory 'practice', in
+the archive file 'music.tar', type:
+
+ $ tar --list --verbose --file=music.tar practice
+
+ 'tar' responds:
+
+ drwxrwxrwx myself/user 0 1990-05-31 21:49 practice/
+ -rw-r--r-- myself/user 42 1990-05-21 13:29 practice/blues
+ -rw-r--r-- myself/user 62 1990-05-23 10:55 practice/folk
+ -rw-r--r-- myself/user 40 1990-05-21 13:30 practice/jazz
+ -rw-r--r-- myself/user 10240 1990-05-31 21:49 practice/collection.tar
+
+ When you use a directory name as a file name argument, 'tar' acts on
+all the files (including sub-directories) in that directory.
+
+
+File: tar.info, Node: extract, Next: going further, Prev: list, Up: Tutorial
+
+2.8 How to Extract Members from an Archive
+==========================================
+
+Creating an archive is only half the job--there is no point in storing
+files in an archive if you can't retrieve them. The act of retrieving
+members from an archive so they can be used and manipulated as
+unarchived files again is called "extraction". To extract files from an
+archive, use the '--extract' ('--get' or '-x') operation. As with
+'--create', specify the name of the archive with '--file' ('-f') option.
+Extracting an archive does not modify the archive in any way; you can
+extract it multiple times if you want or need to.
+
+ Using '--extract', you can extract an entire archive, or specific
+files. The files can be directories containing other files, or not. As
+with '--create' ('-c') and '--list' ('-t'), you may use the short or the
+long form of the operation without affecting the performance.
+
+* Menu:
+
+* extracting archives::
+* extracting files::
+* extract dir::
+* extracting untrusted archives::
+* failing commands::
+
+
+File: tar.info, Node: extracting archives, Next: extracting files, Up: extract
+
+2.8.1 Extracting an Entire Archive
+----------------------------------
+
+To extract an entire archive, specify the archive file name only, with
+no individual file names as arguments. For example,
+
+ $ tar -xvf collection.tar
+
+produces this:
+
+ -rw-r--r-- myself/user 28 1996-10-18 16:31 jazz
+ -rw-r--r-- myself/user 21 1996-09-23 16:44 blues
+ -rw-r--r-- myself/user 20 1996-09-23 16:44 folk
+
+
+File: tar.info, Node: extracting files, Next: extract dir, Prev: extracting archives, Up: extract
+
+2.8.2 Extracting Specific Files
+-------------------------------
+
+To extract specific archive members, give their exact member names as
+arguments, as printed by '--list' ('-t'). If you had mistakenly deleted
+one of the files you had placed in the archive 'collection.tar' earlier
+(say, 'blues'), you can extract it from the archive without changing the
+archive's structure. Its contents will be identical to the original
+file 'blues' that you deleted.
+
+ First, make sure you are in the 'practice' directory, and list the
+files in the directory. Now, delete the file, 'blues', and list the
+files in the directory again.
+
+ You can now extract the member 'blues' from the archive file
+'collection.tar' like this:
+
+ $ tar --extract --file=collection.tar blues
+
+If you list the files in the directory again, you will see that the file
+'blues' has been restored, with its original permissions, data
+modification times, and owner.(1) (These parameters will be identical
+to those which the file had when you originally placed it in the
+archive; any changes you may have made before deleting the file from the
+file system, however, will _not_ have been made to the archive member.)
+The archive file, 'collection.tar', is the same as it was before you
+extracted 'blues'. You can confirm this by running 'tar' with '--list'
+('-t').
+
+ Remember that as with other operations, specifying the exact member
+name is important (*Note failing commands::, for more examples).
+
+ You can extract a file to standard output by combining the above
+options with the '--to-stdout' ('-O') option (*note Writing to Standard
+Output::).
+
+ If you give the '--verbose' option, then '--extract' will print the
+names of the archive members as it extracts them.
+
+ ---------- Footnotes ----------
+
+ (1) This is only accidentally true, but not in general. Whereas
+modification times are always restored, in most cases, one has to be
+root for restoring the owner, and use a special option for restoring
+permissions. Here, it just happens that the restoring user is also the
+owner of the archived members, and that the current 'umask' is
+compatible with original permissions.
+
+
+File: tar.info, Node: extract dir, Next: extracting untrusted archives, Prev: extracting files, Up: extract
+
+2.8.3 Extracting Files that are Directories
+-------------------------------------------
+
+Extracting directories which are members of an archive is similar to
+extracting other files. The main difference to be aware of is that if
+the extracted directory has the same name as any directory already in
+the working directory, then files in the extracted directory will be
+placed into the directory of the same name. Likewise, if there are
+files in the pre-existing directory with the same names as the members
+which you extract, the files from the extracted archive will replace the
+files already in the working directory (and possible subdirectories).
+This will happen regardless of whether or not the files in the working
+directory were more recent than those extracted (there exist, however,
+special options that alter this behavior *note Writing::).
+
+ However, if a file was stored with a directory name as part of its
+file name, and that directory does not exist under the working directory
+when the file is extracted, 'tar' will create the directory.
+
+ We can demonstrate how to use '--extract' to extract a directory file
+with an example. Change to the 'practice' directory if you weren't
+there, and remove the files 'folk' and 'jazz'. Then, go back to the
+parent directory and extract the archive 'music.tar'. You may either
+extract the entire archive, or you may extract only the files you just
+deleted. To extract the entire archive, don't give any file names as
+arguments after the archive name 'music.tar'. To extract only the files
+you deleted, use the following command:
+
+ $ tar -xvf music.tar practice/folk practice/jazz
+ practice/folk
+ practice/jazz
+
+If you were to specify two '--verbose' ('-v') options, 'tar' would have
+displayed more detail about the extracted files, as shown in the example
+below:
+
+ $ tar -xvvf music.tar practice/folk practice/jazz
+ -rw-r--r-- me/user 28 1996-10-18 16:31 practice/jazz
+ -rw-r--r-- me/user 20 1996-09-23 16:44 practice/folk
+
+Because you created the directory with 'practice' as part of the file
+names of each of the files by archiving the 'practice' directory as
+'practice', you must give 'practice' as part of the file names when you
+extract those files from the archive.
+
+
+File: tar.info, Node: extracting untrusted archives, Next: failing commands, Prev: extract dir, Up: extract
+
+2.8.4 Extracting Archives from Untrusted Sources
+------------------------------------------------
+
+Extracting files from archives can overwrite files that already exist.
+If you receive an archive from an untrusted source, you should make a
+new directory and extract into that directory, so that you don't have to
+worry about the extraction overwriting one of your existing files. For
+example, if 'untrusted.tar' came from somewhere else on the Internet,
+and you don't necessarily trust its contents, you can extract it as
+follows:
+
+ $ mkdir newdir
+ $ cd newdir
+ $ tar -xvf ../untrusted.tar
+
+ It is also a good practice to examine contents of the archive before
+extracting it, using '--list' ('-t') option, possibly combined with
+'--verbose' ('-v').
+
+
+File: tar.info, Node: failing commands, Prev: extracting untrusted archives, Up: extract
+
+2.8.5 Commands That Will Fail
+-----------------------------
+
+Here are some sample commands you might try which will not work, and why
+they won't work.
+
+ If you try to use this command,
+
+ $ tar -xvf music.tar folk jazz
+
+you will get the following response:
+
+ tar: folk: Not found in archive
+ tar: jazz: Not found in archive
+
+This is because these files were not originally _in_ the parent
+directory '..', where the archive is located; they were in the
+'practice' directory, and their file names reflect this:
+
+ $ tar -tvf music.tar
+ practice/blues
+ practice/folk
+ practice/jazz
+
+Likewise, if you try to use this command,
+
+ $ tar -tvf music.tar folk jazz
+
+you would get a similar response. Members with those names are not in
+the archive. You must use the correct member names, or wildcards, in
+order to extract the files from the archive.
+
+ If you have forgotten the correct names of the files in the archive,
+use 'tar --list --verbose' to list them correctly.
+
+ To extract the member named 'practice/folk', you must specify
+
+ $ tar --extract --file=music.tar practice/folk
+
+Notice also, that as explained above, the 'practice' directory will be
+created, if it didn't already exist. There are options that allow you
+to strip away a certain number of leading directory components (*note
+transform::). For example,
+
+ $ tar --extract --file=music.tar --strip-components=1 folk
+
+will extract the file 'folk' into the current working directory.
+
+
+File: tar.info, Node: going further, Prev: extract, Up: Tutorial
+
+2.9 Going Further Ahead in this Manual
+======================================
+
+ _(This message will disappear, once this node revised.)_
+
+
+File: tar.info, Node: tar invocation, Next: operations, Prev: Tutorial, Up: Top
+
+3 Invoking GNU 'tar'
+********************
+
+This chapter is about how one invokes the GNU 'tar' command, from the
+command synopsis (*note Synopsis::). There are numerous options, and
+many styles for writing them. One mandatory option specifies the
+operation 'tar' should perform (*note Operation Summary::), other
+options are meant to detail how this operation should be performed
+(*note Option Summary::). Non-option arguments are not always
+interpreted the same way, depending on what the operation is.
+
+ You will find in this chapter everything about option styles and
+rules for writing them (*note Styles::). On the other hand, operations
+and options are fully described elsewhere, in other chapters. Here, you
+will find only synthetic descriptions for operations and options,
+together with pointers to other parts of the 'tar' manual.
+
+ Some options are so special they are fully described right in this
+chapter. They have the effect of inhibiting the normal operation of
+'tar' or else, they globally alter the amount of feedback the user
+receives about what is going on. These are the '--help' and '--version'
+(*note help::), '--verbose' (*note verbose::) and '--interactive'
+options (*note interactive::).
+
+* Menu:
+
+* Synopsis::
+* using tar options::
+* Styles::
+* All Options:: All 'tar' Options.
+* help:: Where to Get Help.
+* defaults:: What are the Default Values.
+* verbose:: Checking 'tar' progress.
+* checkpoints:: Checkpoints.
+* warnings:: Controlling Warning Messages.
+* interactive:: Asking for Confirmation During Operations.
+* external:: Running External Commands.
+
+
+File: tar.info, Node: Synopsis, Next: using tar options, Up: tar invocation
+
+3.1 General Synopsis of 'tar'
+=============================
+
+The GNU 'tar' program is invoked as either one of:
+
+ tar OPTION... [NAME]...
+ tar LETTER... [ARGUMENT]... [OPTION]... [NAME]...
+
+ The second form is for when old options are being used.
+
+ You can use 'tar' to store files in an archive, to extract them from
+an archive, and to do other types of archive manipulation. The primary
+argument to 'tar', which is called the "operation", specifies which
+action to take. The other arguments to 'tar' are either "options",
+which change the way 'tar' performs an operation, or file names or
+archive members, which specify the files or members 'tar' is to act on.
+
+ You can actually type in arguments in any order, even if in this
+manual the options always precede the other arguments, to make examples
+easier to understand. Further, the option stating the main operation
+mode (the 'tar' main command) is usually given first.
+
+ Each NAME in the synopsis above is interpreted as an archive member
+name when the main command is one of '--compare' ('--diff', '-d'),
+'--delete', '--extract' ('--get', '-x'), '--list' ('-t') or '--update'
+('-u'). When naming archive members, you must give the exact name of
+the member in the archive, as it is printed by '--list'. For '--append'
+('-r') and '--create' ('-c'), these NAME arguments specify the names of
+either files or directory hierarchies to place in the archive. These
+files or hierarchies should already exist in the file system, prior to
+the execution of the 'tar' command.
+
+ 'tar' interprets relative file names as being relative to the working
+directory. 'tar' will make all file names relative (by removing leading
+slashes when archiving or restoring files), unless you specify otherwise
+(using the '--absolute-names' option). *Note absolute::, for more
+information about '--absolute-names'.
+
+ If you give the name of a directory as either a file name or a member
+name, then 'tar' acts recursively on all the files and directories
+beneath that directory. For example, the name '/' identifies all the
+files in the file system to '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. *Note wildcards::, for more information
+about globbing. The problem is that shells may only glob using existing
+files in the file system. Only 'tar' itself may glob on archive
+members, so when needed, you must ensure that wildcard characters reach
+'tar' without being interpreted by the shell first. Using a backslash
+before '*' or '?', or putting the whole argument between quotes, is
+usually sufficient for this.
+
+ Even if NAMEs are often specified on the command line, they can also
+be read from a text file in the file system, using the
+'--files-from=FILE-OF-NAMES' ('-T FILE-OF-NAMES') option.
+
+ If you don't use any file name arguments, '--append' ('-r'),
+'--delete' and '--concatenate' ('--catenate', '-A') will do nothing,
+while '--create' ('-c') will usually yield a diagnostic and inhibit
+'tar' execution. The other operations of 'tar' ('--list', '--extract',
+'--compare', and '--update') will act on the entire contents of the
+archive.
+
+ Besides successful exits, GNU 'tar' may fail for many reasons. Some
+reasons correspond to bad usage, that is, when the 'tar' command line is
+improperly written. Errors may be encountered later, while processing
+the archive or the files. Some errors are recoverable, in which case
+the failure is delayed until 'tar' has completed all its work. Some
+errors are such that it would be not meaningful, or at least risky, to
+continue processing: 'tar' then aborts processing immediately. All
+abnormal exits, whether immediate or delayed, should always be clearly
+diagnosed on 'stderr', after a line stating the nature of the error.
+
+ Possible exit codes of GNU 'tar' are summarized in the following
+table:
+
+0
+ 'Successful termination'.
+
+1
+ 'Some files differ'. If tar was invoked with '--compare'
+ ('--diff', '-d') command line option, this means that some files in
+ the archive differ from their disk counterparts (*note compare::).
+ If tar was given '--create', '--append' or '--update' option, this
+ exit code means that some files were changed while being archived
+ and so the resulting archive does not contain the exact copy of the
+ file set.
+
+2
+ 'Fatal error'. This means that some fatal, unrecoverable error
+ occurred.
+
+ If 'tar' has invoked a subprocess and that subprocess exited with a
+nonzero exit code, 'tar' exits with that code as well. This can happen,
+for example, if 'tar' was given some compression option (*note gzip::)
+and the external compressor program failed. Another example is 'rmt'
+failure during backup to the remote device (*note Remote Tape Server::).
+
+
+File: tar.info, Node: using tar options, Next: Styles, Prev: Synopsis, Up: tar invocation
+
+3.2 Using 'tar' Options
+=======================
+
+GNU 'tar' has a total of eight operating modes which allow you to
+perform a variety of tasks. You are required to choose one operating
+mode each time you employ the 'tar' program by specifying one, and only
+one operation as an argument to the 'tar' command (the corresponding
+options may be found at *note frequent operations:: and *note
+Operations::). Depending on circumstances, you may also wish to
+customize how the chosen operating mode behaves. For example, you may
+wish to change the way the output looks, or the format of the files that
+you wish to archive may require you to do something special in order to
+make the archive look right.
+
+ You can customize and control 'tar''s performance by running 'tar'
+with one or more options (such as '--verbose' ('-v'), which we used in
+the tutorial). As we said in the tutorial, "options" are arguments to
+'tar' which are (as their name suggests) optional. Depending on the
+operating mode, you may specify one or more options. Different options
+will have different effects, but in general they all change details of
+the operation, such as archive format, archive name, or level of user
+interaction. Some options make sense with all operating modes, while
+others are meaningful only with particular modes. You will likely use
+some options frequently, while you will only use others infrequently, or
+not at all. (A full list of options is available in *note All
+Options::.)
+
+ The 'TAR_OPTIONS' environment variable specifies default options to
+be placed in front of any explicit options. For example, if
+'TAR_OPTIONS' is '-v --unlink-first', 'tar' behaves as if the two
+options '-v' and '--unlink-first' had been specified before any explicit
+options. Option specifications are separated by whitespace. A
+backslash escapes the next character, so it can be used to specify an
+option containing whitespace or a backslash.
+
+ Note that 'tar' options are case sensitive. For example, the options
+'-T' and '-t' are different; the first requires an argument for stating
+the name of a file providing a list of NAMEs, while the second does not
+require an argument and is another way to write '--list' ('-t').
+
+ In addition to the eight operations, there are many options to 'tar',
+and three different styles for writing both: long (mnemonic) form, short
+form, and old style. These styles are discussed below. Both the
+options and the operations can be written in any of these three styles.
+
+
+File: tar.info, Node: Styles, Next: All Options, Prev: using tar options, Up: tar invocation
+
+3.3 The Three Option Styles
+===========================
+
+There are three styles for writing operations and options to the command
+line invoking 'tar'. The different styles were developed at different
+times during the history of 'tar'. These styles will be presented
+below, from the most recent to the oldest.
+
+ Some options must take an argument(1). Where you _place_ the
+arguments generally depends on which style of options you choose. We
+will detail specific information relevant to each option style in the
+sections on the different option styles, below. The differences are
+subtle, yet can often be very important; incorrect option placement 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 _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:
+
+* Long Options:: Long Option Style
+* Short Options:: Short Option Style
+* Old Options:: Old Option Style
+* Mixing:: Mixing Option Styles
+
+ ---------- Footnotes ----------
+
+ (1) For example, '--file' ('-f') takes the name of an archive file as
+an argument. If you do not supply an archive file name, 'tar' will use
+a default, but this can be confusing; thus, we recommend that you always
+supply a specific archive file name.
+
+
+File: tar.info, Node: Long Options, Next: Short Options, Up: Styles
+
+3.3.1 Long Option Style
+-----------------------
+
+Each option has at least one "long" (or "mnemonic") name starting with
+two dashes in a row, e.g., '--list'. The long names are more clear than
+their corresponding short or old names. It sometimes happens that a
+single long option has many different names which are synonymous, such
+as '--compare' and '--diff'. In addition, long option names can be
+given unique abbreviations. For example, '--cre' can be used in place
+of '--create' because there is no other long option which begins with
+'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, 'tar' will tell you that that abbreviation is ambiguous and
+you'll know that that abbreviation won't work. You may also choose to
+run 'tar --help' to see a list of options. Be aware that if you run
+'tar' with a unique abbreviation for the long name of an option you
+didn't want to use, you are stuck; 'tar' will perform the command as
+ordered.)
+
+ 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:
+
+ $ 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 'tar'.
+
+ 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 white space characters. For example, the
+'--file' option (which tells the name of the 'tar' archive) is given a
+file such as 'archive.tar' as argument by using any of the following
+notations: '--file=archive.tar' or '--file archive.tar'.
+
+ In contrast, optional arguments must always be introduced using an
+equal sign. For example, the '--backup' option takes an optional
+argument specifying backup type. It must be used as
+'--backup=BACKUP-TYPE'.
+
+
+File: tar.info, Node: Short Options, Next: Old Options, Prev: Long Options, Up: Styles
+
+3.3.2 Short Option Style
+------------------------
+
+Most options also have a "short option" name. Short options start with
+a single dash, and are followed by a single character, e.g., '-t' (which
+is equivalent to '--list'). The forms are absolutely identical in
+function; they are interchangeable.
+
+ The short option names are faster to type than long option names.
+
+ Short options which require arguments take their arguments
+immediately following the option, usually separated by white space. It
+is also possible to stick the argument right after the short option
+name, using no intervening space. For example, you might write
+'-f archive.tar' or '-farchive.tar' instead of using
+'--file=archive.tar'. Both '--file=ARCHIVE-NAME' and '-f ARCHIVE-NAME'
+denote the option which indicates a specific archive, here named
+'archive.tar'.
+
+ Short options which take optional arguments take their arguments
+immediately following the option letter, _without any intervening white
+space characters_.
+
+ Short options' letters may be clumped together, but you are not
+required to do this (as compared to old options; see below). When short
+options are clumped as a set, use one (single) dash for them all, e.g.,
+''tar' -cvf'. Only the last option in such a set is allowed to have an
+argument(1).
+
+ When the options are separated, the argument for each option which
+requires an argument directly follows that option, as is usual for Unix
+programs. For example:
+
+ $ tar -c -v -b 20 -f /dev/rmt0
+
+ If you reorder short options' locations, be sure to move any
+arguments that belong to them. If you do not move the arguments
+properly, you may end up overwriting files.
+
+ ---------- Footnotes ----------
+
+ (1) Clustering many options, the last of which has an argument, is a
+rather opaque way to write options. Some wonder if GNU 'getopt' should
+not even be made helpful enough for considering such usages as invalid.
+
+
+File: tar.info, Node: Old Options, Next: Mixing, Prev: Short Options, Up: Styles
+
+3.3.3 Old Option Style
+----------------------
+
+As far as we know, all 'tar' programs, GNU and non-GNU, support "old
+options": that is, if the first argument does not start with '-', it is
+assumed to specify option letters. GNU 'tar' supports old options not
+only for historical reasons, but also because many people are used to
+them. If the first argument does not start with a dash, you are
+announcing the old option style instead of the short option style; old
+options are decoded differently.
+
+ Like short options, 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. This set of letters must be
+the first to appear on the command line, after the 'tar' program name
+and some white space; old options cannot appear anywhere else. The
+letter of an old option is exactly the same letter as the corresponding
+short option. For example, the old option 't' is the same as the short
+option '-t', and consequently, the same as the long option '--list'. So
+for example, the command 'tar cv' specifies the option '-v' in addition
+to the operation '-c'.
+
+ When options that need arguments are given together with the command,
+all the associated arguments follow, in the same order as the options.
+Thus, the example given previously could also be written in the old
+style as follows:
+
+ $ tar cvbf 20 /dev/rmt0
+
+Here, '20' is the argument of '-b' and '/dev/rmt0' is the argument of
+'-f'.
+
+ The old style syntax can make it difficult to match option letters
+with their corresponding arguments, and is often confusing. In the
+command 'tar cvbf 20 /dev/rmt0', for example, '20' is the argument for
+'-b', '/dev/rmt0' is the argument for '-f', and '-v' does not have a
+corresponding argument. Even using short options like in
+'tar -c -v -b 20 -f /dev/rmt0' is clearer, putting all arguments next to
+the option they pertain to.
+
+ If you want to reorder the letters in the old option argument, be
+sure to reorder any corresponding argument appropriately.
+
+ This old way of writing 'tar' options can surprise even experienced
+users. For example, the two commands:
+
+ tar cfz archive.tar.gz file
+ tar -cfz archive.tar.gz file
+
+are quite different. The first example uses 'archive.tar.gz' as the
+value for option 'f' and recognizes the option 'z'. The second example,
+however, uses 'z' as the value for option 'f' -- probably not what was
+intended.
+
+ This second example could be corrected in many ways, among which the
+following are equivalent:
+
+ tar -czf archive.tar.gz file
+ tar -cf archive.tar.gz -z file
+ tar cf archive.tar.gz -z file
+
+
+File: tar.info, Node: Mixing, Prev: Old Options, Up: Styles
+
+3.3.4 Mixing Option Styles
+--------------------------
+
+All three styles may be intermixed in a single 'tar' command, so long as
+the rules for each style are fully respected(1). Old style options and
+either of the modern styles of options may be mixed within a single
+'tar' command. However, old style options must be introduced as the
+first arguments only, following the rule for old options (old options
+must appear directly after the 'tar' command and some white space).
+Modern options may be given only after all arguments to the old options
+have been collected. If this rule is not respected, a modern option
+might be falsely interpreted as the value of the argument to one of the
+old style options.
+
+ For example, all the following commands are wholly equivalent, and
+illustrate the many combinations and orderings of option styles.
+
+ tar --create --file=archive.tar
+ tar --create -f archive.tar
+ tar --create -farchive.tar
+ tar --file=archive.tar --create
+ tar --file=archive.tar -c
+ tar -c --file=archive.tar
+ tar -c -f archive.tar
+ tar -c -farchive.tar
+ tar -cf archive.tar
+ tar -cfarchive.tar
+ tar -f archive.tar --create
+ tar -f archive.tar -c
+ tar -farchive.tar --create
+ tar -farchive.tar -c
+ tar c --file=archive.tar
+ tar c -f archive.tar
+ tar c -farchive.tar
+ tar cf archive.tar
+ tar f archive.tar --create
+ tar f archive.tar -c
+ tar fc archive.tar
+
+ On the other hand, the following commands are _not_ equivalent to the
+previous set:
+
+ tar -f -c archive.tar
+ tar -fc archive.tar
+ tar -fcarchive.tar
+ tar -farchive.tarc
+ tar cfarchive.tar
+
+These last examples mean something completely different from what the
+user intended (judging based on the example in the previous set which
+uses long options, whose intent is therefore very clear). The first
+four specify that the 'tar' archive would be a file named '-c', 'c',
+'carchive.tar' or 'archive.tarc', respectively. The first two examples
+also specify a single non-option, NAME argument having the value
+'archive.tar'. The last example contains only old style option letters
+(repeating option 'c' twice), not all of which are meaningful (eg., '.',
+'h', or 'i'), with no argument value.
+
+ ---------- Footnotes ----------
+
+ (1) Before GNU 'tar' version 1.11.6, a bug prevented intermixing old
+style options with long options in some cases.
+
+
+File: tar.info, Node: All Options, Next: help, Prev: Styles, Up: tar invocation
+
+3.4 All 'tar' Options
+=====================
+
+The coming manual sections contain an alphabetical listing of all 'tar'
+operations and options, with brief descriptions and cross-references to
+more in-depth explanations in the body of the manual. They also contain
+an alphabetically arranged table of the short option forms with their
+corresponding long option. You can use this table as a reference for
+deciphering 'tar' commands in scripts.
+
+* Menu:
+
+* Operation Summary::
+* Option Summary::
+* Short Option Summary::
+* Position-Sensitive Options::
+
+
+File: tar.info, Node: Operation Summary, Next: Option Summary, Up: All Options
+
+3.4.1 Operations
+----------------
+
+'--append'
+'-r'
+
+ Appends files to the end of the archive. *Note append::.
+
+'--catenate'
+'-A'
+
+ Same as '--concatenate'. *Note concatenate::.
+
+'--compare'
+'-d'
+
+ Compares archive members with their counterparts in the file
+ system, and reports differences in file size, mode, owner,
+ modification date and contents. *Note compare::.
+
+'--concatenate'
+'-A'
+
+ Appends other 'tar' archives to the end of the archive. *Note
+ concatenate::.
+
+'--create'
+'-c'
+
+ Creates a new 'tar' archive. *Note create::.
+
+'--delete'
+
+ Deletes members from the archive. Don't try this on an archive on
+ a tape! *Note delete::.
+
+'--diff'
+'-d'
+
+ Same '--compare'. *Note compare::.
+
+'--extract'
+'-x'
+
+ Extracts members from the archive into the file system. *Note
+ extract::.
+
+'--get'
+'-x'
+
+ Same as '--extract'. *Note extract::.
+
+'--list'
+'-t'
+
+ Lists the members in an archive. *Note list::.
+
+'--update'
+'-u'
+
+ Adds files to the end of the archive, but only if they are newer
+ than their counterparts already in the archive, or if they do not
+ already exist in the archive. *Note update::.
+
+
+File: tar.info, Node: Option Summary, Next: Short Option Summary, Prev: Operation Summary, Up: All Options
+
+3.4.2 'tar' Options
+-------------------
+
+'--absolute-names'
+'-P'
+
+ Normally when creating an archive, 'tar' strips an initial '/' from
+ member names, and when extracting from an archive 'tar' treats
+ names specially if they have initial '/' or internal '..'. This
+ option disables that behavior. *Note absolute::.
+
+'--acls'
+ Enable POSIX ACLs support. *Note acls: Extended File Attributes.
+
+'--after-date'
+
+ (See '--newer', *note after::)
+
+'--anchored'
+ A pattern must match an initial subsequence of the name's
+ components. *Note controlling pattern-matching::.
+
+'--atime-preserve'
+'--atime-preserve=replace'
+'--atime-preserve=system'
+
+ Attempt to preserve the access time of files when reading them.
+ This option currently is effective only on files that you own,
+ unless you have superuser privileges.
+
+ '--atime-preserve=replace' remembers the access time of a file
+ before reading it, and then restores the access time afterwards.
+ This may cause problems if other programs are reading the file at
+ the same time, as the times of their accesses will be lost. On
+ most platforms restoring the access time also requires 'tar' to
+ restore the data modification time too, so this option may also
+ cause problems if other programs are writing the file at the same
+ time ('tar' attempts to detect this situation, but cannot do so
+ reliably due to race conditions). Worse, on most platforms
+ restoring the access time also updates the status change time,
+ which means that this option is incompatible with incremental
+ backups.
+
+ '--atime-preserve=system' avoids changing time stamps on files,
+ without interfering with time stamp updates caused by other
+ programs, so it works better with incremental backups. However, it
+ requires a special 'O_NOATIME' option from the underlying operating
+ and file system implementation, and it also requires that searching
+ directories does not update their access times. As of this writing
+ (November 2005) this works only with Linux, and only with Linux
+ kernels 2.6.8 and later. Worse, there is currently no reliable way
+ to know whether this feature actually works. Sometimes 'tar' knows
+ that it does not work, and if you use '--atime-preserve=system'
+ then 'tar' complains and exits right away. But other times 'tar'
+ might think that the option works when it actually does not.
+
+ Currently '--atime-preserve' with no operand defaults to
+ '--atime-preserve=replace', but this may change in the future as
+ support for '--atime-preserve=system' improves.
+
+ If your operating or file system does not support
+ '--atime-preserve=system', you might be able to preserve access
+ times reliably by using the '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 'noatime' mount option
+ available on some systems. However, mounting typically requires
+ superuser privileges and can be a pain to manage.
+
+'--auto-compress'
+'-a'
+
+ During a '--create' operation, enables automatic compressed format
+ recognition based on the archive suffix. The effect of this option
+ is cancelled by '--no-auto-compress'. *Note gzip::.
+
+'--backup=BACKUP-TYPE'
+
+ Rather than deleting files from the file system, 'tar' will back
+ them up using simple or numbered backups, depending upon
+ BACKUP-TYPE. *Note backup::.
+
+'--block-number'
+'-R'
+
+ With this option present, 'tar' prints error messages for read
+ errors with the block number in the archive file. *Note
+ block-number::.
+
+'--blocking-factor=BLOCKING'
+'-b BLOCKING'
+
+ Sets the blocking factor 'tar' uses to BLOCKING x 512 bytes per
+ record. *Note Blocking Factor::.
+
+'--bzip2'
+'-j'
+
+ This option tells 'tar' to read or write archives through 'bzip2'.
+ *Note gzip::.
+
+'--check-device'
+ Check device numbers when creating a list of modified files for
+ incremental archiving. This is the default. *Note device
+ numbers::, for a detailed description.
+
+'--checkpoint[=NUMBER]'
+
+ This option directs 'tar' to print periodic checkpoint messages as
+ it reads through the archive. It is intended for when you want a
+ visual indication that 'tar' is still running, but don't want to
+ see '--verbose' output. You can also instruct 'tar' to execute a
+ list of actions on each checkpoint, see '--checkpoint-action'
+ below. For a detailed description, see *note checkpoints::.
+
+'--checkpoint-action=ACTION'
+ Instruct 'tar' to execute an action upon hitting a breakpoint.
+ Here we give only a brief outline. *Note checkpoints::, for a
+ complete description.
+
+ The ACTION argument can be one of the following:
+
+ bell
+ Produce an audible bell on the console.
+
+ dot
+ .
+ Print a single dot on the standard listing stream.
+
+ echo
+ Display a textual message on the standard error, with the
+ status and number of the checkpoint. This is the default.
+
+ echo=STRING
+ Display STRING on the standard error. Before output, the
+ string is subject to meta-character expansion.
+
+ exec=COMMAND
+ Execute the given COMMAND.
+
+ sleep=TIME
+ Wait for TIME seconds.
+
+ ttyout=STRING
+ Output STRING on the current console ('/dev/tty').
+
+ Several '--checkpoint-action' options can be specified. The
+ supplied actions will be executed in order of their appearance in
+ the command line.
+
+ Using '--checkpoint-action' without '--checkpoint' assumes default
+ checkpoint frequency of one checkpoint per 10 records.
+
+'--check-links'
+'-l'
+ If this option was given, '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 (1).
+
+ *Note hard links::.
+
+'--compress'
+'--uncompress'
+'-Z'
+
+ 'tar' will use the 'compress' program when reading or writing the
+ archive. This allows you to directly act on archives while saving
+ space. *Note gzip::.
+
+'--clamp-mtime'
+
+ (See '--mtime'.)
+
+'--confirmation'
+
+ (See '--interactive'.) *Note interactive::.
+
+'--delay-directory-restore'
+
+ Delay setting modification times and permissions of extracted
+ directories until the end of extraction. *Note Directory
+ Modification Times and Permissions::.
+
+'--dereference'
+'-h'
+
+ When reading or writing a file to be archived, 'tar' accesses the
+ file that a symbolic link points to, rather than the symlink
+ itself. *Note dereference::.
+
+'--directory=DIR'
+'-C DIR'
+
+ When this option is specified, 'tar' will change its current
+ directory to DIR before performing any operations. When this
+ option is used during archive creation, it is order sensitive.
+ *Note directory::.
+
+'--exclude=PATTERN'
+
+ When performing operations, 'tar' will skip files that match
+ PATTERN. *Note exclude::.
+
+'--exclude-backups'
+ Exclude backup and lock files. *Note exclude-backups: exclude.
+
+'--exclude-from=FILE'
+'-X FILE'
+
+ Similar to '--exclude', except 'tar' will use the list of patterns
+ in the file FILE. *Note exclude::.
+
+'--exclude-caches'
+
+ Exclude from dump any directory containing a valid cache directory
+ tag file, but still dump the directory node and the tag file
+ itself.
+
+ *Note exclude-caches: exclude.
+
+'--exclude-caches-under'
+
+ Exclude from dump any directory containing a valid cache directory
+ tag file, but still dump the directory node itself.
+
+ *Note exclude::.
+
+'--exclude-caches-all'
+
+ Exclude from dump any directory containing a valid cache directory
+ tag file. *Note exclude::.
+
+'--exclude-ignore=FILE'
+ Before dumping a directory, 'tar' checks if it contains FILE. If
+ so, exclusion patterns are read from this file. The patterns
+ affect only the directory itself. *Note exclude::.
+
+'--exclude-ignore-recursive=FILE'
+ Before dumping a directory, 'tar' checks if it contains FILE. If
+ so, exclusion patterns are read from this file. The patterns
+ affect the directory and all itssubdirectories. *Note exclude::.
+
+'--exclude-tag=FILE'
+
+ Exclude from dump any directory containing file named FILE, but
+ dump the directory node and FILE itself. *Note exclude-tag:
+ exclude.
+
+'--exclude-tag-under=FILE'
+
+ Exclude from dump the contents of any directory containing file
+ named FILE, but dump the directory node itself. *Note
+ exclude-tag-under: exclude.
+
+'--exclude-tag-all=FILE'
+
+ Exclude from dump any directory containing file named FILE. *Note
+ exclude-tag-all: exclude.
+
+'--exclude-vcs'
+
+ Exclude from dump directories and files, that are internal for some
+ widely used version control systems.
+
+ *Note exclude-vcs::.
+
+'--exclude-vcs-ignores'
+ Exclude files that match patterns read from VCS-specific ignore
+ files. Supported files are: '.cvsignore', '.gitignore',
+ '.bzrignore', and '.hgignore'. The semantics of each file is the
+ same as for the corresponding VCS, e.g. patterns read from
+ '.gitignore' affect the directory and all its subdirectories.
+ *Note exclude-vcs-ignores::.
+
+'--file=ARCHIVE'
+'-f ARCHIVE'
+
+ 'tar' will use the file ARCHIVE as the 'tar' archive it performs
+ operations on, rather than 'tar''s compilation dependent default.
+ *Note file tutorial::.
+
+'--files-from=FILE'
+'-T FILE'
+
+ 'tar' will use the contents of FILE as a list of archive members or
+ files to operate on, in addition to those specified on the
+ command-line. *Note files::.
+
+'--force-local'
+
+ Forces 'tar' to interpret the file name given to '--file' as a
+ local file, even if it looks like a remote tape drive name. *Note
+ local and remote archives::.
+
+'--format=FORMAT'
+'-H FORMAT'
+
+ Selects output archive format. FORMAT may be one of the following:
+
+ 'v7'
+ Creates an archive that is compatible with Unix V7 'tar'.
+
+ 'oldgnu'
+ Creates an archive that is compatible with GNU 'tar' version
+ 1.12 or earlier.
+
+ 'gnu'
+ Creates archive in GNU tar 1.13 format. Basically it is the
+ same as 'oldgnu' with the only difference in the way it
+ handles long numeric fields.
+
+ 'ustar'
+ Creates a POSIX.1-1988 compatible archive.
+
+ 'posix'
+ Creates a POSIX.1-2001 archive.
+
+ *Note Formats::, for a detailed discussion of these formats.
+
+'--full-time'
+ This option instructs 'tar' to print file times to their full
+ resolution. Usually this means 1-second resolution, but that
+ depends on the underlying file system. The '--full-time' option
+ takes effect only when detailed output (verbosity level 2 or
+ higher) has been requested using the '--verbose' option, e.g., when
+ listing or extracting archives:
+
+ $ tar -t -v --full-time -f archive.tar
+
+ or, when creating an archive:
+
+ $ tar -c -vv --full-time -f archive.tar .
+
+ Notice, thar when creating the archive you need to specify
+ '--verbose' twice to get a detailed output (*note verbose
+ tutorial::).
+
+'--group=GROUP'
+
+ Files added to the 'tar' archive will have a group ID of GROUP,
+ rather than the group from the source file. GROUP can specify a
+ symbolic name, or a numeric ID, or both as NAME:ID. *Note
+ override::.
+
+ Also see the '--group-map' option and comments for the
+ '--owner=USER' option.
+
+'--group-map=FILE'
+
+ Read owner group translation map from FILE. This option allows to
+ translate only certain group names and/or UIDs. *Note override::,
+ for a detailed description. When used together with '--group'
+ option, the latter affects only those files whose owner group is
+ not listed in the FILE.
+
+ This option does not affect extraction from archives.
+
+'--gzip'
+'--gunzip'
+'--ungzip'
+'-z'
+
+ This option tells 'tar' to read or write archives through 'gzip',
+ allowing 'tar' to directly operate on several kinds of compressed
+ archives transparently. *Note gzip::.
+
+'--hard-dereference'
+ When creating an archive, dereference hard links and store the
+ files they refer to, instead of creating usual hard link members.
+
+ *Note hard links::.
+
+'--help'
+'-?'
+
+ 'tar' will print out a short message summarizing the operations and
+ options to 'tar' and exit. *Note help::.
+
+'--hole-detection=METHOD'
+ Use METHOD to detect holes in sparse files. This option implies
+ '--sparse'. Valid methods are 'seek' and 'raw'. Default is 'seek'
+ with fallback to 'raw' when not applicable. *Note sparse::.
+
+'--ignore-case'
+ Ignore case when matching member or file names with patterns.
+ *Note controlling pattern-matching::.
+
+'--ignore-command-error'
+ Ignore exit codes of subprocesses. *Note Writing to an External
+ Program::.
+
+'--ignore-failed-read'
+
+ Do not exit unsuccessfully merely because an unreadable file was
+ encountered. *Note Ignore Failed Read::.
+
+'--ignore-zeros'
+'-i'
+
+ With this option, 'tar' will ignore zeroed blocks in the archive,
+ which normally signals EOF. *Note Reading::.
+
+'--incremental'
+'-G'
+
+ Informs 'tar' that it is working with an old GNU-format incremental
+ backup archive. It is intended primarily for backwards
+ compatibility only. *Note Incremental Dumps::, for a detailed
+ discussion of incremental archives.
+
+'--index-file=FILE'
+
+ Send verbose output to FILE instead of to standard output.
+
+'--info-script=COMMAND'
+'--new-volume-script=COMMAND'
+'-F COMMAND'
+
+ When 'tar' is performing multi-tape backups, COMMAND is run at the
+ end of each tape. If it exits with nonzero status, 'tar' fails
+ immediately. *Note info-script::, for a detailed discussion of
+ this feature.
+
+'--interactive'
+'--confirmation'
+'-w'
+
+ Specifies that 'tar' should ask the user for confirmation before
+ performing potentially destructive options, such as overwriting
+ files. *Note interactive::.
+
+'--keep-directory-symlink'
+
+ This option changes the behavior of tar when it encounters a
+ symlink with the same name as the directory that it is about to
+ extract. By default, in this case tar would first remove the
+ symlink and then proceed extracting the directory.
+
+ The '--keep-directory-symlink' option disables this behavior and
+ instructs tar to follow symlinks to directories when extracting
+ from the archive.
+
+ It is mainly intended to provide compatibility with the Slackware
+ installation scripts.
+
+'--keep-newer-files'
+
+ Do not replace existing files that are newer than their archive
+ copies when extracting files from an archive.
+
+'--keep-old-files'
+'-k'
+
+ Do not overwrite existing files when extracting files from an
+ archive. Return error if such files exist. See also *note
+ --skip-old-files::.
+
+ *Note Keep Old Files::.
+
+'--label=NAME'
+'-V NAME'
+
+ When creating an archive, instructs 'tar' to write NAME as a name
+ record in the archive. When extracting or listing archives, 'tar'
+ will only operate on archives that have a label matching the
+ pattern specified in NAME. *Note Tape Files::.
+
+'--level=N'
+ Force incremental backup of level N. As of GNU 'tar' version 1.29,
+ the option '--level=0' truncates the snapshot file, thereby forcing
+ the level 0 dump. Other values of N are effectively ignored.
+ *Note --level=0::, for details and examples.
+
+ The use of this option is valid only in conjunction with the
+ '--listed-incremental' option. *Note Incremental Dumps::, for a
+ detailed description.
+
+'--listed-incremental=SNAPSHOT-FILE'
+'-g SNAPSHOT-FILE'
+
+ During a '--create' operation, specifies that the archive that
+ 'tar' creates is a new GNU-format incremental backup, using
+ SNAPSHOT-FILE to determine which files to backup. With other
+ operations, informs 'tar' that the archive is in incremental
+ format. *Note Incremental Dumps::.
+
+'--lzip'
+
+ This option tells 'tar' to read or write archives through 'lzip'.
+ *Note gzip::.
+
+'--lzma'
+
+ This option tells 'tar' to read or write archives through 'lzma'.
+ *Note gzip::.
+
+'--lzop'
+
+ This option tells 'tar' to read or write archives through 'lzop'.
+ *Note gzip::.
+
+'--mode=PERMISSIONS'
+
+ When adding files to an archive, 'tar' will use PERMISSIONS for the
+ archive members, rather than the permissions from the files.
+ PERMISSIONS can be specified either as an octal number or as
+ symbolic permissions, like with 'chmod'. *Note override::.
+
+'--mtime=DATE'
+
+ When adding files to an archive, 'tar' will use DATE as the
+ modification time of members when creating archives, instead of
+ their actual modification times. The value of DATE can be either a
+ textual date representation (*note Date input formats::) or a name
+ of the existing file, starting with '/' or '.'. In the latter
+ case, the modification time of that file is used. *Note
+ override::.
+
+ When '--clamp-mtime' is also specified, files with modification
+ times earlier than DATE will retain their actual modification
+ times, and DATE will only be used for files whose modification
+ times are later than DATE.
+
+'--multi-volume'
+'-M'
+
+ Informs 'tar' that it should create or otherwise operate on a
+ multi-volume 'tar' archive. *Note Using Multiple Tapes::.
+
+'--new-volume-script'
+
+ (see '--info-script')
+
+'--newer=DATE'
+'--after-date=DATE'
+'-N'
+
+ When creating an archive, 'tar' will only add files that have
+ changed since DATE. If DATE begins with '/' or '.', it is taken to
+ be the name of a file whose data modification time specifies the
+ date. *Note after::.
+
+'--newer-mtime=DATE'
+
+ Like '--newer', but add only files whose contents have changed (as
+ opposed to just '--newer', which will also back up files for which
+ any status information has changed). *Note after::.
+
+'--no-acls'
+ Disable the POSIX ACLs support. *Note acls: Extended File
+ Attributes.
+
+'--no-anchored'
+ An exclude pattern can match any subsequence of the name's
+ components. *Note controlling pattern-matching::.
+
+'--no-auto-compress'
+
+ Disables automatic compressed format recognition based on the
+ archive suffix. *Note --auto-compress::. *Note gzip::.
+
+'--no-check-device'
+ Do not check device numbers when creating a list of modified files
+ for incremental archiving. *Note device numbers::, for a detailed
+ description.
+
+'--no-delay-directory-restore'
+
+ Modification times and permissions of extracted directories are set
+ when all files from this directory have been extracted. This is
+ the default. *Note Directory Modification Times and Permissions::.
+
+'--no-ignore-case'
+ Use case-sensitive matching. *Note controlling pattern-matching::.
+
+'--no-ignore-command-error'
+ Print warnings about subprocesses that terminated with a nonzero
+ exit code. *Note Writing to an External Program::.
+
+'--no-null'
+
+ If the '--null' option was given previously, this option cancels
+ its effect, so that any following '--files-from' options will
+ expect their file lists to be newline-terminated.
+
+'--no-overwrite-dir'
+
+ Preserve metadata of existing directories when extracting files
+ from an archive. *Note Overwrite Old Files::.
+
+'--no-quote-chars=STRING'
+ Remove characters listed in STRING from the list of quoted
+ characters set by the previous '--quote-chars' option (*note
+ quoting styles::).
+
+'--no-recursion'
+
+ With this option, 'tar' will not recurse into directories. *Note
+ recurse::.
+
+'--no-same-owner'
+'-o'
+
+ When extracting an archive, do not attempt to preserve the owner
+ specified in the 'tar' archive. This the default behavior for
+ ordinary users.
+
+'--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.
+
+'--no-seek'
+
+ The archive media does not support seeks to arbitrary locations.
+ Usually 'tar' determines automatically whether the archive can be
+ seeked or not. Use this option to disable this mechanism.
+
+'--no-selinux'
+ Disable SELinux context support. *Note SELinux: Extended File
+ Attributes.
+
+'--no-unquote'
+ Treat all input file or member names literally, do not interpret
+ escape sequences. *Note input name quoting::.
+
+'--no-verbatim-files-from'
+
+ Instructs GNU 'tar' to treat each line read from a file list as if
+ it were supplied in the command line. I.e., leading and trailing
+ whitespace is removed and, if the result begins with a dash, it is
+ treated as a GNU 'tar' command line option.
+
+ This is default behavior. This option is provided as a way to
+ restore it after '--verbatim-files-from' option.
+
+ It is implied by the '--no-null' option.
+
+ *Note no-verbatim-files-from::.
+
+'--no-wildcards'
+ Do not use wildcards. *Note controlling pattern-matching::.
+
+'--no-wildcards-match-slash'
+ Wildcards do not match '/'. *Note controlling pattern-matching::.
+
+'--no-xattrs'
+ Disable extended attributes support. *Note xattrs: Extended File
+ Attributes.
+
+'--null'
+
+ When 'tar' is using the '--files-from' option, this option
+ instructs 'tar' to expect file names terminated with NUL, and to
+ process file names verbatim.
+
+ This means that 'tar' correctly works with file names that contain
+ newlines or begin with a dash.
+
+ *Note nul::.
+
+ See also *note verbatim-files-from::.
+
+'--numeric-owner'
+
+ This option will notify 'tar' that it should use numeric user and
+ group IDs when creating a 'tar' file, rather than names. *Note
+ Attributes::.
+
+'-o'
+ The function of this option depends on the action 'tar' is
+ performing. When extracting files, '-o' is a synonym for
+ '--no-same-owner', i.e., it prevents 'tar' from restoring ownership
+ of files being extracted.
+
+ When creating an archive, it is a synonym for '--old-archive'.
+ This behavior is for compatibility with previous versions of GNU
+ 'tar', and will be removed in future releases.
+
+ *Note Changes::, for more information.
+
+'--occurrence[=NUMBER]'
+
+ This option can be used in conjunction with one of the subcommands
+ '--delete', '--diff', '--extract' or '--list' when a list of files
+ is given either on the command line or via '-T' option.
+
+ This option instructs 'tar' to process only the NUMBERth occurrence
+ of each named file. NUMBER defaults to 1, so
+
+ tar -x -f archive.tar --occurrence filename
+
+ will extract the first occurrence of the member 'filename' from
+ 'archive.tar' and will terminate without scanning to the end of the
+ archive.
+
+'--old-archive'
+ Synonym for '--format=v7'.
+
+'--one-file-system'
+ Used when creating an archive. Prevents 'tar' from recursing into
+ directories that are on different file systems from the current
+ directory.
+
+'--one-top-level[=DIR]'
+ Tells 'tar' to create a new directory beneath the extraction
+ directory (or the one passed to '-C') and use it to guard against
+ tarbombs. In the absence of DIR argument, the name of the new
+ directory will be equal to the base name of the archive (file name
+ minus the archive suffix, if recognized). Any member names that do
+ not begin with that directory name (after transformations from
+ '--transform' and '--strip-components') will be prefixed with it.
+ Recognized file name suffixes are '.tar', and any compression
+ suffixes recognizable by *Note --auto-compress::.
+
+'--overwrite'
+
+ Overwrite existing files and directory metadata when extracting
+ files from an archive. *Note Overwrite Old Files::.
+
+'--overwrite-dir'
+
+ Overwrite the metadata of existing directories when extracting
+ files from an archive. *Note Overwrite Old Files::.
+
+'--owner=USER'
+
+ Specifies that 'tar' should use USER as the owner of members when
+ creating archives, instead of the user associated with the source
+ file. USER can specify a symbolic name, or a numeric ID, or both
+ as NAME:ID. *Note override::.
+
+ This option does not affect extraction from archives. See also
+ '--owner-map', below.
+
+'--owner-map=FILE'
+
+ Read owner translation map from FILE. This option allows to
+ translate only certain owner names or UIDs. *Note override::, for
+ a detailed description. When used together with '--owner' option,
+ the latter affects only those files whose owner is not listed in
+ the FILE.
+
+ This option does not affect extraction from archives.
+
+'--pax-option=KEYWORD-LIST'
+ This option enables creation of the archive in POSIX.1-2001 format
+ (*note posix::) and modifies the way 'tar' handles the extended
+ header keywords. KEYWORD-LIST is a comma-separated list of keyword
+ options. *Note PAX keywords::, for a detailed discussion.
+
+'--portability'
+'--old-archive'
+ Synonym for '--format=v7'.
+
+'--posix'
+ Same as '--format=posix'.
+
+'--preserve-order'
+
+ (See '--same-order'; *note Reading::.)
+
+'--preserve-permissions'
+'--same-permissions'
+'-p'
+
+ When 'tar' is extracting an archive, it normally subtracts the
+ users' umask from the permissions specified in the archive and uses
+ that number as the permissions to create the destination file.
+ Specifying this option instructs 'tar' that it should use the
+ permissions directly from the archive. *Note Setting Access
+ Permissions::.
+
+'--quote-chars=STRING'
+ Always quote characters from STRING, even if the selected quoting
+ style would not quote them (*note quoting styles::).
+
+'--quoting-style=STYLE'
+ Set quoting style to use when printing member and file names (*note
+ quoting styles::). Valid STYLE values are: 'literal', 'shell',
+ 'shell-always', 'c', 'escape', 'locale', and 'clocale'. Default
+ quoting style is 'escape', unless overridden while configuring the
+ package.
+
+'--read-full-records'
+'-B'
+
+ Specifies that 'tar' should reblock its input, for reading from
+ pipes on systems with buggy implementations. *Note Reading::.
+
+'--record-size=SIZE[SUF]'
+
+ Instructs 'tar' to use SIZE bytes per record when accessing the
+ archive. The argument can be suffixed with a "size suffix", e.g.
+ '--record-size=10K' for 10 Kilobytes. *Note Table 9.1:
+ size-suffixes, for a list of valid suffixes. *Note Blocking
+ Factor::, for a detailed description of this option.
+
+'--recursion'
+
+ With this option, 'tar' recurses into directories (default). *Note
+ recurse::.
+
+'--recursive-unlink'
+
+ Remove existing directory hierarchies before extracting directories
+ of the same name from the archive. *Note Recursive Unlink::.
+
+'--remove-files'
+
+ Directs 'tar' to remove the source file from the file system after
+ appending it to an archive. *Note remove files::.
+
+'--restrict'
+
+ Disable use of some potentially harmful 'tar' options. Currently
+ this option disables shell invocation from multi-volume menu (*note
+ Using Multiple Tapes::).
+
+'--rmt-command=CMD'
+
+ Notifies 'tar' that it should use CMD instead of the default
+ '/usr/libexec/rmt' (*note Remote Tape Server::).
+
+'--rsh-command=CMD'
+
+ Notifies 'tar' that is should use CMD to communicate with remote
+ devices. *Note Device::.
+
+'--same-order'
+'--preserve-order'
+'-s'
+
+ This option is an optimization for 'tar' when running on machines
+ with small amounts of memory. It informs 'tar' that the list of
+ file arguments has already been sorted to match the order of files
+ in the archive. *Note Reading::.
+
+'--same-owner'
+
+ When extracting an archive, 'tar' will attempt to preserve the
+ owner specified in the 'tar' archive with this option present.
+ This is the default behavior for the superuser; this option has an
+ effect only for ordinary users. *Note Attributes::.
+
+'--same-permissions'
+
+ (See '--preserve-permissions'; *note Setting Access Permissions::.)
+
+'--seek'
+'-n'
+
+ Assume that the archive media supports seeks to arbitrary
+ locations. Usually 'tar' determines automatically whether the
+ archive can be seeked or not. This option is intended for use in
+ cases when such recognition fails. It takes effect only if the
+ archive is open for reading (e.g. with '--list' or '--extract'
+ options).
+
+'--selinux'
+ Enable the SELinux context support. *Note selinux: Extended File
+ Attributes.
+
+'--show-defaults'
+
+ Displays the default options used by 'tar' and exits successfully.
+ This option is intended for use in shell scripts. Here is an
+ example of what you can see using this option:
+
+ $ tar --show-defaults
+ --format=gnu -f- -b20 --quoting-style=escape
+ --rmt-command=/usr/libexec/rmt --rsh-command=/usr/bin/rsh
+
+ Notice, that this option outputs only one line. The example output
+ above has been split to fit page boundaries. *Note defaults::.
+
+'--show-omitted-dirs'
+
+ Instructs 'tar' to mention the directories it is skipping when
+ operating on a 'tar' archive. *Note show-omitted-dirs::.
+
+'--show-snapshot-field-ranges'
+
+ Displays the range of values allowed by this version of 'tar' for
+ each field in the snapshot file, then exits successfully. *Note
+ Snapshot Files::.
+
+'--show-transformed-names'
+'--show-stored-names'
+
+ Display file or member names after applying any transformations
+ (*note transform::). In particular, when used in conjunction with
+ one of the archive creation operations it instructs 'tar' to list
+ the member names stored in the archive, as opposed to the actual
+ file names. *Note listing member and file names::.
+
+'--skip-old-files'
+
+ Do not overwrite existing files when extracting files from an
+ archive. *Note Keep Old Files::.
+
+ This option differs from '--keep-old-files' in that it does not
+ treat such files as an error, instead it just silently avoids
+ overwriting them.
+
+ The '--warning=existing-file' option can be used together with this
+ option to produce warning messages about existing old files (*note
+ warnings::).
+
+'--sort=ORDER'
+ Specify the directory sorting order when reading directories.
+ ORDER may be one of the following:
+
+ 'none'
+ No directory sorting is performed. This is the default.
+
+ 'name'
+ Sort the directory entries on name. The operating system may
+ deliver directory entries in a more or less random order, and
+ sorting them makes archive creation reproducible.
+
+ 'inode'
+ Sort the directory entries on inode number. Sorting
+ directories on inode number may reduce the amount of disk seek
+ operations when creating an archive for some file systems.
+
+'--sparse'
+'-S'
+
+ Invokes a GNU extension when adding files to an archive that
+ handles sparse files efficiently. *Note sparse::.
+
+'--sparse-version=VERSION'
+
+ Specifies the "format version" to use when archiving sparse files.
+ Implies '--sparse'. *Note sparse::. For the description of the
+ supported sparse formats, *Note Sparse Formats::.
+
+'--starting-file=NAME'
+'-K NAME'
+
+ This option affects extraction only; 'tar' will skip extracting
+ files in the archive until it finds one that matches NAME. *Note
+ Scarce::.
+
+'--strip-components=NUMBER'
+ Strip given NUMBER of leading components from file names before
+ extraction. For example, if archive 'archive.tar' contained
+ '/some/file/name', then running
+
+ tar --extract --file archive.tar --strip-components=2
+
+ would extract this file to file 'name'.
+
+ *Note transform::.
+
+'--suffix=SUFFIX'
+
+ Alters the suffix 'tar' uses when backing up files from the default
+ '~'. *Note backup::.
+
+'--tape-length=NUM[SUF]'
+'-L NUM[SUF]'
+
+ Specifies the length of tapes that 'tar' is writing as being
+ NUM x 1024 bytes long. If optional SUF is given, it specifies a
+ multiplicative factor to be used instead of 1024. For example,
+ '-L2M' means 2 megabytes. *Note Table 9.1: size-suffixes, for a
+ list of allowed suffixes. *Note Using Multiple Tapes::, for a
+ detailed discussion of this option.
+
+'--test-label'
+
+ Reads the volume label. If an argument is specified, test whether
+ it matches the volume label. *Note --test-label option::.
+
+'--to-command=COMMAND'
+
+ During extraction 'tar' will pipe extracted files to the standard
+ input of COMMAND. *Note Writing to an External Program::.
+
+'--to-stdout'
+'-O'
+
+ During extraction, 'tar' will extract files to stdout rather than
+ to the file system. *Note Writing to Standard Output::.
+
+'--totals[=SIGNO]'
+
+ Displays the total number of bytes transferred when processing an
+ archive. If an argument is given, these data are displayed on
+ request, when signal SIGNO is delivered to 'tar'. *Note totals::.
+
+'--touch'
+'-m'
+
+ Sets the data modification time of extracted files to the
+ extraction time, rather than the data modification time stored in
+ the archive. *Note Data Modification Times::.
+
+'--transform=SED-EXPR'
+'--xform=SED-EXPR'
+ Transform file or member names using 'sed' replacement expression
+ SED-EXPR. For example,
+
+ $ tar cf archive.tar --transform 's,^\./,usr/,' .
+
+ will add to 'archive' files from the current working directory,
+ replacing initial './' prefix with 'usr/'. For the detailed
+ discussion, *Note transform::.
+
+ To see transformed member names in verbose listings, use
+ '--show-transformed-names' option (*note show-transformed-names::).
+
+'--uncompress'
+
+ (See '--compress', *note gzip::)
+
+'--ungzip'
+
+ (See '--gzip', *note gzip::)
+
+'--unlink-first'
+'-U'
+
+ Directs 'tar' to remove the corresponding file from the file system
+ before extracting it from the archive. *Note Unlink First::.
+
+'--unquote'
+ Enable unquoting input file or member names (default). *Note input
+ name quoting::.
+
+'--use-compress-program=PROG'
+'-I=PROG'
+
+ Instructs 'tar' to access the archive through PROG, which is
+ presumed to be a compression program of some sort. *Note gzip::.
+
+'--utc'
+
+ Display file modification dates in UTC. This option implies
+ '--verbose'.
+
+'--verbatim-files-from'
+
+ Instructs GNU 'tar' to treat each line read from a file list as a
+ file name, even if it starts with a dash.
+
+ File lists are supplied with the '--files-from' ('-T') option. By
+ default, each line read from a file list is first trimmed off the
+ leading and trailing whitespace and, if the result begins with a
+ dash, it is treated as a GNU 'tar' command line option.
+
+ Use the '--verbatim-files-from' option to disable this special
+ handling. This facilitates the use of 'tar' with file lists
+ created by 'file' command.
+
+ This option affects all '--files-from' options that occur after it
+ in the command line. Its effect is reverted by the
+ '--no-verbatim-files-from' option.
+
+ This option is implied by the '--null' option.
+
+ *Note verbatim-files-from::.
+
+'--verbose'
+'-v'
+
+ Specifies that 'tar' should be more verbose about the operations it
+ is performing. This option can be specified multiple times for
+ some operations to increase the amount of information displayed.
+ *Note verbose::.
+
+'--verify'
+'-W'
+
+ Verifies that the archive was correctly written when creating an
+ archive. *Note verify::.
+
+'--version'
+
+ Print information about the program's name, version, origin and
+ legal status, all on standard output, and then exit successfully.
+ *Note help::.
+
+'--volno-file=FILE'
+
+ Used in conjunction with '--multi-volume'. 'tar' will keep track
+ of which volume of a multi-volume archive it is working in FILE.
+ *Note volno-file::.
+
+'--warning=KEYWORD'
+
+ Enable or disable warning messages identified by KEYWORD. The
+ messages are suppressed if KEYWORD is prefixed with 'no-'. *Note
+ warnings::.
+
+'--wildcards'
+ Use wildcards when matching member names with patterns. *Note
+ controlling pattern-matching::.
+
+'--wildcards-match-slash'
+ Wildcards match '/'. *Note controlling pattern-matching::.
+
+'--xattrs'
+ Enable extended attributes support. *Note xattrs: Extended File
+ Attributes.
+
+'--xattrs-exclude=PATTERN'
+ Specify exclude pattern for xattr keys. *Note xattrs-exclude:
+ Extended File Attributes.
+
+'--xattrs-include=PATTERN.'
+ Specify include pattern for xattr keys. PATTERN is a POSIX regular
+ expression, e.g. '--xattrs-exclude='^user\.'' to include only
+ attributes from the user namespace. *Note xattrs-include: Extended
+ File Attributes.
+
+'--xz'
+'-J'
+ Use 'xz' for compressing or decompressing the archives. *Note
+ gzip::.
+
+ ---------- Footnotes ----------
+
+ (1) Earlier versions of GNU 'tar' understood '-l' as a synonym for
+'--one-file-system'. The current semantics, which complies to UNIX98,
+was introduced with version 1.15.91. *Note Changes::, for more
+information.
+
+
+File: tar.info, Node: Short Option Summary, Next: Position-Sensitive Options, Prev: Option Summary, Up: All Options
+
+3.4.3 Short Options Cross Reference
+-----------------------------------
+
+Here is an alphabetized list of all of the short option forms, matching
+them with the equivalent long option.
+
+Short Option Reference
+
+--------------------------------------------------------------------------
+-A *note --concatenate::.
+
+-B *note --read-full-records::.
+
+-C *note --directory::.
+
+-F *note --info-script::.
+
+-G *note --incremental::.
+
+-J *note --xz::.
+
+-K *note --starting-file::.
+
+-L *note --tape-length::.
+
+-M *note --multi-volume::.
+
+-N *note --newer::.
+
+-O *note --to-stdout::.
+
+-P *note --absolute-names::.
+
+-R *note --block-number::.
+
+-S *note --sparse::.
+
+-T *note --files-from::.
+
+-U *note --unlink-first::.
+
+-V *note --label::.
+
+-W *note --verify::.
+
+-X *note --exclude-from::.
+
+-Z *note --compress::.
+
+-b *note --blocking-factor::.
+
+-c *note --create::.
+
+-d *note --compare::.
+
+-f *note --file::.
+
+-g *note --listed-incremental::.
+
+-h *note --dereference::.
+
+-i *note --ignore-zeros::.
+
+-j *note --bzip2::.
+
+-k *note --keep-old-files::.
+
+-l *note --check-links::.
+
+-m *note --touch::.
+
+-o When creating, *note --no-same-owner::, when extracting
+ -- *note --portability::.
+
+ The latter usage is deprecated. It is retained for
+ compatibility with the earlier versions of GNU 'tar'.
+ In future releases '-o' will be equivalent to
+ '--no-same-owner' only.
+
+-p *note --preserve-permissions::.
+
+-r *note --append::.
+
+-s *note --same-order::.
+
+-t *note --list::.
+
+-u *note --update::.
+
+-v *note --verbose::.
+
+-w *note --interactive::.
+
+-x *note --extract::.
+
+-z *note --gzip::.
+
+
+
+File: tar.info, Node: Position-Sensitive Options, Prev: Short Option Summary, Up: All Options
+
+3.4.4 Position-Sensitive Options
+--------------------------------
+
+Some GNU 'tar' options can be used multiple times in the same invocation
+and affect all arguments that appear after them. These are options that
+control how file names are selected and what kind of pattern matching is
+used.
+
+ The most obvious example is the '-C' option. It instructs 'tar' to
+change to the directory given as its argument prior to processing the
+rest of command line (*note directory::). Thus, in the following
+command:
+
+ tar -c -f a.tar -C /etc passwd -C /var log spool
+
+the file 'passwd' will be searched in the directory '/etc', and files
+'log' and 'spool' - in '/var'.
+
+ These options can also be used in a file list supplied with the
+'--files-from' ('-T') option (*note files::). In that case they affect
+all files (patterns) appearing in that file after them and remain in
+effect for any arguments processed after that file. For example, if the
+file 'list.txt' contained:
+
+ README
+ -C src
+ main.c
+
+and 'tar' were invoked as follows:
+
+ tar -c -f a.tar -T list.txt Makefile
+
+then the file 'README' would be looked up in the current working
+directory, and files 'main.c' and 'Makefile' would be looked up in the
+directory 'src'.
+
+ Many options can be prefixed with '--no-' to cancel the effect of the
+original option.
+
+ For example, the '--recursion' option controls whether to recurse in
+the subdirectories. It's counterpart '--no-recursion' disables this.
+Consider the command below. It will store in the archive the directory
+'/usr' with all files and directories that are located in it as well as
+any files and directories in '/var', without recursing into them(1):
+
+ tar -cf a.tar --recursion /usr --no-recursion /var/*
+
+ The following table summarizes all position-sensitive options.
+
+'--directory=DIR'
+'-C DIR'
+ *Note directory::.
+
+'--null'
+'--no-null'
+ *Note nul::.
+
+'--unquote'
+'--no-unquote'
+ *Note input name quoting::.
+
+'--verbatim-files-from'
+'--no-verbatim-files-from'
+ *Note verbatim-files-from::.
+
+'--recursion'
+'--no-recursion'
+ *Note recurse::.
+
+'--anchored'
+'--no-anchored'
+ *Note anchored patterns::.
+
+'--ignore-case'
+'--no-ignore-case'
+ *Note case-insensitive matches::.
+
+'--wildcards'
+'--no-wildcards'
+ *Note controlling pattern-matching::.
+
+'--wildcards-match-slash'
+'--no-wildcards-match-slash'
+ *Note controlling pattern-matching::.
+
+'--exclude'
+ *Note exclude::.
+
+'--exclude-from'
+'-X'
+'--exclude-caches'
+'--exclude-caches-under'
+'--exclude-caches-all'
+'--exclude-tag'
+'--exclude-ignore'
+'--exclude-ignore-recursive'
+'--exclude-tag-under'
+'--exclude-tag-all'
+'--exclude-vcs'
+'--exclude-vcs-ignores'
+'--exclude-backups'
+ *Note exclude::.
+
+ ---------- Footnotes ----------
+
+ (1) The '--recursion' option is the default and is used here for
+clarity. The same example can be written as:
+
+ tar -cf a.tar /usr --no-recursion /var/*
+
+
+File: tar.info, Node: help, Next: defaults, Prev: All Options, Up: tar invocation
+
+3.5 GNU 'tar' documentation
+===========================
+
+Being careful, the first thing is really checking that you are using GNU
+'tar', indeed. The '--version' option causes 'tar' to print information
+about its name, version, origin and legal status, all on standard
+output, and then exit successfully. For example, 'tar --version' might
+print:
+
+ tar (GNU tar) 1.29
+ Copyright (C) 2013-2016 Free Software Foundation, Inc.
+ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
+ This is free software: you are free to change and redistribute it.
+ There is NO WARRANTY, to the extent permitted by law.
+
+ Written by John Gilmore and Jay Fenlason.
+
+The first occurrence of 'tar' in the result above is the program name in
+the package (for example, 'rmt' is another program), while the second
+occurrence of 'tar' is the name of the package itself, containing
+possibly many programs. The package is currently named 'tar', after the
+name of the main program it contains(1).
+
+ Another thing you might want to do is checking the spelling or
+meaning of some particular 'tar' option, without resorting to this
+manual, for once you have carefully read it. GNU 'tar' has a short help
+feature, triggerable through the '--help' option. By using this option,
+'tar' will print a usage message listing all available options on
+standard output, then exit successfully, without doing anything else and
+ignoring all other options. Even if this is only a brief summary, it
+may be several screens long. So, if you are not using some kind of
+scrollable window, you might prefer to use something like:
+
+ $ tar --help | less
+
+presuming, here, that you like using 'less' for a pager. Other popular
+pagers are 'more' and 'pg'. If you know about some KEYWORD which
+interests you and do not want to read all the '--help' output, another
+common idiom is doing:
+
+ tar --help | grep KEYWORD
+
+for getting only the pertinent lines. Notice, however, that some 'tar'
+options have long description lines and the above command will list only
+the first of them.
+
+ The exact look of the option summary displayed by 'tar --help' is
+configurable. *Note Configuring Help Summary::, for a detailed
+description.
+
+ If you only wish to check the spelling of an option, running 'tar
+--usage' may be a better choice. This will display a terse list of
+'tar' options without accompanying explanations.
+
+ 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 'tar' manual in some form. This
+manual is available in a variety of forms from
+<http://www.gnu.org/software/tar/manual>. It may be printed out of the
+GNU 'tar' distribution, provided you have TeX already installed
+somewhere, and a laser printer around. Just configure the distribution,
+execute the command 'make dvi', then print 'doc/tar.dvi' the usual way
+(contact your local guru to know how). If GNU 'tar' has been
+conveniently installed at your place, this manual is also available in
+interactive, hypertextual form as an Info file. Just call 'info tar'
+or, if you do not have the 'info' program handy, use the Info reader
+provided within GNU Emacs, calling 'tar' from the main Info menu.
+
+ There is currently no 'man' page for GNU 'tar'. If you observe such
+a 'man' page on the system you are running, either it does not belong to
+GNU 'tar', or it has not been produced by GNU. Some package maintainers
+convert 'tar --help' output to a man page, using 'help2man'. In any
+case, please bear in mind that the authoritative source of information
+about GNU 'tar' is this Texinfo documentation.
+
+ ---------- Footnotes ----------
+
+ (1) There are plans to merge the 'cpio' and 'tar' packages into a
+single one which would be called 'paxutils'. So, who knows if, one of
+this days, the '--version' would not output 'tar (GNU paxutils) 3.2'.
+
+
+File: tar.info, Node: defaults, Next: verbose, Prev: help, Up: tar invocation
+
+3.6 Obtaining GNU 'tar' default values
+======================================
+
+GNU 'tar' has some predefined defaults that are used when you do not
+explicitly specify another values. To obtain a list of such defaults,
+use '--show-defaults' option. This will output the values in the form
+of 'tar' command line options:
+
+ $ tar --show-defaults
+ --format=gnu -f- -b20 --quoting-style=escape
+ --rmt-command=/etc/rmt --rsh-command=/usr/bin/rsh
+
+Notice, that this option outputs only one line. The example output
+above has been split to fit page boundaries.
+
+The above output shows that this version of GNU 'tar' defaults to using
+'gnu' archive format (*note Formats::), it uses standard output as the
+archive, if no '--file' option has been given (*note file tutorial::),
+the default blocking factor is 20 (*note Blocking Factor::). It also
+shows the default locations where 'tar' will look for 'rmt' and 'rsh'
+binaries.
+
+
+File: tar.info, Node: verbose, Next: checkpoints, Prev: defaults, Up: tar invocation
+
+3.7 Checking 'tar' progress
+===========================
+
+Typically, 'tar' performs most operations without reporting any
+information to the user except error messages. When using 'tar' with
+many options, particularly ones with complicated or difficult-to-predict
+behavior, it is possible to make serious mistakes. 'tar' provides
+several options that make observing 'tar' easier. These options cause
+'tar' to print information as it progresses in its job, and you might
+want to use them just for being more careful about what is going on, or
+merely for entertaining yourself. If you have encountered a problem
+when operating on an archive, however, you may need more information
+than just an error message in order to solve the problem. The following
+options can be helpful diagnostic tools.
+
+ Normally, the '--list' ('-t') command to list an archive prints just
+the file names (one per line) and the other commands are silent. When
+used with most operations, the '--verbose' ('-v') option causes 'tar' to
+print the name of each file or archive member as it is processed. This
+and the other options which make 'tar' print status information can be
+useful in monitoring 'tar'.
+
+ With '--create' or '--extract', '--verbose' used once just prints the
+names of the files or members as they are processed. Using it twice
+causes 'tar' to print a longer listing (*Note verbose member listing::,
+for the description) for each member. Since '--list' already prints the
+names of the members, '--verbose' used once with '--list' causes 'tar'
+to print an 'ls -l' type listing of the files in the archive. The
+following examples both extract members with long list output:
+
+ $ tar --extract --file=archive.tar --verbose --verbose
+ $ tar xvvf archive.tar
+
+ Verbose output appears on the standard output except when an archive
+is being written to the standard output, as with 'tar --create --file=-
+--verbose' ('tar cvf -', or even 'tar cv'--if the installer let standard
+output be the default archive). In that case 'tar' writes verbose
+output to the standard error stream.
+
+ If '--index-file=FILE' is specified, 'tar' sends verbose output to
+FILE rather than to standard output or standard error.
+
+ The '--totals' option causes '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.:
+
+ $ tar -c -f archive.tar --totals /home
+ Total bytes written: 7924664320 (7.4GiB, 85MiB/s)
+
+ When reading an archive, this option displays the number of bytes
+read:
+
+ $ tar -x -f archive.tar --totals
+ Total bytes read: 7924664320 (7.4GiB, 95MiB/s)
+
+ Finally, when deleting from an archive, the '--totals' option
+displays both numbers plus number of bytes removed from the archive:
+
+ $ 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
+
+ You can also obtain this information on request. When '--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:
+
+'--totals=SIGNO'
+ Print statistics upon delivery of signal SIGNO. Valid arguments
+ are: 'SIGHUP', 'SIGQUIT', 'SIGINT', 'SIGUSR1' and 'SIGUSR2'.
+ Shortened names without 'SIG' prefix are also accepted.
+
+ Both forms of '--totals' option can be used simultaneously. Thus,
+'tar -x --totals --totals=USR1' instructs 'tar' to extract all members
+from its default archive and print statistics after finishing the
+extraction, as well as when receiving signal 'SIGUSR1'.
+
+ The '--checkpoint' option prints an occasional message as 'tar' reads
+or writes the archive. It is designed for those who don't need the more
+detailed (and voluminous) output of '--block-number' ('-R'), but do want
+visual confirmation that '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:
+
+ $ tar -c --checkpoint=1000 /var
+ tar: Write checkpoint 1000
+ tar: Write checkpoint 2000
+ tar: Write checkpoint 3000
+
+ This example shows the default checkpoint message used by 'tar'. If
+you place a dot immediately after the equal sign, it will print a '.' at
+each checkpoint(1). For example:
+
+ $ tar -c --checkpoint=.1000 /var
+ ...
+
+ The '--checkpoint' option provides a flexible mechanism for executing
+arbitrary actions upon hitting checkpoints, see the next section (*note
+checkpoints::), for more information on it.
+
+ The '--show-omitted-dirs' option, when reading an archive--with
+'--list' or '--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 '--exclude=PATTERN' option, or some other reason.
+
+ If '--block-number' ('-R') is used, 'tar' prints, along with every
+message it would normally produce, the block number within the archive
+where the message was triggered. Also, supplementary messages are
+triggered when reading blocks full of NULs, or when hitting end of file
+on the archive. As of now, if the archive is properly terminated with a
+NUL block, the reading of the file may stop before end of file is met,
+so the position of end of file will not usually show when
+'--block-number' ('-R') is used. Note that GNU 'tar' drains the archive
+before exiting when reading the archive from a pipe.
+
+ This option is especially useful when reading damaged archives, since
+it helps pinpoint the damaged sections. It can also be used with
+'--list' ('-t') when listing a file-system backup tape, allowing you to
+choose among several backup tapes when retrieving a file later, in favor
+of the tape where the file appears earliest (closest to the front of the
+tape). *Note backup::.
+
+ ---------- Footnotes ----------
+
+ (1) This is actually a shortcut for '--checkpoint=N
+--checkpoint-action=dot'. *Note dot: checkpoints.
+
+
+File: tar.info, Node: checkpoints, Next: warnings, Prev: verbose, Up: tar invocation
+
+3.8 Checkpoints
+===============
+
+A "checkpoint" is a moment of time before writing Nth record to the
+archive (a "write checkpoint"), or before reading Nth record from the
+archive (a "read checkpoint"). Checkpoints allow to periodically
+execute arbitrary actions.
+
+ The checkpoint facility is enabled using the following option:
+
+'--checkpoint[=N]'
+ Schedule checkpoints before writing or reading each Nth record.
+ The default value for N is 10.
+
+ A list of arbitrary "actions" can be executed at each checkpoint.
+These actions include: pausing, displaying textual messages, and
+executing arbitrary external programs. Actions are defined using the
+'--checkpoint-action' option.
+
+'--checkpoint-action=ACTION'
+ Execute an ACTION at each checkpoint.
+
+ The simplest value of ACTION is 'echo'. It instructs 'tar' to
+display the default message on the standard error stream upon arriving
+at each checkpoint. The default message is (in POSIX locale) 'Write
+checkpoint N', for write checkpoints, and 'Read checkpoint N', for read
+checkpoints. Here, N represents ordinal number of the checkpoint.
+
+ In another locales, translated versions of this message are used.
+
+ This is the default action, so running:
+
+ $ tar -c --checkpoint=1000 --checkpoint-action=echo /var
+
+is equivalent to:
+
+ $ tar -c --checkpoint=1000 /var
+
+ The 'echo' action also allows to supply a customized message. You do
+so by placing an equals sign and the message right after it, e.g.:
+
+ --checkpoint-action="echo=Hit %s checkpoint #%u"
+
+ The '%s' and '%u' in the above example are "format specifiers". The
+'%s' specifier is replaced with the "type" of the checkpoint: 'write' or
+'read' (or a corresponding translated version in locales other than
+POSIX). The '%u' specifier is replaced with the ordinal number of the
+checkpoint. Thus, the above example could produce the following output
+when used with the '--create' option:
+
+ tar: Hit write checkpoint #10
+ tar: Hit write checkpoint #20
+ tar: Hit write checkpoint #30
+
+ The complete list of available format specifiers follows. Some of
+them can take optional arguments. These arguments, if given, are
+supplied in curly braces between the percent sign and the specifier
+letter.
+
+'%s'
+ Print type of the checkpoint ('write' or 'read').
+
+'%u'
+ Print number of the checkpoint.
+
+'%{r,w,d}T'
+ Print number of bytes transferred so far and approximate transfer
+ speed. Optional arguments supply prefixes to be used before number
+ of bytes read, written and deleted, correspondingly. If absent,
+ they default to 'R'. 'W', 'D'. Any or all of them can be omitted,
+ so, that e.g. '%{}T' means to print corresponding statistics
+ without any prefixes. Any surplus arguments, if present, are
+ silently ignored.
+
+ $ tar --delete -f f.tar --checkpoint-action=echo="#%u: %T" main.c
+ tar: #1: R: 0 (0B, 0B/s),W: 0 (0B, 0B/s),D: 0
+ tar: #2: R: 10240 (10KiB, 19MiB/s),W: 0 (0B, 0B/s),D: 10240
+
+ See also the 'totals' action, described below.
+
+'%{FMT}t'
+ Output current local time using FMT as format for 'strftime' (*note
+ strftime: (strftime(3))strftime.). The '{FMT}' part is optional.
+ If not present, the default format is '%c', i.e. the preferred
+ date and time representation for the current locale.
+
+'%{N}*'
+ Pad output with spaces to the Nth column. If the '{N}' part is
+ omitted, the current screen width is assumed.
+
+'%c'
+ This is a shortcut for '%{%Y-%m-%d %H:%M:%S}t: %ds,
+ %{read,wrote}T%*\r', intended mainly for use with 'ttyout' action
+ (see below).
+
+ Aside from format expansion, the message string is subject to
+"unquoting", during which the backslash "escape sequences" are replaced
+with their corresponding ASCII characters (*note escape sequences::).
+E.g. the following action will produce an audible bell and the message
+described above at each checkpoint:
+
+ --checkpoint-action='echo=\aHit %s checkpoint #%u'
+
+ There is also a special action which produces an audible signal:
+'bell'. It is not equivalent to 'echo='\a'', because 'bell' sends the
+bell directly to the console ('/dev/tty'), whereas 'echo='\a'' sends it
+to the standard error.
+
+ The 'ttyout=STRING' action outputs STRING to '/dev/tty', so it can be
+used even if the standard output is redirected elsewhere. The STRING is
+subject to the same modifications as with 'echo' action. In contrast to
+the latter, 'ttyout' does not prepend 'tar' executable name to the
+string, nor does it output a newline after it. For example, the
+following action will print the checkpoint message at the same screen
+line, overwriting any previous message:
+
+ --checkpoint-action="ttyout=Hit %s checkpoint #%u%*\r"
+
+Notice the use of '%*' specifier to clear out any eventual remains of
+the prior output line. As as more complex example, consider this:
+
+ --checkpoint-action=ttyout='%{%Y-%m-%d %H:%M:%S}t (%d sec): #%u, %T%*\r'
+
+This prints the current local time, number of seconds expired since tar
+was started, the checkpoint ordinal number, transferred bytes and
+average computed I/O speed.
+
+ Another available checkpoint action is 'dot' (or '.'). It instructs
+'tar' to print a single dot on the standard listing stream, e.g.:
+
+ $ tar -c --checkpoint=1000 --checkpoint-action=dot /var
+ ...
+
+ For compatibility with previous GNU 'tar' versions, this action can
+be abbreviated by placing a dot in front of the checkpoint frequency, as
+shown in the previous section.
+
+ The 'totals' action prints the total number of bytes transferred so
+far. The format of the data is the same as for the '--totals' option
+(*note totals::). See also '%T' format specifier of the 'echo' or
+'ttyout' action.
+
+ Yet another action, 'sleep', pauses 'tar' for a specified amount of
+seconds. The following example will stop for 30 seconds at each
+checkpoint:
+
+ $ tar -c --checkpoint=1000 --checkpoint-action=sleep=30
+
+ Finally, the 'exec' action executes a given external command. For
+example:
+
+ $ tar -c --checkpoint=1000 --checkpoint-action=exec=/sbin/cpoint
+
+ The supplied command can be any valid command invocation, with or
+without additional command line arguments. If it does contain
+arguments, don't forget to quote it to prevent it from being split by
+the shell. *Note Running External Commands: external, for more detail.
+
+ The command gets a copy of 'tar''s environment plus the following
+variables:
+
+'TAR_VERSION'
+ GNU 'tar' version number.
+
+'TAR_ARCHIVE'
+ The name of the archive 'tar' is processing.
+
+'TAR_BLOCKING_FACTOR'
+ Current blocking factor (*note Blocking::).
+
+'TAR_CHECKPOINT'
+ Number of the checkpoint.
+
+'TAR_SUBCOMMAND'
+ A short option describing the operation 'tar' is executing. *Note
+ Operations::, for a complete list of subcommand options.
+
+'TAR_FORMAT'
+ Format of the archive being processed. *Note Formats::, for a
+ complete list of archive format names.
+
+ These environment variables can also be passed as arguments to the
+command, provided that they are properly escaped, for example:
+
+ tar -c -f arc.tar \
+ --checkpoint-action='exec=/sbin/cpoint $TAR_CHECKPOINT'
+
+Notice single quotes to prevent variable names from being expanded by
+the shell when invoking 'tar'.
+
+ Any number of actions can be defined, by supplying several
+'--checkpoint-action' options in the command line. For example, the
+command below displays two messages, pauses execution for 30 seconds and
+executes the '/sbin/cpoint' script:
+
+ $ tar -c -f arc.tar \
+ --checkpoint-action='\aecho=Hit %s checkpoint #%u' \
+ --checkpoint-action='echo=Sleeping for 30 seconds' \
+ --checkpoint-action='sleep=30' \
+ --checkpoint-action='exec=/sbin/cpoint'
+
+ This example also illustrates the fact that '--checkpoint-action' can
+be used without '--checkpoint'. In this case, the default checkpoint
+frequency (at each 10th record) is assumed.
+
+
+File: tar.info, Node: warnings, Next: interactive, Prev: checkpoints, Up: tar invocation
+
+3.9 Controlling Warning Messages
+================================
+
+Sometimes, while performing the requested task, GNU 'tar' notices some
+conditions that are not exactly errors, but which the user should be
+aware of. When this happens, 'tar' issues a "warning message"
+describing the condition. Warning messages are output to the standard
+error and they do not affect the exit code of 'tar' command.
+
+ GNU 'tar' allows the user to suppress some or all of its warning
+messages:
+
+'--warning=KEYWORD'
+ Control display of the warning messages identified by KEYWORD. If
+ KEYWORD starts with the prefix 'no-', such messages are suppressed.
+ Otherwise, they are enabled.
+
+ Multiple '--warning' messages accumulate.
+
+ The tables below list allowed values for KEYWORD along with the
+ warning messages they control.
+
+Keywords controlling 'tar' operation
+------------------------------------
+
+all
+ Enable all warning messages. This is the default.
+none
+ Disable all warning messages.
+filename-with-nuls
+ '%s: file name read contains nul character'
+alone-zero-block
+ 'A lone zero block at %s'
+
+Keywords applicable for 'tar --create'
+--------------------------------------
+
+cachedir
+ '%s: contains a cache directory tag %s; %s'
+file-shrank
+ '%s: File shrank by %s bytes; padding with zeros'
+xdev
+ '%s: file is on a different filesystem; not dumped'
+file-ignored
+ '%s: Unknown file type; file ignored'
+ '%s: socket ignored'
+ '%s: door ignored'
+file-unchanged
+ '%s: file is unchanged; not dumped'
+ignore-archive
+ '%s: file is the archive; not dumped'
+file-removed
+ '%s: File removed before we read it'
+file-changed
+ '%s: file changed as we read it'
+
+Keywords applicable for 'tar --extract'
+---------------------------------------
+
+existing-file
+ '%s: skipping existing file'
+timestamp
+ '%s: implausibly old time stamp %s'
+ '%s: time stamp %s is %s s in the future'
+contiguous-cast
+ 'Extracting contiguous files as regular files'
+symlink-cast
+ 'Attempting extraction of symbolic links as hard links'
+unknown-cast
+ '%s: Unknown file type '%c', extracted as normal file'
+ignore-newer
+ 'Current %s is newer or same age'
+unknown-keyword
+ 'Ignoring unknown extended header keyword '%s''
+decompress-program
+ Controls verbose description of failures occurring when trying to
+ run alternative decompressor programs (*note alternative
+ decompression programs::). This warning is disabled by default
+ (unless '--verbose' is used). A common example of what you can get
+ when using this warning is:
+
+ $ tar --warning=decompress-program -x -f archive.Z
+ tar (child): cannot run compress: No such file or directory
+ tar (child): trying gzip
+
+ This means that 'tar' first tried to decompress 'archive.Z' using
+ 'compress', and, when that failed, switched to 'gzip'.
+record-size
+ 'Record size = %lu blocks'
+
+Keywords controlling incremental extraction:
+--------------------------------------------
+
+rename-directory
+ '%s: Directory has been renamed from %s'
+ '%s: Directory has been renamed'
+new-directory
+ '%s: Directory is new'
+xdev
+ '%s: directory is on a different device: not purging'
+bad-dumpdir
+ 'Malformed dumpdir: 'X' never used'
+
+
+File: tar.info, Node: interactive, Next: external, Prev: warnings, Up: tar invocation
+
+3.10 Asking for Confirmation During Operations
+==============================================
+
+Typically, 'tar' carries out a command without stopping for further
+instructions. In some situations however, you may want to exclude some
+files and archive members from the operation (for instance if disk or
+storage space is tight). You can do this by excluding certain files
+automatically (*note Choosing::), or by performing an operation
+interactively, using the '--interactive' ('-w') option. 'tar' also
+accepts '--confirmation' for this option.
+
+ When the '--interactive' ('-w') option is specified, before reading,
+writing, or deleting files, 'tar' first prints a message for each such
+file, telling what operation it intends to take, then asks for
+confirmation on the terminal. The actions which require confirmation
+include adding a file to the archive, extracting a file from the
+archive, deleting a file from the archive, and deleting a file from
+disk. To confirm the action, you must type a line of input beginning
+with 'y'. If your input line begins with anything other than 'y', 'tar'
+skips that file.
+
+ If 'tar' is reading the archive from the standard input, 'tar' opens
+the file '/dev/tty' to support the interactive communications.
+
+ Verbose output is normally sent to standard output, separate from
+other error messages. However, if the archive is produced directly on
+standard output, then verbose output is mixed with errors on 'stderr'.
+Producing the archive on standard output may be used as a way to avoid
+using disk space, when the archive is soon to be consumed by another
+process reading it, say. Some people felt the need of producing an
+archive on stdout, still willing to segregate between verbose output and
+error output. A possible approach would be using a named pipe to
+receive the archive, and having the consumer process to read from that
+named pipe. This has the advantage of letting standard output free to
+receive verbose output, all separate from errors.
+
+
+File: tar.info, Node: external, Prev: interactive, Up: tar invocation
+
+3.11 Running External Commands
+==============================
+
+Certain GNU 'tar' operations imply running external commands that you
+supply on the command line. One of such operations is checkpointing,
+described above (*note checkpoint exec::). Another example of this
+feature is the '-I' option, which allows you to supply the program to
+use for compressing or decompressing the archive (*note
+use-compress-program::).
+
+ Whenever such operation is requested, 'tar' first splits the supplied
+command into words much like the shell does. It then treats the first
+word as the name of the program or the shell script to execute and the
+rest of words as its command line arguments. The program, unless given
+as an absolute file name, is searched in the shell's 'PATH'.
+
+ Any additional information is normally supplied to external commands
+in environment variables, specific to each particular operation. For
+example, the '--checkpoint-action=exec' option, defines the
+'TAR_ARCHIVE' variable to the name of the archive being worked upon.
+You can, should the need be, use these variables in the command line of
+the external command. For example:
+
+ $ tar -x -f archive.tar \
+ --checkpoint-action=exec='printf "%04d in %32s\r" $TAR_CHECKPOINT $TAR_ARCHIVE'
+
+This command prints for each checkpoint its number and the name of the
+archive, using the same output line on the screen.
+
+ Notice the use of single quotes to prevent variable names from being
+expanded by the shell when invoking 'tar'.
+
+
+File: tar.info, Node: operations, Next: Backups, Prev: tar invocation, Up: Top
+
+4 GNU 'tar' Operations
+**********************
+
+* Menu:
+
+* Basic tar::
+* Advanced tar::
+* create options::
+* extract options::
+* backup::
+* Applications::
+* looking ahead::
+
+
+File: tar.info, Node: Basic tar, Next: Advanced tar, Up: operations
+
+4.1 Basic GNU 'tar' Operations
+==============================
+
+The basic 'tar' operations, '--create' ('-c'), '--list' ('-t') and
+'--extract' ('--get', '-x'), are currently presented and described in
+the tutorial chapter of this manual. This section provides some
+complementary notes for these operations.
+
+'--create'
+'-c'
+
+ Creating an empty archive would have some kind of elegance. One
+ can initialize an empty archive and later use '--append' ('-r') for
+ adding all members. Some applications would not welcome making an
+ exception in the way of adding the first archive member. On the
+ other hand, many people reported that it is dangerously too easy
+ for 'tar' to destroy a magnetic tape with an empty archive(1). The
+ two most common errors are:
+
+ 1. Mistakingly using 'create' instead of 'extract', when the
+ intent was to extract the full contents of an archive. This
+ error is likely: keys 'c' and 'x' are right next to each other
+ on the QWERTY keyboard. Instead of being unpacked, the
+ archive then gets wholly destroyed. When users speak about
+ "exploding" an archive, they usually mean something else :-).
+
+ 2. Forgetting the argument to 'file', when the intent was to
+ create an archive with a single file in it. This error is
+ likely because a tired user can easily add the 'f' key to the
+ cluster of option letters, by the mere force of habit, without
+ realizing the full consequence of doing so. The usual
+ consequence is that the single file, which was meant to be
+ saved, is rather destroyed.
+
+ So, recognizing the likelihood and the catastrophic nature of these
+ errors, GNU 'tar' now takes some distance from elegance, and
+ cowardly refuses to create an archive when '--create' option is
+ given, there are no arguments besides options, and '--files-from'
+ ('-T') option is _not_ used. To get around the cautiousness of GNU
+ 'tar' and nevertheless create an archive with nothing in it, one
+ may still use, as the value for the '--files-from' option, a file
+ with no names in it, as shown in the following commands:
+
+ tar --create --file=empty-archive.tar --files-from=/dev/null
+ tar -cf empty-archive.tar -T /dev/null
+
+'--extract'
+'--get'
+'-x'
+
+ A socket is stored, within a GNU 'tar' archive, as a pipe.
+
+'--list (-t)'
+
+ GNU 'tar' now shows dates as '1996-08-30', while it used to show
+ them as 'Aug 30 1996'. Preferably, people should get used to ISO
+ 8601 dates. Local American dates should 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 <http://www.cl.cam.ac.uk/~mgk25/iso-time.html> if you are
+ curious, it contains a detailed explanation of the ISO 8601
+ standard.
+
+ ---------- Footnotes ----------
+
+ (1) This is well described in 'Unix-haters Handbook', by Simson
+Garfinkel, Daniel Weise & Steven Strassmann, IDG Books, ISBN
+1-56884-203-1.
+
+
+File: tar.info, Node: Advanced tar, Next: create options, Prev: Basic tar, Up: operations
+
+4.2 Advanced GNU 'tar' Operations
+=================================
+
+Now that you have learned the basics of using GNU 'tar', you may want to
+learn about further ways in which 'tar' can help you.
+
+ This chapter presents five, more advanced operations which you
+probably won't use on a daily basis, but which serve more specialized
+functions. We also explain the different styles of options and why you
+might want to use one or another, or a combination of them in your 'tar'
+commands. Additionally, this chapter includes options which allow you
+to define the output from 'tar' more carefully, and provide help and
+error correction in special circumstances.
+
+* Menu:
+
+* Operations::
+* append::
+* update::
+* concatenate::
+* delete::
+* compare::
+
+
+File: tar.info, Node: Operations, Next: append, Up: Advanced tar
+
+4.2.1 The Five Advanced 'tar' Operations
+----------------------------------------
+
+In the last chapter, you learned about the first three operations to
+'tar'. This chapter presents the remaining five operations to 'tar':
+'--append', '--update', '--concatenate', '--delete', and '--compare'.
+
+ You are not likely to use these operations as frequently as those
+covered in the last chapter; however, since they perform specialized
+functions, they are quite useful when you do need to use them. We will
+give examples using the same directory and files that you created in the
+last chapter. As you may recall, the directory is called 'practice',
+the files are 'jazz', 'blues', 'folk', and the two archive files you
+created are 'collection.tar' and 'music.tar'.
+
+ We will also use the archive files 'afiles.tar' and 'bfiles.tar'.
+The archive 'afiles.tar' contains the members 'apple', 'angst', and
+'aspic'; 'bfiles.tar' contains the members './birds', 'baboon', and
+'./box'.
+
+ Unless we state otherwise, all practicing you do and examples you
+follow in this chapter will take place in the 'practice' directory that
+you created in the previous chapter; see *note prepare for examples::.
+(Below in this section, we will remind you of the state of the examples
+where the last chapter left them.)
+
+ The five operations that we will cover in this chapter are:
+
+'--append'
+'-r'
+ Add new entries to an archive that already exists.
+'--update'
+'-u'
+ Add more recent copies of archive members to the end of an archive,
+ if they exist.
+'--concatenate'
+'--catenate'
+'-A'
+ Add one or more pre-existing archives to the end of another
+ archive.
+'--delete'
+ Delete items from an archive (does not work on tapes).
+'--compare'
+'--diff'
+'-d'
+ Compare archive members to their counterparts in the file system.
+
+
+File: tar.info, Node: append, Next: update, Prev: Operations, Up: Advanced tar
+
+4.2.2 How to Add Files to Existing Archives: '--append'
+-------------------------------------------------------
+
+If you want to add files to an existing archive, you don't need to
+create a new archive; you can use '--append' ('-r'). The archive must
+already exist in order to use '--append'. (A related operation is the
+'--update' operation; you can use this to add newer versions of archive
+members to an existing archive. To learn how to do this with
+'--update', *note update::.)
+
+ If you use '--append' to add a file that has the same name as an
+archive member to an archive containing that archive member, then the
+old member is not deleted. What does happen, however, is somewhat
+complex. 'tar' _allows_ you to have infinite number of files with the
+same name. Some operations treat these same-named members no
+differently than any other set of archive members: for example, if you
+view an archive with '--list' ('-t'), you will see all of those members
+listed, with their data modification times, owners, etc.
+
+ Other operations don't deal with these members as perfectly as you
+might prefer; if you were to use '--extract' to extract the archive,
+only the most recently added copy of a member with the same name as
+other members would end up in the working directory. This is because
+'--extract' extracts an archive in the order the members appeared in the
+archive; the most recently archived members will be extracted last.
+Additionally, an extracted member will _replace_ a file of the same name
+which existed in the directory already, and 'tar' will not prompt you
+about this(1). Thus, only the most recently archived member will end up
+being extracted, as it will replace the one extracted before it, and so
+on.
+
+ There exists a special option that allows you to get around this
+behavior and extract (or list) only a particular copy of the file. This
+is '--occurrence' option. If you run 'tar' with this option, it will
+extract only the first copy of the file. You may also give this option
+an argument specifying the number of copy to be extracted. Thus, for
+example if the archive 'archive.tar' contained three copies of file
+'myfile', then the command
+
+ tar --extract --file archive.tar --occurrence=2 myfile
+
+would extract only the second copy. *Note --occurrence: Option Summary,
+for the description of '--occurrence' option.
+
+ If you want to replace an archive member, use '--delete' to delete
+the member you want to remove from the archive, and then use '--append'
+to add the member you want to be in the archive. Note that you can not
+change the order of the archive; the most recently added member will
+still appear last. In this sense, you cannot truly "replace" one member
+with another. (Replacing one member with another will not work on
+certain types of media, such as tapes; see *note delete:: and *note
+Media::, for more information.)
+
+* Menu:
+
+* appending files:: Appending Files to an Archive
+* multiple::
+
+ ---------- Footnotes ----------
+
+ (1) Unless you give it '--keep-old-files' (or '--skip-old-files')
+option, or the disk copy is newer than the one in the archive and you
+invoke 'tar' with '--keep-newer-files' option.
+
+
+File: tar.info, Node: appending files, Next: multiple, Up: append
+
+4.2.2.1 Appending Files to an Archive
+.....................................
+
+The simplest way to add a file to an already existing archive is the
+'--append' ('-r') operation, which writes specified files into the
+archive whether or not they are already among the archived files.
+
+ When you use '--append', you _must_ specify file name arguments, as
+there is no default. If you specify a file that already exists in the
+archive, another copy of the file will be added to the end of the
+archive. As with other operations, the member names of the newly added
+files will be exactly the same as their names given on the command line.
+The '--verbose' ('-v') option will print out the names of the files as
+they are written into the archive.
+
+ '--append' cannot be performed on some tape drives, unfortunately,
+due to deficiencies in the formats those tape drives use. The archive
+must be a valid 'tar' archive, or else the results of using this
+operation will be unpredictable. *Note Media::.
+
+ To demonstrate using '--append' to add a file to an archive, create a
+file called 'rock' in the 'practice' directory. Make sure you are in
+the 'practice' directory. Then, run the following 'tar' command to add
+'rock' to 'collection.tar':
+
+ $ tar --append --file=collection.tar rock
+
+If you now use the '--list' ('-t') operation, you will see that 'rock'
+has been added to the archive:
+
+ $ tar --list --file=collection.tar
+ -rw-r--r-- me/user 28 1996-10-18 16:31 jazz
+ -rw-r--r-- me/user 21 1996-09-23 16:44 blues
+ -rw-r--r-- me/user 20 1996-09-23 16:44 folk
+ -rw-r--r-- me/user 20 1996-09-23 16:44 rock
+
+
+File: tar.info, Node: multiple, Prev: appending files, Up: append
+
+4.2.2.2 Multiple Members with the Same Name
+...........................................
+
+You can use '--append' ('-r') to add copies of files which have been
+updated since the archive was created. (However, we do not recommend
+doing this since there is another 'tar' option called '--update'; *Note
+update::, for more information. We describe this use of '--append' here
+for the sake of completeness.) When you extract the archive, the older
+version will be effectively lost. This works because files are
+extracted from an archive in the order in which they were archived.
+Thus, when the archive is extracted, a file archived later in time will
+replace a file of the same name which was archived earlier, even though
+the older version of the file will remain in the archive unless you
+delete all versions of the file.
+
+ Supposing you change the file 'blues' and then append the changed
+version to 'collection.tar'. As you saw above, the original 'blues' is
+in the archive 'collection.tar'. If you change the file and append the
+new version of the file to the archive, there will be two copies in the
+archive. When you extract the archive, the older version of the file
+will be extracted first, and then replaced by the newer version when it
+is extracted.
+
+ You can append the new, changed copy of the file 'blues' to the
+archive in this way:
+
+ $ tar --append --verbose --file=collection.tar blues
+ blues
+
+Because you specified the '--verbose' option, 'tar' has printed the name
+of the file being appended as it was acted on. Now list the contents of
+the archive:
+
+ $ tar --list --verbose --file=collection.tar
+ -rw-r--r-- me/user 28 1996-10-18 16:31 jazz
+ -rw-r--r-- me/user 21 1996-09-23 16:44 blues
+ -rw-r--r-- me/user 20 1996-09-23 16:44 folk
+ -rw-r--r-- me/user 20 1996-09-23 16:44 rock
+ -rw-r--r-- me/user 58 1996-10-24 18:30 blues
+
+The newest version of 'blues' is now at the end of the archive (note the
+different creation dates and file sizes). If you extract the archive,
+the older version of the file 'blues' will be replaced by the newer
+version. You can confirm this by extracting the archive and running
+'ls' on the directory.
+
+ If you wish to extract the first occurrence of the file 'blues' from
+the archive, use '--occurrence' option, as shown in the following
+example:
+
+ $ tar --extract -vv --occurrence --file=collection.tar blues
+ -rw-r--r-- me/user 21 1996-09-23 16:44 blues
+
+ *Note Writing::, for more information on '--extract' and see *note
+-occurrence: Option Summary, for a description of '--occurrence' option.
+
+
+File: tar.info, Node: update, Next: concatenate, Prev: append, Up: Advanced tar
+
+4.2.3 Updating an Archive
+-------------------------
+
+In the previous section, you learned how to use '--append' to add a file
+to an existing archive. A related operation is '--update' ('-u'). The
+'--update' operation updates a 'tar' archive by comparing the date of
+the specified archive members against the date of the file with the same
+name. If the file has been modified more recently than the archive
+member, then the newer version of the file is added to the archive (as
+with '--append').
+
+ Unfortunately, you cannot use '--update' with magnetic tape drives.
+The operation will fail.
+
+ Both '--update' and '--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
+'--backup' option. *Note multiple::, for a detailed discussion.
+
+* Menu:
+
+* how to update::
+
+
+File: tar.info, Node: how to update, Up: update
+
+4.2.3.1 How to Update an Archive Using '--update'
+.................................................
+
+You must use file name arguments with the '--update' ('-u') operation.
+If you don't specify any files, 'tar' won't act on any files and won't
+tell you that it didn't do anything (which may end up confusing you).
+
+ To see the '--update' option at work, create a new file, 'classical',
+in your practice directory, and some extra text to the file 'blues',
+using any text editor. Then invoke 'tar' with the 'update' operation
+and the '--verbose' ('-v') option specified, using the names of all the
+files in the 'practice' directory as file name arguments:
+
+ $ tar --update -v -f collection.tar blues folk rock classical
+ blues
+ classical
+ $
+
+Because we have specified verbose mode, 'tar' prints out the names of
+the files it is working on, which in this case are the names of the
+files that needed to be updated. If you run 'tar --list' and look at
+the archive, you will see 'blues' and 'classical' at its end. There
+will be a total of two versions of the member 'blues'; the one at the
+end will be newer and larger, since you added text before updating it.
+
+ The reason 'tar' does not overwrite the older file when updating it
+is because writing to the middle of a section of tape is a difficult
+process. Tapes are not designed to go backward. *Note Media::, for
+more information about tapes.
+
+ '--update' ('-u') is not suitable for performing backups for two
+reasons: it does not change directory content entries, and it lengthens
+the archive every time it is used. The GNU 'tar' options intended
+specifically for backups are more efficient. If you need to run
+backups, please consult *note Backups::.
+
+
+File: tar.info, Node: concatenate, Next: delete, Prev: update, Up: Advanced tar
+
+4.2.4 Combining Archives with '--concatenate'
+---------------------------------------------
+
+Sometimes it may be convenient to add a second archive onto the end of
+an archive rather than adding individual files to the archive. To add
+one or more archives to the end of another archive, you should use the
+'--concatenate' ('--catenate', '-A') operation.
+
+ To use '--concatenate', give the first archive with '--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(1). The new, concatenated archive will be
+called by the same name as the one given with the '--file' option. As
+usual, if you omit '--file', 'tar' will use the value of the environment
+variable 'TAPE', or, if this has not been set, the default archive name.
+
+ To demonstrate how '--concatenate' works, create two small archives
+called 'bluesrock.tar' and 'folkjazz.tar', using the relevant files from
+'practice':
+
+ $ tar -cvf bluesrock.tar blues rock
+ blues
+ rock
+ $ tar -cvf folkjazz.tar folk jazz
+ folk
+ jazz
+
+If you like, You can run 'tar --list' to make sure the archives contain
+what they are supposed to:
+
+ $ tar -tvf bluesrock.tar
+ -rw-r--r-- melissa/user 105 1997-01-21 19:42 blues
+ -rw-r--r-- melissa/user 33 1997-01-20 15:34 rock
+ $ tar -tvf jazzfolk.tar
+ -rw-r--r-- melissa/user 20 1996-09-23 16:44 folk
+ -rw-r--r-- melissa/user 65 1997-01-30 14:15 jazz
+
+ We can concatenate these two archives with 'tar':
+
+ $ cd ..
+ $ tar --concatenate --file=bluesrock.tar jazzfolk.tar
+
+ If you now list the contents of the 'bluesrock.tar', you will see
+that now it also contains the archive members of 'jazzfolk.tar':
+
+ $ tar --list --file=bluesrock.tar
+ blues
+ rock
+ folk
+ jazz
+
+ When you use '--concatenate', the source and target archives must
+already exist and must have been created using compatible format
+parameters. Notice, that 'tar' does not check whether the archives it
+concatenates have compatible formats, it does not even check if the
+files are really tar archives.
+
+ Like '--append' ('-r'), this operation cannot be performed on some
+tape drives, due to deficiencies in the formats those tape drives use.
+
+ It may seem more intuitive to you to want or try to use 'cat' to
+concatenate two archives instead of using the '--concatenate' operation;
+after all, 'cat' is the utility for combining files.
+
+ However, 'tar' archives incorporate an end-of-file marker which must
+be removed if the concatenated archives are to be read properly as one
+archive. '--concatenate' removes the end-of-archive marker from the
+target archive before each new archive is appended. If you use 'cat' to
+combine the archives, the result will not be a valid 'tar' format
+archive. If you need to retrieve files from an archive that was added
+to using the 'cat' utility, use the '--ignore-zeros' ('-i') option.
+*Note Ignore Zeros::, for further information on dealing with archives
+improperly combined using the 'cat' shell utility.
+
+ ---------- Footnotes ----------
+
+ (1) This can cause multiple members to have the same name. For
+information on how this affects reading the archive, see *note
+multiple::.
+
+
+File: tar.info, Node: delete, Next: compare, Prev: concatenate, Up: Advanced tar
+
+4.2.5 Removing Archive Members Using '--delete'
+-----------------------------------------------
+
+You can remove members from an archive by using the '--delete' option.
+Specify the name of the archive with '--file' ('-f') and then specify
+the names of the members to be deleted; if you list no member names,
+nothing will be deleted. The '--verbose' option will cause 'tar' to
+print the names of the members as they are deleted. As with
+'--extract', you must give the exact member names when using 'tar
+--delete'. '--delete' will remove all versions of the named file from
+the archive. The '--delete' operation can run very slowly.
+
+ Unlike other operations, '--delete' has no short form.
+
+ This operation will rewrite the archive. You can only use '--delete'
+on an archive if the archive device allows you to write to any point on
+the media, such as a disk; because of this, it does not work on magnetic
+tapes. Do not try to delete an archive member from a magnetic tape; the
+action will not succeed, and you will be likely to scramble the archive
+and damage your tape. There is no safe way (except by completely
+re-writing the archive) to delete files from most kinds of magnetic
+tape. *Note Media::.
+
+ To delete all versions of the file 'blues' from the archive
+'collection.tar' in the 'practice' directory, make sure you are in that
+directory, and then,
+
+ $ tar --list --file=collection.tar
+ blues
+ folk
+ jazz
+ rock
+ $ tar --delete --file=collection.tar blues
+ $ tar --list --file=collection.tar
+ folk
+ jazz
+ rock
+
+ The '--delete' option has been reported to work properly when 'tar'
+acts as a filter from 'stdin' to 'stdout'.
+
+
+File: tar.info, Node: compare, Prev: delete, Up: Advanced tar
+
+4.2.6 Comparing Archive Members with the File System
+----------------------------------------------------
+
+The '--compare' ('-d'), or '--diff' operation compares specified archive
+members against files with the same names, and then reports differences
+in file size, mode, owner, modification date and contents. You should
+_only_ specify archive member names, not file names. If you do not name
+any members, then 'tar' will compare the entire archive. If a file is
+represented in the archive but does not exist in the file system, 'tar'
+reports a difference.
+
+ You have to specify the record size of the archive when modifying an
+archive with a non-default record size.
+
+ 'tar' ignores files in the file system that do not have corresponding
+members in the archive.
+
+ The following example compares the archive members 'rock', 'blues'
+and 'funk' in the archive 'bluesrock.tar' with files of the same name in
+the file system. (Note that there is no file, 'funk'; 'tar' will report
+an error message.)
+
+ $ tar --compare --file=bluesrock.tar rock blues funk
+ rock
+ blues
+ tar: funk not found in archive
+
+ The spirit behind the '--compare' ('--diff', '-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 latter
+goal, see *note verify::.
+
+
+File: tar.info, Node: create options, Next: extract options, Prev: Advanced tar, Up: operations
+
+4.3 Options Used by '--create'
+==============================
+
+The previous chapter described the basics of how to use '--create'
+('-c') to create an archive from a set of files. *Note create::. This
+section described advanced options to be used with '--create'.
+
+* Menu:
+
+* override:: Overriding File Metadata.
+* Extended File Attributes::
+* Ignore Failed Read::
+
+
+File: tar.info, Node: override, Next: Extended File Attributes, Up: create options
+
+4.3.1 Overriding File Metadata
+------------------------------
+
+As described above, a 'tar' archive keeps, for each member it contains,
+its "metadata", such as modification time, mode and ownership of the
+file. GNU 'tar' 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
+*note PAX keywords::, for additional ways of controlling metadata,
+stored in the archive.
+
+'--mode=PERMISSIONS'
+
+ When adding files to an archive, 'tar' will use PERMISSIONS for the
+ archive members, rather than the permissions from the files.
+ PERMISSIONS can be specified either as an octal number or as
+ symbolic permissions, like with 'chmod' (*Note Permissions:
+ (fileutils)File permissions. 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 'a+rw' adds read and write
+ permissions for everybody, while retaining executable bits on
+ directories or on any other file already marked as executable:
+
+ $ tar -c -f archive.tar --mode='a+rw' .
+
+'--mtime=DATE'
+
+ When adding files to an archive, 'tar' will use DATE as the
+ modification time of members when creating archives, instead of
+ their actual modification times. The argument DATE can be either a
+ textual date representation in almost arbitrary format (*note Date
+ input formats::) or a name of an existing file, starting with '/'
+ or '.'. 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,
+ January 1, 1970:
+
+ $ tar -c -f archive.tar --mtime='1970-01-01' .
+
+ When used with '--verbose' (*note verbose tutorial::) GNU 'tar'
+ will try to convert the specified date back to its textual
+ representation and compare it with the one given with '--mtime'
+ options. If the two dates differ, '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:
+
+ $ tar -c -f archive.tar -v --mtime=yesterday .
+ tar: Option --mtime: Treating date 'yesterday' as 2006-06-20
+ 13:06:29.152478
+ ...
+
+ When used with '--clamp-mtime' GNU 'tar' will only set the
+ modification date to DATE on files whose actual modification date
+ is later than DATE. This is to make it easy to build reproducible
+ archives given a common timestamp for generated files while still
+ retaining the original timestamps of untouched files.
+
+ $ tar -c -f archive.tar --clamp-mtime --mtime=@$SOURCE_DATE_EPOCH .
+
+'--owner=USER'
+
+ Specifies that 'tar' should use USER as the owner of members when
+ creating archives, instead of the user associated with the source
+ file.
+
+ If USER contains a colon, it is taken to be of the form NAME:ID
+ where a nonempty NAME specifies the user name and a nonempty ID
+ specifies the decimal numeric user ID. If USER does not contain a
+ colon, it is taken to be a user number if it is one or more decimal
+ digits; otherwise it is taken to be a user name.
+
+ If a name is given but no number, the number is inferred from the
+ current host's user database if possible, and the file's user
+ number is used otherwise. If a number is given but no name, the
+ name is inferred from the number if possible, and an empty name is
+ used otherwise. If both name and number are given, the user
+ database is not consulted, and the name and number need not be
+ valid on the current host.
+
+ There is no value indicating a missing number, and '0' usually
+ means 'root'. Some people like to force '0' as the value to offer
+ in their distributions for the owner of files, because the 'root'
+ user is anonymous anyway, so that might as well be the owner of
+ anonymous archives. For example:
+
+ $ tar -c -f archive.tar --owner=0 .
+
+ or:
+
+ $ tar -c -f archive.tar --owner=root .
+
+'--group=GROUP'
+
+ Files added to the 'tar' archive will have a group ID of GROUP,
+ rather than the group from the source file. As with '--owner', the
+ argument GROUP can be an existing group symbolic name, or a decimal
+ numeric group ID, or NAME:ID.
+
+ The '--owner' and '--group' options affect all files added to the
+archive. GNU 'tar' provides also two options that allow for more
+detailed control over owner translation:
+
+'--owner-map=FILE'
+ Read UID translation map from FILE.
+
+ When reading, empty lines are ignored. The '#' sign, unless
+ quoted, introduces a comment, which extends to the end of the line.
+ Each nonempty line defines mapping for a single UID. It must
+ consist of two fields separated by any amount of whitespace. The
+ first field defines original username and UID. It can be a valid
+ user name or a valid UID prefixed with a plus sign. In both cases
+ the corresponding UID or user name is inferred from the current
+ host's user database.
+
+ The second field defines the UID and username to map the original
+ one to. Its format can be the same as described above. Otherwise,
+ it can have the form NEWNAME:NEWUID, in which case neither NEWNAME
+ nor NEWUID are required to be valid as per the user database.
+
+ For example, consider the following file:
+
+ +10 bin
+ smith root:0
+
+ Given this file, each input file that is owner by UID 10 will be
+ stored in archive with owner name 'bin' and owner UID corresponding
+ to 'bin'. Each file owned by user 'smith' will be stored with
+ owner name 'root' and owner ID 0. Other files will remain
+ unchanged.
+
+ When used together with '--owner-map', the '--owner' option affects
+ only files whose owner is not listed in the map file.
+
+'--group-map=FILE'
+ Read GID translation map from FILE.
+
+ The format of FILE is the same as for '--owner-map' option:
+
+ Each nonempty line defines mapping for a single GID. It must
+ consist of two fields separated by any amount of whitespace. The
+ first field defines original group name and GID. It can be a valid
+ group name or a valid GID prefixed with a plus sign. In both cases
+ the corresponding GID or user name is inferred from the current
+ host's group database.
+
+ The second field defines the GID and group name to map the original
+ one to. Its format can be the same as described above. Otherwise,
+ it can have the form NEWNAME:NEWGID, in which case neither NEWNAME
+ nor NEWGID are required to be valid as per the group database.
+
+ When used together with '--group-map', the '--group' option affects
+ only files whose owner group is not rewritten using the map file.
+
+
+File: tar.info, Node: Extended File Attributes, Next: Ignore Failed Read, Prev: override, Up: create options
+
+4.3.2 Extended File Attributes
+------------------------------
+
+Extended file attributes are name-value pairs that can be associated
+with each node in a file system. Despite the fact that POSIX.1e draft
+which proposed them has been withdrawn, the extended file attributes are
+supported by many file systems. GNU 'tar' can store extended file
+attributes along with the files. This feature is controlled by the
+following command line arguments:
+
+'--xattrs'
+ Enable extended attributes support. When used with '--create',
+ this option instructs GNU 'tar' to store extended file attribute in
+ the created archive. This implies POSIX.1-2001 archive format
+ ('--format=pax').
+
+ When used with '--extract', this option tells 'tar', for each file
+ extracted, to read stored attributes from the archive and to apply
+ them to the file.
+
+'--no-xattrs'
+ Disable extended attributes support. This is the default.
+
+ Attribute names are strings prefixed by a "namespace" name and a dot.
+Currently, four namespaces exist: 'user', 'trusted', 'security' and
+'system'. By default, when '--xattr' is used, all names are stored in
+the archive (or extracted, if using '--extract'). This can be
+controlled using the following options:
+
+'--xattrs-exclude=PATTERN'
+ Specify exclude pattern for extended attributes.
+
+'--xattrs-include=PATTERN'
+ Specify include pattern for extended attributes.
+
+ Here, the PATTERN is POSIX regular expression. For example, the
+following command:
+
+ $ tar --xattrs --xattrs-exclude='^user\.' -c a.tar .
+
+ will include in the archive 'a.tar' all attributes, except those from
+the 'user' namespace.
+
+ Any number of these options can be given, thereby creating lists of
+include and exclude patterns.
+
+ When both options are used, first '--xattrs-inlcude' is applied to
+select the set of attribute names to keep, and then '--xattrs-exclude'
+is applied to the resulting set. In other words, only those attributes
+will be stored, whose names match one of the regexps in
+'--xattrs-inlcude' and don't match any of the regexps from
+'--xattrs-exclude'.
+
+ When listing the archive, if both '--xattrs' and '--verbose' options
+are given, files that have extended attributes are marked with an
+asterisk following their permission mask. For example:
+
+ -rw-r--r--* smith/users 110 2016-03-16 16:07 file
+
+ When two or more '--verbose' options are given, a detailed listing of
+extended attributes is printed after each file entry. Each attribute is
+listed on a separate line, which begins with two spaces and the letter
+'x' indicating extended attribute. It is followed by a colon, length of
+the attribute and its name, e.g.:
+
+ -rw-r--r--* smith/users 110 2016-03-16 16:07 file
+ x: 7 user.mime_type
+ x: 32 trusted.md5sum
+
+ File access control lists ("ACL") are another actively used feature
+proposed by the POSIX.1e standard. Each ACL consists of a set of ACL
+entries, each of which describes the access permissions on the file for
+an individual user or a group of users as a combination of read, write
+and search/execute permissions.
+
+ Whether or not to use ACLs is controlled by the following two
+options:
+
+'--acls'
+ Enable POSIX ACLs support. When used with '--create', this option
+ instructs GNU 'tar' to store ACLs in the created archive. This
+ implies POSIX.1-2001 archive format ('--format=pax').
+
+ When used with '--extract', this option tells 'tar', to restore
+ ACLs for each file extracted (provided they are present in the
+ archive).
+
+'--no-acls'
+ Disable POSIX ACLs support. This is the default.
+
+ When listing the archive, if both '--acls' and '--verbose' options
+are given, files that have ACLs are marked with a plus sing following
+their permission mask. For example:
+
+ -rw-r--r--+ smith/users 110 2016-03-16 16:07 file
+
+ When two or more '--verbose' options are given, a detailed listing of
+ACL is printed after each file entry:
+
+ -rw-r--r--+ smith/users 110 2016-03-16 16:07 file
+ a: user::rw-,user:gray:-w-,group::r--,mask::rw-,other::r--
+
+ "Security-Enhanced Linux" ("SELinux" for short) is a Linux kernel
+security module that provides a mechanism for supporting access control
+security policies, including so-called mandatory access controls
+("MAC"). Support for SELinux attributes is controlled by the following
+command line options:
+
+'--selinux'
+ Enable the SELinux context support.
+
+'--no-selinux'
+ Disable SELinux context support.
+
+
+File: tar.info, Node: Ignore Failed Read, Prev: Extended File Attributes, Up: create options
+
+4.3.3 Ignore Fail Read
+----------------------
+
+'--ignore-failed-read'
+ Do not exit with nonzero on unreadable files or directories.
+
+
+File: tar.info, Node: extract options, Next: backup, Prev: create options, Up: operations
+
+4.4 Options Used by '--extract'
+===============================
+
+The previous chapter showed how to use '--extract' to extract an archive
+into the file system. Various options cause 'tar' to extract more
+information than just file contents, such as the owner, the permissions,
+the modification date, and so forth. This section presents options to
+be used with '--extract' when certain special considerations arise. You
+may review the information presented in *note extract:: for more basic
+information about the '--extract' operation.
+
+* Menu:
+
+* Reading:: Options to Help Read Archives
+* Writing:: Changing How 'tar' Writes Files
+* Scarce:: Coping with Scarce Resources
+
+
+File: tar.info, Node: Reading, Next: Writing, Up: extract options
+
+4.4.1 Options to Help Read Archives
+-----------------------------------
+
+Normally, 'tar' will request data in full record increments from an
+archive storage device. If the device cannot return a full record,
+'tar' will report an error. However, some devices do not always return
+full records, or do not require the last record of an archive to be
+padded out to the next record boundary. To keep reading until you
+obtain a full record, or to accept an incomplete record if it contains
+an end-of-archive marker, specify the '--read-full-records' ('-B')
+option in conjunction with the '--extract' or '--list' operations.
+*Note Blocking::.
+
+ The '--read-full-records' ('-B') option is turned on by default when
+'tar' reads an archive from standard input, or from a remote machine.
+This is because on BSD Unix systems, attempting to read a pipe returns
+however much happens to be in the pipe, even if it is less than was
+requested. If this option were not enabled, 'tar' would fail as soon as
+it read an incomplete record from the pipe.
+
+ If you're not sure of the blocking factor of an archive, you can read
+the archive by specifying '--read-full-records' ('-B') and
+'--blocking-factor=512-SIZE' ('-b 512-SIZE'), using a blocking factor
+larger than what the archive uses. This lets you avoid having to
+determine the blocking factor of an archive. *Note Blocking Factor::.
+
+* Menu:
+
+* read full records::
+* Ignore Zeros::
+
+
+File: tar.info, Node: read full records, Next: Ignore Zeros, Up: Reading
+
+Reading Full Records
+....................
+
+'--read-full-records'
+'-B'
+ Use in conjunction with '--extract' ('--get', '-x') to read an
+ archive which contains incomplete records, or one which has a
+ blocking factor less than the one specified.
+
+
+File: tar.info, Node: Ignore Zeros, Prev: read full records, Up: Reading
+
+Ignoring Blocks of Zeros
+........................
+
+Normally, 'tar' stops reading when it encounters a block of zeros
+between file entries (which usually indicates the end of the archive).
+'--ignore-zeros' ('-i') allows 'tar' to completely read an archive which
+contains a block of zeros before the end (i.e., a damaged archive, or
+one that was created by concatenating several archives together).
+
+ The '--ignore-zeros' ('-i') option is turned off by default because
+many versions of 'tar' write garbage after the end-of-archive entry,
+since that part of the media is never supposed to be read. GNU 'tar'
+does not write after the end of an archive, but seeks to maintain
+compatibility among archiving utilities.
+
+'--ignore-zeros'
+'-i'
+ To ignore blocks of zeros (i.e., end-of-archive entries) which may
+ be encountered while reading an archive. Use in conjunction with
+ '--extract' or '--list'.
+
+
+File: tar.info, Node: Writing, Next: Scarce, Prev: Reading, Up: extract options
+
+4.4.2 Changing How 'tar' Writes Files
+-------------------------------------
+
+ _(This message will disappear, once this node revised.)_
+
+* Menu:
+
+* Dealing with Old Files::
+* Overwrite Old Files::
+* Keep Old Files::
+* Keep Newer Files::
+* Unlink First::
+* Recursive Unlink::
+* Data Modification Times::
+* Setting Access Permissions::
+* Directory Modification Times and Permissions::
+* Writing to Standard Output::
+* Writing to an External Program::
+* remove files::
+
+
+File: tar.info, Node: Dealing with Old Files, Next: Overwrite Old Files, Up: Writing
+
+Options Controlling the Overwriting of Existing Files
+.....................................................
+
+When extracting files, if '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
+links. (If the existing file is a symbolic link, it is removed, not
+followed.) However, if a directory cannot be removed because it is
+nonempty, 'tar' normally overwrites its metadata (ownership, permission,
+etc.). The '--overwrite-dir' option enables this default behavior. To
+be more cautious and preserve the metadata of such a directory, use the
+'--no-overwrite-dir' option.
+
+ To be even more cautious and prevent existing files from being
+replaced, use the '--keep-old-files' ('-k') option. It causes '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. For example:
+
+ $ ls
+ blues
+ $ tar -x -k -f archive.tar
+ tar: blues: Cannot open: File exists
+ tar: Exiting with failure status due to previous errors
+
+ If you wish to preserve old files untouched, but don't want 'tar' to
+treat them as errors, use the '--skip-old-files' option. This option
+causes 'tar' to silently skip extracting over existing files.
+
+ To be more aggressive about altering existing files, use the
+'--overwrite' option. It causes 'tar' to overwrite existing files and
+to follow existing symbolic links when extracting.
+
+ Some people argue that GNU 'tar' should not hesitate to overwrite
+files with other files when extracting. When extracting a 'tar'
+archive, they expect to see a faithful copy of the state of the file
+system when the archive was created. It is debatable that this would
+always be a proper behavior. For example, suppose one has an archive in
+which 'usr/local' is a link to 'usr/local2'. Since then, maybe the site
+removed the link and renamed the whole hierarchy from '/usr/local2' to
+'/usr/local'. Such things happen all the time. I guess it would not be
+welcome at all that GNU 'tar' removes the whole hierarchy just to make
+room for the link to be reinstated (unless it _also_ simultaneously
+restores the full '/usr/local2', of course!) GNU 'tar' is indeed able
+to remove a whole hierarchy to reestablish a symbolic link, for example,
+but _only if_ '--recursive-unlink' is specified to allow this behavior.
+In any case, single files are silently removed.
+
+ Finally, the '--unlink-first' ('-U') option can improve performance
+in some cases by causing 'tar' to remove files unconditionally before
+extracting them.
+
+
+File: tar.info, Node: Overwrite Old Files, Next: Keep Old Files, Prev: Dealing with Old Files, Up: Writing
+
+Overwrite Old Files
+...................
+
+'--overwrite'
+ Overwrite existing files and directory metadata when extracting
+ files from an archive.
+
+ This causes 'tar' to write extracted files into the file system
+ without regard to the files already on the system; i.e., files with
+ the same names as archive members are overwritten when the archive
+ is extracted. It also causes 'tar' to extract the ownership,
+ permissions, and time stamps onto any preexisting files or
+ directories. If the name of a corresponding file name is a
+ symbolic link, the file pointed to by the symbolic link will be
+ overwritten instead of the symbolic link itself (if this is
+ possible). Moreover, special devices, empty directories and even
+ symbolic links are automatically removed if they are in the way of
+ extraction.
+
+ Be careful when using the '--overwrite' option, particularly when
+ combined with the '--absolute-names' ('-P') option, as this
+ combination can change the contents, ownership or permissions of
+ any file on your system. Also, many systems do not take kindly to
+ overwriting files that are currently being executed.
+
+'--overwrite-dir'
+ Overwrite the metadata of directories when extracting files from an
+ archive, but remove other files before extracting.
+
+
+File: tar.info, Node: Keep Old Files, Next: Keep Newer Files, Prev: Overwrite Old Files, Up: Writing
+
+Keep Old Files
+..............
+
+GNU 'tar' provides two options to control its actions in a situation
+when it is about to extract a file which already exists on disk.
+
+'--keep-old-files'
+'-k'
+ Do not replace existing files from archive. When such a file is
+ encountered, 'tar' issues an error message. Upon end of
+ extraction, 'tar' exits with code 2 (*note exit status::).
+
+'--skip-old-files'
+ Do not replace existing files from archive, but do not treat that
+ as error. Such files are silently skipped and do not affect 'tar'
+ exit status.
+
+ Additional verbosity can be obtained using
+ '--warning=existing-file' together with that option (*note
+ warnings::).
+
+
+File: tar.info, Node: Keep Newer Files, Next: Unlink First, Prev: Keep Old Files, Up: Writing
+
+Keep Newer Files
+................
+
+'--keep-newer-files'
+ Do not replace existing files that are newer than their archive
+ copies. This option is meaningless with '--list' ('-t').
+
+
+File: tar.info, Node: Unlink First, Next: Recursive Unlink, Prev: Keep Newer Files, Up: Writing
+
+Unlink First
+............
+
+'--unlink-first'
+'-U'
+ Remove files before extracting over them. This can make 'tar' run
+ a bit faster if you know in advance that the extracted files all
+ need to be removed. Normally this option slows 'tar' down
+ slightly, so it is disabled by default.
+
+
+File: tar.info, Node: Recursive Unlink, Next: Data Modification Times, Prev: Unlink First, Up: Writing
+
+Recursive Unlink
+................
+
+'--recursive-unlink'
+ When this option is specified, try removing files and directory
+ hierarchies before extracting over them. _This is a dangerous
+ option!_
+
+ If you specify the '--recursive-unlink' option, 'tar' removes
+_anything_ that keeps you from extracting a file as far as current
+permissions will allow it. This could include removal of the contents
+of a full directory hierarchy.
+
+
+File: tar.info, Node: Data Modification Times, Next: Setting Access Permissions, Prev: Recursive Unlink, Up: Writing
+
+Setting Data Modification Times
+...............................
+
+Normally, 'tar' sets the data modification times of extracted files to
+the corresponding times recorded for the files in the archive, but
+limits the permissions of extracted files by the current 'umask'
+setting.
+
+ To set the data modification times of extracted files to the time
+when the files were extracted, use the '--touch' ('-m') option in
+conjunction with '--extract' ('--get', '-x').
+
+'--touch'
+'-m'
+ Sets the data modification time of extracted archive members to the
+ time they were extracted, not the time recorded for them in the
+ archive. Use in conjunction with '--extract' ('--get', '-x').
+
+
+File: tar.info, Node: Setting Access Permissions, Next: Directory Modification Times and Permissions, Prev: Data Modification Times, Up: Writing
+
+Setting Access Permissions
+..........................
+
+To set the modes (access permissions) of extracted files to those
+recorded for those files in the archive, use '--same-permissions' in
+conjunction with the '--extract' ('--get', '-x') operation.
+
+'--preserve-permissions'
+'--same-permissions'
+'-p'
+ Set modes of extracted archive members to those recorded in the
+ archive, instead of current umask settings. Use in conjunction
+ with '--extract' ('--get', '-x').
+
+
+File: tar.info, Node: Directory Modification Times and Permissions, Next: Writing to Standard Output, Prev: Setting Access Permissions, Up: Writing
+
+Directory Modification Times and Permissions
+............................................
+
+After successfully extracting a file member, GNU 'tar' normally restores
+its permissions and modification times, as described in the previous
+sections. This cannot be done for directories, because after extracting
+a directory 'tar' will almost certainly extract files into that
+directory and this will cause the directory modification time to be
+updated. Moreover, restoring that directory permissions may not permit
+file creation within it. Thus, restoring directory permissions and
+modification times must be delayed at least until all files have been
+extracted into that directory. GNU 'tar' restores directories using the
+following approach.
+
+ The extracted directories are created with the mode specified in the
+archive, as modified by the umask of the user, which gives sufficient
+permissions to allow file creation. The meta-information about the
+directory is recorded in the temporary list of directories. When
+preparing to extract next archive member, GNU 'tar' checks if the
+directory prefix of this file contains the remembered directory. If it
+does not, the program assumes that all files have been extracted into
+that directory, restores its modification time and permissions and
+removes its entry from the internal list. This approach allows to
+correctly restore directory meta-information in the majority of cases,
+while keeping memory requirements sufficiently small. It is based on
+the fact, that most 'tar' archives use the predefined order of members:
+first the directory, then all the files and subdirectories in that
+directory.
+
+ However, this is not always true. The most important exception are
+incremental archives (*note Incremental Dumps::). The member order in
+an incremental archive is reversed: first all directory members are
+stored, followed by other (non-directory) members. So, when extracting
+from incremental archives, GNU 'tar' alters the above procedure. It
+remembers all restored directories, and restores their meta-data only
+after the entire archive has been processed. Notice, that you do not
+need to specify any special options for that, as GNU 'tar' automatically
+detects archives in incremental format.
+
+ There may be cases, when such processing is required for normal
+archives too. Consider the following example:
+
+ $ tar --no-recursion -cvf archive \
+ foo foo/file1 bar bar/file foo/file2
+ foo/
+ foo/file1
+ bar/
+ bar/file
+ foo/file2
+
+ During the normal operation, after encountering 'bar' GNU 'tar' will
+assume that all files from the directory 'foo' were already extracted
+and will therefore restore its timestamp and permission bits. However,
+after extracting 'foo/file2' the directory timestamp will be offset
+again.
+
+ To correctly restore directory meta-information in such cases, use
+the '--delay-directory-restore' command line option:
+
+'--delay-directory-restore'
+ Delays restoring of the modification times and permissions of
+ extracted directories until the end of extraction. This way,
+ correct meta-information is restored even if the archive has
+ unusual member ordering.
+
+'--no-delay-directory-restore'
+ Cancel the effect of the previous '--delay-directory-restore'. Use
+ this option if you have used '--delay-directory-restore' in
+ 'TAR_OPTIONS' variable (*note TAR_OPTIONS::) and wish to
+ temporarily disable it.
+
+
+File: tar.info, Node: Writing to Standard Output, Next: Writing to an External Program, Prev: Directory Modification Times and Permissions, Up: Writing
+
+Writing to Standard Output
+..........................
+
+To write the extracted files to the standard output, instead of creating
+the files on the file system, use '--to-stdout' ('-O') in conjunction
+with '--extract' ('--get', '-x'). This option is useful if you are
+extracting files to send them through a pipe, and do not need to
+preserve them in the file system. If you extract multiple members, they
+appear on standard output concatenated, in the order they are found in
+the archive.
+
+'--to-stdout'
+'-O'
+ Writes files to the standard output. Use only in conjunction with
+ '--extract' ('--get', '-x'). When this option is used, instead of
+ creating the files specified, 'tar' writes the contents of the
+ files extracted to its standard output. This may be useful if you
+ are only extracting the files in order to send them through a pipe.
+ This option is meaningless with '--list' ('-t').
+
+ This can be useful, for example, if you have a tar archive containing
+a big file and don't want to store the file on disk before processing
+it. You can use a command like this:
+
+ tar -xOzf foo.tgz bigfile | process
+
+ or even like this if you want to process the concatenation of the
+files:
+
+ tar -xOzf foo.tgz bigfile1 bigfile2 | process
+
+ However, '--to-command' may be more convenient for use with multiple
+files. See the next section.
+
+
+File: tar.info, Node: Writing to an External Program, Next: remove files, Prev: Writing to Standard Output, Up: Writing
+
+Writing to an External Program
+..............................
+
+You can instruct 'tar' to send the contents of each extracted file to
+the standard input of an external program:
+
+'--to-command=COMMAND'
+ Extract files and pipe their contents to the standard input of
+ COMMAND. When this option is used, instead of creating the files
+ specified, 'tar' invokes COMMAND and pipes the contents of the
+ files to its standard output. The COMMAND may contain command line
+ arguments (see *note Running External Commands: external, for more
+ detail).
+
+ Notice, that COMMAND is executed once for each regular file
+ extracted. Non-regular files (directories, etc.) are ignored when
+ this option is used.
+
+ The command can obtain the information about the file it processes
+from the following environment variables:
+
+'TAR_FILETYPE'
+ Type of the file. It is a single letter with the following
+ meaning:
+
+ f Regular file
+ d Directory
+ l Symbolic link
+ h Hard link
+ b Block device
+ c Character device
+
+ Currently only regular files are supported.
+
+'TAR_MODE'
+ File mode, an octal number.
+
+'TAR_FILENAME'
+ The name of the file.
+
+'TAR_REALNAME'
+ Name of the file as stored in the archive.
+
+'TAR_UNAME'
+ Name of the file owner.
+
+'TAR_GNAME'
+ Name of the file owner group.
+
+'TAR_ATIME'
+ Time of last access. It is a decimal number, representing seconds
+ since the Epoch. If the archive provides times with nanosecond
+ precision, the nanoseconds are appended to the timestamp after a
+ decimal point.
+
+'TAR_MTIME'
+ Time of last modification.
+
+'TAR_CTIME'
+ Time of last status change.
+
+'TAR_SIZE'
+ Size of the file.
+
+'TAR_UID'
+ UID of the file owner.
+
+'TAR_GID'
+ GID of the file owner.
+
+ Additionally, the following variables contain information about tar
+mode and the archive being processed:
+
+'TAR_VERSION'
+ GNU 'tar' version number.
+
+'TAR_ARCHIVE'
+ The name of the archive 'tar' is processing.
+
+'TAR_BLOCKING_FACTOR'
+ Current blocking factor (*note Blocking::).
+
+'TAR_VOLUME'
+ Ordinal number of the volume 'tar' is processing.
+
+'TAR_FORMAT'
+ Format of the archive being processed. *Note Formats::, for a
+ complete list of archive format names.
+
+ These variables are defined prior to executing the command, so you
+can pass them as arguments, if you prefer. For example, if the command
+PROC takes the member name and size as its arguments, then you could do:
+
+ $ tar -x -f archive.tar \
+ --to-command='proc $TAR_FILENAME $TAR_SIZE'
+
+Notice single quotes to prevent variable names from being expanded by
+the shell when invoking 'tar'.
+
+ If COMMAND exits with a non-0 status, 'tar' will print an error
+message similar to the following:
+
+ tar: 2345: Child returned status 1
+
+ Here, '2345' is the PID of the finished process.
+
+ If this behavior is not wanted, use '--ignore-command-error':
+
+'--ignore-command-error'
+ Ignore exit codes of subprocesses. Notice that if the program
+ exits on signal or otherwise terminates abnormally, the error
+ message will be printed even if this option is used.
+
+'--no-ignore-command-error'
+ Cancel the effect of any previous '--ignore-command-error' option.
+ This option is useful if you have set '--ignore-command-error' in
+ 'TAR_OPTIONS' (*note TAR_OPTIONS::) and wish to temporarily cancel
+ it.
+
+
+File: tar.info, Node: remove files, Prev: Writing to an External Program, Up: Writing
+
+Removing Files
+..............
+
+'--remove-files'
+ Remove files after adding them to the archive.
+
+
+File: tar.info, Node: Scarce, Prev: Writing, Up: extract options
+
+4.4.3 Coping with Scarce Resources
+----------------------------------
+
+ _(This message will disappear, once this node revised.)_
+
+* Menu:
+
+* Starting File::
+* Same Order::
+
+
+File: tar.info, Node: Starting File, Next: Same Order, Up: Scarce
+
+Starting File
+.............
+
+'--starting-file=NAME'
+'-K NAME'
+ Starts an operation in the middle of an archive. Use in
+ conjunction with '--extract' ('--get', '-x') or '--list' ('-t').
+
+ If a previous attempt to extract files failed due to lack of disk
+space, you can use '--starting-file=NAME' ('-K NAME') to start
+extracting only after member NAME of the archive. This assumes, of
+course, that there is now free space, or that you are now extracting
+into a different file system. (You could also choose to suspend 'tar',
+remove unnecessary files from the file system, and then resume the same
+'tar' operation. In this case, '--starting-file' is not necessary.)
+See also *note interactive::, and *note exclude::.
+
+
+File: tar.info, Node: Same Order, Prev: Starting File, Up: Scarce
+
+Same Order
+..........
+
+'--same-order'
+'--preserve-order'
+'-s'
+ To process large lists of file names on machines with small amounts
+ of memory. Use in conjunction with '--compare' ('--diff', '-d'),
+ '--list' ('-t') or '--extract' ('--get', '-x').
+
+ The '--same-order' ('--preserve-order', '-s') option tells 'tar' that
+the list of file names to be listed or extracted is sorted in the same
+order as the files in the archive. This allows a large list of names to
+be used, even on a small machine that would not otherwise be able to
+hold all the names in memory at the same time. Such a sorted list can
+easily be created by running 'tar -t' on the archive and editing its
+output.
+
+ This option is probably never needed on modern computer systems.
+
+
+File: tar.info, Node: backup, Next: Applications, Prev: extract options, Up: operations
+
+4.5 Backup options
+==================
+
+GNU 'tar' offers options for making backups of files before writing new
+versions. These options control the details of these backups. They may
+apply to the archive itself before it is created or rewritten, as well
+as individual extracted members. Other GNU programs ('cp', 'install',
+'ln', and 'mv', for example) offer similar options.
+
+ Backup options may prove unexpectedly useful when extracting archives
+containing many members having identical name, or when extracting
+archives on systems having file name limitations, making different
+members appear as having similar names through the side-effect of name
+truncation.
+
+ When any existing file is backed up before being overwritten by
+extraction, then clashing files are automatically be renamed to be
+unique, and the true name is kept for only the last file of a series of
+clashing files. By using verbose mode, users may track exactly what
+happens.
+
+ At the detail level, some decisions are still experimental, and may
+change in the future, we are waiting comments from our users. So,
+please do not learn to depend blindly on the details of the backup
+features. For example, currently, directories themselves are never
+renamed through using these options, so, extracting a file over a
+directory still has good chances to fail. Also, backup options apply to
+created archives, not only to extracted members. For created archives,
+backups will not be attempted when the archive is a block or character
+device, or when it refers to a remote file.
+
+ For the sake of simplicity and efficiency, backups are made by
+renaming old files prior to creation or extraction, and not by copying.
+The original name is restored if the file creation fails. If a failure
+occurs after a partial extraction of a file, both the backup and the
+partially extracted file are kept.
+
+'--backup[=METHOD]'
+ Back up files that are about to be overwritten or removed. Without
+ this option, the original versions are destroyed.
+
+ Use METHOD to determine the type of backups made. If METHOD is not
+ specified, use the value of the 'VERSION_CONTROL' environment
+ variable. And if 'VERSION_CONTROL' is not set, use the 'existing'
+ method.
+
+ This option corresponds to the Emacs variable 'version-control';
+ the same values for METHOD are accepted as in Emacs. This option
+ also allows more descriptive names. The valid METHODs are:
+
+ 't'
+ 'numbered'
+ Always make numbered backups.
+
+ 'nil'
+ 'existing'
+ Make numbered backups of files that already have them, simple
+ backups of the others.
+
+ 'never'
+ 'simple'
+ Always make simple backups.
+
+'--suffix=SUFFIX'
+ Append SUFFIX to each backup file made with '--backup'. If this
+ option is not specified, the value of the 'SIMPLE_BACKUP_SUFFIX'
+ environment variable is used. And if 'SIMPLE_BACKUP_SUFFIX' is not
+ set, the default is '~', just as in Emacs.
+
+
+File: tar.info, Node: Applications, Next: looking ahead, Prev: backup, Up: operations
+
+4.6 Notable 'tar' Usages
+========================
+
+ _(This message will disappear, once this node revised.)_
+
+ You can easily use archive files to transport a group of files from
+one system to another: put all relevant files into an archive on one
+computer system, transfer the archive to another system, and extract the
+contents there. The basic transfer medium might be magnetic tape,
+Internet FTP, or even electronic mail (though you must encode the
+archive with 'uuencode' in order to transport it properly by mail).
+Both machines do not have to use the same operating system, as long as
+they both support the 'tar' program.
+
+ For example, here is how you might copy a directory's contents from
+one disk to another, while preserving the dates, modes, owners and
+link-structure of all the files therein. In this case, the transfer
+medium is a "pipe":
+
+ $ (cd sourcedir; tar -cf - .) | (cd targetdir; tar -xf -)
+
+You can avoid subshells by using '-C' option:
+
+ $ tar -C sourcedir -cf - . | tar -C targetdir -xf -
+
+The command also works using long option forms:
+
+ $ (cd sourcedir; tar --create --file=- . ) \
+ | (cd targetdir; tar --extract --file=-)
+
+or
+
+ $ tar --directory sourcedir --create --file=- . \
+ | tar --directory targetdir --extract --file=-
+
+This is one of the easiest methods to transfer a 'tar' archive.
+
+
+File: tar.info, Node: looking ahead, Prev: Applications, Up: operations
+
+4.7 Looking Ahead: The Rest of this Manual
+==========================================
+
+You have now seen how to use all eight of the operations available to
+'tar', and a number of the possible options. The next chapter explains
+how to choose and change file and archive names, how to use files to
+store names of other files which you can then call as arguments to 'tar'
+(this can help you save time if you expect to archive the same list of
+files a number of times), and so forth.
+
+ If there are too many files to conveniently list on the command line,
+you can list the names in a file, and 'tar' will read that file. *Note
+files::.
+
+ There are various ways of causing 'tar' to skip over some files, and
+not archive them. *Note Choosing::.
+
+
+File: tar.info, Node: Backups, Next: Choosing, Prev: operations, Up: Top
+
+5 Performing Backups and Restoring Files
+****************************************
+
+GNU 'tar' is distributed along with the scripts for performing backups
+and restores. Even if there is a good chance those scripts may be
+satisfying to you, they are not the only scripts or methods available
+for doing backups and restore. You may well create your own, or use
+more sophisticated packages dedicated to that purpose.
+
+ Some users are enthusiastic about 'Amanda' (The Advanced Maryland
+Automatic Network Disk Archiver), a backup system developed by James da
+Silva 'jds@cs.umd.edu' and available on many Unix systems. This is free
+software, and it is available from <http://www.amanda.org>.
+
+ This chapter documents both the provided shell scripts and 'tar'
+options which are more specific to usage as a backup tool.
+
+ To "back up" a file system means to create archives that contain all
+the files in that file system. Those archives can then be used to
+restore any or all of those files (for instance if a disk crashes or a
+file is accidentally deleted). File system "backups" are also called
+"dumps".
+
+* Menu:
+
+* Full Dumps:: Using 'tar' to Perform Full Dumps
+* Incremental Dumps:: Using 'tar' to Perform Incremental Dumps
+* Backup Levels:: Levels of Backups
+* Backup Parameters:: Setting Parameters for Backups and Restoration
+* Scripted Backups:: Using the Backup Scripts
+* Scripted Restoration:: Using the Restore Script
+
+
+File: tar.info, Node: Full Dumps, Next: Incremental Dumps, Up: Backups
+
+5.1 Using 'tar' to Perform Full Dumps
+=====================================
+
+ _(This message will disappear, once this node revised.)_
+
+ Full dumps should only be made when no other people or programs are
+modifying files in the file system. If files are modified while 'tar'
+is making the backup, they may not be stored properly in the archive, in
+which case you won't be able to restore them if you have to. (Files not
+being modified are written with no trouble, and do not corrupt the
+entire archive.)
+
+ You will want to use the '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL')
+option to give the archive a volume label, so you can tell what this
+archive is even if the label falls off the tape, or anything like that.
+
+ Unless the file system you are dumping is guaranteed to fit on one
+volume, you will need to use the '--multi-volume' ('-M') option. Make
+sure you have enough tapes on hand to complete the backup.
+
+ If you want to dump each file system separately you will need to use
+the '--one-file-system' option to prevent 'tar' from crossing file
+system boundaries when storing (sub)directories.
+
+ The '--incremental' ('-G') (*note Incremental Dumps::) option is not
+needed, since this is a complete copy of everything in the file system,
+and a full restore from this backup would only be done onto a completely
+empty disk.
+
+ Unless you are in a hurry, and trust the 'tar' program (and your
+tapes), it is a good idea to use the '--verify' ('-W') option, to make
+sure your files really made it onto the dump properly. This will also
+detect cases where the file was modified while (or just after) it was
+being archived. Not all media (notably cartridge tapes) are capable of
+being verified, unfortunately.
+
+
+File: tar.info, Node: Incremental Dumps, Next: Backup Levels, Prev: Full Dumps, Up: Backups
+
+5.2 Using 'tar' to Perform Incremental Dumps
+============================================
+
+"Incremental backup" is a special form of GNU 'tar' archive that stores
+additional metadata so that exact state of the file system can be
+restored when extracting the archive.
+
+ GNU 'tar' currently offers two options for handling incremental
+backups: '--listed-incremental=SNAPSHOT-FILE' ('-g SNAPSHOT-FILE') and
+'--incremental' ('-G').
+
+ The option '--listed-incremental' instructs tar to operate on an
+incremental archive with additional metadata stored in a standalone
+file, called a "snapshot file". The purpose of this file is to help
+determine which files have been changed, added or deleted since the last
+backup, so that the next incremental backup will contain only modified
+files. The name of the snapshot file is given as an argument to the
+option:
+
+'--listed-incremental=FILE'
+'-g FILE'
+ Handle incremental backups with snapshot data in FILE.
+
+ To create an incremental backup, you would use '--listed-incremental'
+together with '--create' (*note create::). For example:
+
+ $ tar --create \
+ --file=archive.1.tar \
+ --listed-incremental=/var/log/usr.snar \
+ /usr
+
+ This will create in 'archive.1.tar' an incremental backup of the
+'/usr' file system, storing additional metadata in the file
+'/var/log/usr.snar'. If this file does not exist, it will be created.
+The created archive will then be a "level 0 backup"; please see the next
+section for more on backup levels.
+
+ Otherwise, if the file '/var/log/usr.snar' exists, it determines
+which files are modified. In this case only these files will be stored
+in the archive. Suppose, for example, that after running the above
+command, you delete file '/usr/doc/old' and create directory
+'/usr/local/db' with the following contents:
+
+ $ ls /usr/local/db
+ /usr/local/db/data
+ /usr/local/db/index
+
+ Some time later you create another incremental backup. You will then
+see:
+
+ $ tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar \
+ /usr
+ tar: usr/local/db: Directory is new
+ usr/local/db/
+ usr/local/db/data
+ usr/local/db/index
+
+The created archive 'archive.2.tar' will contain only these three
+members. This archive is called a "level 1 backup". Notice that
+'/var/log/usr.snar' will be updated with the new data, so if you plan to
+create more 'level 1' backups, it is necessary to create a working copy
+of the snapshot file before running 'tar'. The above example will then
+be modified as follows:
+
+ $ cp /var/log/usr.snar /var/log/usr.snar-1
+ $ tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar-1 \
+ /usr
+
+ You can force 'level 0' backups either by removing the snapshot file
+before running 'tar', or by supplying the '--level=0' option, e.g.:
+
+ $ tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar-0 \
+ --level=0 \
+ /usr
+
+ Incremental dumps depend crucially on time stamps, so the results are
+unreliable if you modify a file's time stamps during dumping (e.g., with
+the '--atime-preserve=replace' option), or if you set the clock
+backwards.
+
+ Metadata stored in snapshot files include device numbers, which,
+obviously are supposed to be non-volatile values. However, it turns out
+that NFS devices have undependable values when an automounter gets in
+the picture. This can lead to a great deal of spurious redumping in
+incremental dumps, so it is somewhat useless to compare two NFS devices
+numbers over time. The solution implemented currently is to consider
+all NFS devices as being equal when it comes to comparing directories;
+this is fairly gross, but there does not seem to be a better way to go.
+
+ Apart from using NFS, there are a number of cases where relying on
+device numbers can cause spurious redumping of unmodified files. For
+example, this occurs when archiving LVM snapshot volumes. To avoid
+this, use '--no-check-device' option:
+
+'--no-check-device'
+ Do not rely on device numbers when preparing a list of changed
+ files for an incremental dump.
+
+'--check-device'
+ Use device numbers when preparing a list of changed files for an
+ incremental dump. This is the default behavior. The purpose of
+ this option is to undo the effect of the '--no-check-device' if it
+ was given in 'TAR_OPTIONS' environment variable (*note
+ TAR_OPTIONS::).
+
+ There is also another way to cope with changing device numbers. It
+is described in detail in *note Fixing Snapshot Files::.
+
+ Note that incremental archives use 'tar' extensions and may not be
+readable by non-GNU versions of the 'tar' program.
+
+ To extract from the incremental dumps, use '--listed-incremental'
+together with '--extract' option (*note extracting files::). In this
+case, 'tar' does not need to access snapshot file, since all the data
+necessary for extraction are stored in the archive itself. So, when
+extracting, you can give whatever argument to '--listed-incremental',
+the usual practice is to use '--listed-incremental=/dev/null'.
+Alternatively, you can use '--incremental', which needs no arguments.
+In general, '--incremental' ('-G') can be used as a shortcut for
+'--listed-incremental' when listing or extracting incremental backups
+(for more information regarding this option, *note incremental-op::).
+
+ When extracting from the incremental backup GNU 'tar' attempts to
+restore the exact state the file system had when the archive was
+created. In particular, it will _delete_ those files in the file system
+that did not exist in their directories when the archive was created.
+If you have created several levels of incremental files, then in order
+to restore the exact contents the file system had when the last level
+was created, you will need to restore from all backups in turn.
+Continuing our example, to restore the state of '/usr' file system, one
+would do(1):
+
+ $ tar --extract \
+ --listed-incremental=/dev/null \
+ --file archive.1.tar
+ $ tar --extract \
+ --listed-incremental=/dev/null \
+ --file archive.2.tar
+
+ To list the contents of an incremental archive, use '--list' (*note
+list::), as usual. To obtain more information about the archive, use
+'--listed-incremental' or '--incremental' combined with two '--verbose'
+options(2):
+
+ tar --list --incremental --verbose --verbose --file archive.tar
+
+ This command will print, for each directory in the archive, the list
+of files in that directory at the time the archive was created. This
+information is put out in a format which is both human-readable and
+unambiguous for a program: each file name is printed as
+
+ X FILE
+
+where X is a letter describing the status of the file: 'Y' if the file
+is present in the archive, 'N' if the file is not included in the
+archive, or a 'D' if the file is a directory (and is included in the
+archive). *Note 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.
+
+ The option '--incremental' ('-G') gives the same behavior as
+'--listed-incremental' when used with '--list' and '--extract' options.
+When used with '--create' option, it creates an incremental archive
+without creating snapshot file. Thus, it is impossible to create
+several levels of incremental backups with '--incremental' option.
+
+ ---------- Footnotes ----------
+
+ (1) Notice, that since both archives were created without '-P' option
+(*note absolute::), these commands should be run from the root file
+system.
+
+ (2) Two '--verbose' options were selected to avoid breaking usual
+verbose listing output ('--list --verbose') when using in scripts.
+
+ Versions of GNU 'tar' up to 1.15.1 used to dump verbatim binary
+contents of the DUMPDIR header (with terminating nulls) when
+'--incremental' or '--listed-incremental' option was given, no matter
+what the verbosity level. This behavior, and, especially, the binary
+output it produced were considered inconvenient and were changed in
+version 1.16.
+
+
+File: tar.info, Node: Backup Levels, Next: Backup Parameters, Prev: Incremental Dumps, Up: Backups
+
+5.3 Levels of Backups
+=====================
+
+An archive containing all the files in the file system is called a "full
+backup" or "full dump". You could insure your data by creating a full
+dump every day. This strategy, however, would waste a substantial
+amount of archive media and user time, as unchanged files are daily
+re-archived.
+
+ It is more efficient to do a full dump only occasionally. To back up
+files between full dumps, you can use "incremental dumps". A "level
+one" dump archives all the files that have changed since the last full
+dump.
+
+ A typical dump strategy would be to perform a full dump once a week,
+and a level one dump once a day. This means some versions of files will
+in fact be archived more than once, but this dump strategy makes it
+possible to restore a file system to within one day of accuracy by only
+extracting two archives--the last weekly (full) dump and the last daily
+(level one) dump. The only information lost would be in files changed
+or created since the last daily backup. (Doing dumps more than once a
+day is usually not worth the trouble.)
+
+ GNU 'tar' comes with scripts you can use to do full and level-one
+(actually, even level-two and so on) dumps. Using scripts (shell
+programs) to perform backups and restoration is a convenient and
+reliable alternative to typing out file name lists and 'tar' commands by
+hand.
+
+ Before you use these scripts, you need to edit the file
+'backup-specs', which specifies parameters used by the backup scripts
+and by the restore script. This file is usually located in
+'/etc/backup' directory. *Note Backup Parameters::, for its detailed
+description. Once the backup parameters are set, you can perform
+backups or restoration by running the appropriate script.
+
+ The name of the backup script is 'backup'. The name of the restore
+script is 'restore'. The following sections describe their use in
+detail.
+
+ _Please Note:_ The backup and restoration scripts are designed to be
+used together. While it is possible to restore files by hand from an
+archive which was created using a backup script, and to create an
+archive by hand which could then be extracted using the restore script,
+it is easier to use the scripts. *Note Incremental Dumps::, before
+making such an attempt.
+
+
+File: tar.info, Node: Backup Parameters, Next: Scripted Backups, Prev: Backup Levels, Up: Backups
+
+5.4 Setting Parameters for Backups and Restoration
+==================================================
+
+The file 'backup-specs' specifies backup parameters for the backup and
+restoration scripts provided with 'tar'. You must edit 'backup-specs'
+to fit your system configuration and schedule before using these
+scripts.
+
+ Syntactically, 'backup-specs' is a shell script, containing mainly
+variable assignments. However, any valid shell construct is allowed in
+this file. Particularly, you may wish to define functions within that
+script (e.g., see 'RESTORE_BEGIN' below). For more information about
+shell script syntax, please refer to the definition of the Shell Command
+Language
+(http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#ta
+g_02). See also *note Bash Features: (bashref)Top.
+
+ The shell variables controlling behavior of 'backup' and 'restore'
+are described in the following subsections.
+
+* Menu:
+
+* General-Purpose Variables::
+* Magnetic Tape Control::
+* User Hooks::
+* backup-specs example:: An Example Text of 'Backup-specs'
+
+
+File: tar.info, Node: General-Purpose Variables, Next: Magnetic Tape Control, Up: Backup Parameters
+
+5.4.1 General-Purpose Variables
+-------------------------------
+
+ -- Backup variable: ADMINISTRATOR
+ The user name of the backup administrator. 'Backup' scripts sends
+ a backup report to this address.
+
+ -- Backup variable: BACKUP_HOUR
+ The hour at which the backups are done. This can be a number from
+ 0 to 23, or the time specification in form HOURS:MINUTES, or the
+ string 'now'.
+
+ This variable is used by 'backup'. Its value may be overridden
+ using '--time' option (*note Scripted Backups::).
+
+ -- Backup variable: TAPE_FILE
+
+ The device 'tar' writes the archive to. If TAPE_FILE is a remote
+ archive (*note remote-dev::), backup script will suppose that your
+ 'mt' is able to access remote devices. If RSH (*note RSH::) is
+ set, '--rsh-command' option will be added to invocations of 'mt'.
+
+ -- Backup variable: BLOCKING
+
+ The blocking factor 'tar' will use when writing the dump archive.
+ *Note Blocking Factor::.
+
+ -- Backup variable: BACKUP_DIRS
+
+ A list of file systems to be dumped (for 'backup'), or restored
+ (for 'restore'). You can include any directory name in the list --
+ subdirectories on that file system will be included, regardless of
+ how they may look to other networked machines. Subdirectories on
+ other file systems will be ignored.
+
+ The host name specifies which host to run 'tar' on, and should
+ normally be the host that actually contains the file system.
+ However, the host machine must have GNU 'tar' 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 (i.e., what '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.
+
+ If the list of file systems is very long you may wish to put it in
+ a separate file. This file is usually named '/etc/backup/dirs',
+ but this name may be overridden in 'backup-specs' using 'DIRLIST'
+ variable.
+
+ -- Backup variable: DIRLIST
+
+ The name of the file that contains a list of file systems to backup
+ or restore. By default it is '/etc/backup/dirs'.
+
+ -- Backup variable: BACKUP_FILES
+
+ A list of individual files to be dumped (for 'backup'), or restored
+ (for 'restore'). These should be accessible from the machine on
+ which the backup script is run.
+
+ If the list of individual files is very long you may wish to store
+ it in a separate file. This file is usually named
+ '/etc/backup/files', but this name may be overridden in
+ 'backup-specs' using 'FILELIST' variable.
+
+ -- Backup variable: FILELIST
+
+ The name of the file that contains a list of individual files to
+ backup or restore. By default it is '/etc/backup/files'.
+
+ -- Backup variable: MT
+
+ Full file name of 'mt' binary.
+
+ -- Backup variable: RSH
+ Full file name of 'rsh' binary or its equivalent. You may wish to
+ set it to 'ssh', to improve security. In this case you will have
+ to use public key authentication.
+
+ -- Backup variable: RSH_COMMAND
+
+ Full file name of 'rsh' binary on remote machines. This will be
+ passed via '--rsh-command' option to the remote invocation of GNU
+ 'tar'.
+
+ -- Backup variable: VOLNO_FILE
+
+ Name of temporary file to hold volume numbers. This needs to be
+ accessible by all the machines which have file systems to be
+ dumped.
+
+ -- Backup variable: XLIST
+
+ Name of "exclude file list". An "exclude file list" is a file
+ located on the remote machine and containing the list of files to
+ be excluded from the backup. Exclude file lists are searched in
+ /etc/tar-backup directory. A common use for exclude file lists is
+ to exclude files containing security-sensitive information (e.g.,
+ '/etc/shadow' from backups).
+
+ This variable affects only 'backup'.
+
+ -- Backup variable: SLEEP_TIME
+
+ Time to sleep between dumps of any two successive file systems
+
+ This variable affects only 'backup'.
+
+ -- Backup variable: DUMP_REMIND_SCRIPT
+
+ 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, GNU 'tar' will display its
+ built-in prompt, and will expect confirmation from the console.
+ For the description of the default prompt, see *note change volume
+ prompt::.
+
+ -- Backup variable: SLEEP_MESSAGE
+
+ Message to display on the terminal while waiting for dump time.
+ Usually this will just be some literal text.
+
+ -- Backup variable: TAR
+
+ Full file name of the GNU 'tar' executable. If this is not set,
+ backup scripts will search 'tar' in the current shell path.
+
+
+File: tar.info, Node: Magnetic Tape Control, Next: User Hooks, Prev: General-Purpose Variables, Up: Backup Parameters
+
+5.4.2 Magnetic Tape Control
+---------------------------
+
+Backup scripts access tape device using special "hook functions". These
+functions take a single argument -- the name of the tape device. Their
+names are kept in the following variables:
+
+ -- Backup variable: MT_BEGIN
+ The name of "begin" function. This function is called before
+ accessing the drive. By default it retensions the tape:
+
+ MT_BEGIN=mt_begin
+
+ mt_begin() {
+ mt -f "$1" retension
+ }
+
+ -- Backup variable: MT_REWIND
+ The name of "rewind" function. The default definition is as
+ follows:
+
+ MT_REWIND=mt_rewind
+
+ mt_rewind() {
+ mt -f "$1" rewind
+ }
+
+ -- Backup variable: MT_OFFLINE
+ The name of the function switching the tape off line. By default
+ it is defined as follows:
+
+ MT_OFFLINE=mt_offline
+
+ mt_offline() {
+ mt -f "$1" offl
+ }
+
+ -- Backup variable: MT_STATUS
+ The name of the function used to obtain the status of the archive
+ device, including error count. Default definition:
+
+ MT_STATUS=mt_status
+
+ mt_status() {
+ mt -f "$1" status
+ }
+
+
+File: tar.info, Node: User Hooks, Next: backup-specs example, Prev: Magnetic Tape Control, Up: Backup Parameters
+
+5.4.3 User Hooks
+----------------
+
+"User hooks" are shell functions executed before and after each 'tar'
+invocation. Thus, there are "backup hooks", which are executed before
+and after dumping each file system, and "restore hooks", executed before
+and after restoring a file system. Each user hook is a shell function
+taking four arguments:
+
+ -- User Hook Function: hook LEVEL HOST FS FSNAME
+ Its arguments are:
+
+ LEVEL
+ Current backup or restore level.
+
+ HOST
+ Name or IP address of the host machine being dumped or
+ restored.
+
+ FS
+ Full file name of the file system being dumped or restored.
+
+ FSNAME
+ File system name with directory separators replaced with
+ colons. This is useful, e.g., for creating unique files.
+
+ Following variables keep the names of user hook functions:
+
+ -- Backup variable: DUMP_BEGIN
+ Dump begin function. It is executed before dumping the file
+ system.
+
+ -- Backup variable: DUMP_END
+ Executed after dumping the file system.
+
+ -- Backup variable: RESTORE_BEGIN
+ Executed before restoring the file system.
+
+ -- Backup variable: RESTORE_END
+ Executed after restoring the file system.
+
+
+File: tar.info, Node: backup-specs example, Prev: User Hooks, Up: Backup Parameters
+
+5.4.4 An Example Text of 'Backup-specs'
+---------------------------------------
+
+The following is an example of 'backup-specs':
+
+ # site-specific parameters for file system backup.
+
+ ADMINISTRATOR=friedman
+ BACKUP_HOUR=1
+ TAPE_FILE=/dev/nrsmt0
+
+ # Use ssh instead of the less secure rsh
+ RSH=/usr/bin/ssh
+ RSH_COMMAND=/usr/bin/ssh
+
+ # Override MT_STATUS function:
+ my_status() {
+ mts -t $TAPE_FILE
+ }
+ MT_STATUS=my_status
+
+ # Disable MT_OFFLINE function
+ MT_OFFLINE=:
+
+ BLOCKING=124
+ BACKUP_DIRS="
+ albert:/fs/fsf
+ apple-gunkies:/gd
+ albert:/fs/gd2
+ albert:/fs/gp
+ geech:/usr/jla
+ churchy:/usr/roland
+ albert:/
+ albert:/usr
+ apple-gunkies:/
+ apple-gunkies:/usr
+ gnu:/hack
+ gnu:/u
+ apple-gunkies:/com/mailer/gnu
+ apple-gunkies:/com/archive/gnu"
+
+ BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
+
+
+
+File: tar.info, Node: Scripted Backups, Next: Scripted Restoration, Prev: Backup Parameters, Up: Backups
+
+5.5 Using the Backup Scripts
+============================
+
+The syntax for running a backup script is:
+
+ backup --level=LEVEL --time=TIME
+
+ The '--level' option requests the dump level. Thus, to produce a
+full dump, specify '--level=0' (this is the default, so '--level' may be
+omitted if its value is '0')(1).
+
+ The '--time' option determines when should the backup be run. TIME
+may take three forms:
+
+HH:MM
+
+ The dump must be run at HH hours MM minutes.
+
+HH
+
+ The dump must be run at HH hours.
+
+now
+
+ The dump must be run immediately.
+
+ You should start a script with a tape or disk mounted. Once you
+start a script, it prompts you for new tapes or disks as it needs them.
+Media volumes don't have to correspond to archive files -- a
+multi-volume archive can be started in the middle of a tape that already
+contains the end of another multi-volume archive. The 'restore' script
+prompts for media by its archive volume, so to avoid an error message
+you should keep track of which tape (or disk) contains which volume of
+the archive (*note Scripted Restoration::).
+
+ The backup scripts write two files on the file system. The first is
+a record file in '/etc/tar-backup/', which is used by the scripts to
+store and retrieve information about which files were dumped. This file
+is not meant to be read by humans, and should not be deleted by them.
+*Note Snapshot Files::, for a more detailed explanation of this file.
+
+ The second file is a log file containing the names of the file
+systems and files dumped, what time the backup was made, and any error
+messages that were generated, as well as how much space was left in the
+media volume after the last volume of the archive was written. You
+should check this log file after every backup. The file name is
+'log-MM-DD-YYYY-level-N', where MM-DD-YYYY represents current date, and
+N represents current dump level number.
+
+ The script also prints the name of each system being dumped to the
+standard output.
+
+ Following is the full list of options accepted by 'backup' script:
+
+'-l LEVEL'
+'--level=LEVEL'
+ Do backup level LEVEL (default 0).
+
+'-f'
+'--force'
+ Force backup even if today's log file already exists.
+
+'-v[LEVEL]'
+'--verbose[=LEVEL]'
+ Set verbosity level. The higher the level is, the more debugging
+ information will be output during execution. Default LEVEL is 100,
+ which means the highest debugging level.
+
+'-t START-TIME'
+'--time=START-TIME'
+ Wait till TIME, then do backup.
+
+'-h'
+'--help'
+ Display short help message and exit.
+
+'-V'
+'--version'
+ Display information about the program's name, version, origin and
+ legal status, all on standard output, and then exit successfully.
+
+ ---------- Footnotes ----------
+
+ (1) For backward compatibility, the 'backup' will also try to deduce
+the requested dump level from the name of the script itself. If the
+name consists of a string 'level-' followed by a single decimal digit,
+that digit is taken as the dump level number. Thus, you may create a
+link from 'backup' to 'level-1' and then run 'level-1' whenever you need
+to create a level one dump.
+
+
+File: tar.info, Node: Scripted Restoration, Prev: Scripted Backups, Up: Backups
+
+5.6 Using the Restore Script
+============================
+
+To restore files that were archived using a scripted backup, use the
+'restore' script. Its usage is quite straightforward. In the simplest
+form, invoke 'restore --all', it will then restore all the file systems
+and files specified in 'backup-specs' (*note BACKUP_DIRS:
+General-Purpose Variables.).
+
+ You may select the file systems (and/or files) to restore by giving
+'restore' a list of "patterns" in its command line. For example,
+running
+
+ restore 'albert:*'
+
+will restore all file systems on the machine 'albert'. A more
+complicated example:
+
+ restore 'albert:*' '*:/var'
+
+This command will restore all file systems on the machine 'albert' as
+well as '/var' file system on all machines.
+
+ By default 'restore' will start restoring files from the lowest
+available dump level (usually zero) and will continue through all
+available dump levels. There may be situations where such a thorough
+restore is not necessary. For example, you may wish to restore only
+files from the recent level one backup. To do so, use '--level' option,
+as shown in the example below:
+
+ restore --level=1
+
+ The full list of options accepted by 'restore' follows:
+
+'-a'
+'--all'
+ Restore all file systems and files specified in 'backup-specs'.
+
+'-l LEVEL'
+'--level=LEVEL'
+ Start restoring from the given backup level, instead of the default
+ 0.
+
+'-v[LEVEL]'
+'--verbose[=LEVEL]'
+ Set verbosity level. The higher the level is, the more debugging
+ information will be output during execution. Default LEVEL is 100,
+ which means the highest debugging level.
+
+'-h'
+'--help'
+ Display short help message and exit.
+
+'-V'
+'--version'
+ Display information about the program's name, version, origin and
+ legal status, all on standard output, and then exit successfully.
+
+ You should start the restore script with the media containing the
+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. *Note Tape Positioning::, for a discussion of tape positioning.
+
+ *Warning:* The script will delete files from the active file system
+ if they were not in the file system when the archive was made.
+
+ *Note Incremental Dumps::, for an explanation of how the script makes
+that determination.
+
+
+File: tar.info, Node: Choosing, Next: Date input formats, Prev: Backups, Up: Top
+
+6 Choosing Files and Names for 'tar'
+************************************
+
+Certain options to 'tar' enable you to specify a name for your archive.
+Other options let you decide which files to include or exclude from the
+archive, based on when or whether files were modified, whether the file
+names do or don't match specified patterns, or whether files are in
+specified directories.
+
+ This chapter discusses these options in detail.
+
+* Menu:
+
+* file:: Choosing the Archive's Name
+* Selecting Archive Members::
+* files:: Reading Names from a File
+* exclude:: Excluding Some Files
+* 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
+
+
+File: tar.info, Node: file, Next: Selecting Archive Members, Up: Choosing
+
+6.1 Choosing and Naming Archive Files
+=====================================
+
+By default, 'tar' uses an archive file name that was compiled when it
+was built on the system; usually this name refers to some physical tape
+drive on the machine. However, the person who installed 'tar' on the
+system may not have set the default to a meaningful value as far as most
+users are concerned. As a result, you will usually want to tell 'tar'
+where to find (or create) the archive. The '--file=ARCHIVE-NAME' ('-f
+ARCHIVE-NAME') option allows you to either specify or name a file to use
+as the archive instead of the default archive file location.
+
+'--file=ARCHIVE-NAME'
+'-f ARCHIVE-NAME'
+ Name the archive to create or operate on. Use in conjunction with
+ any operation.
+
+ For example, in this 'tar' command,
+
+ $ tar -cvf collection.tar blues folk jazz
+
+'collection.tar' is the name of the archive. It must directly follow
+the '-f' option, since whatever directly follows '-f' _will_ end up
+naming the archive. If you neglect to specify an archive name, you may
+end up overwriting a file in the working directory with the archive you
+create since 'tar' will use this file's name for the archive name.
+
+ An archive can be saved as a file in the file system, sent through a
+pipe or over a network, or written to an I/O device such as a tape,
+floppy disk, or CD write drive.
+
+ If you do not name the archive, 'tar' uses the value of the
+environment variable 'TAPE' as the file name for the archive. If that
+is not available, 'tar' uses a default, compiled-in archive name,
+usually that for tape unit zero (i.e., '/dev/tu00').
+
+ If you use '-' as an ARCHIVE-NAME, 'tar' reads the archive from
+standard input (when listing or extracting files), or writes it to
+standard output (when creating an archive). If you use '-' as an
+ARCHIVE-NAME when modifying an archive, 'tar' reads the original archive
+from its standard input and writes the entire new archive to its
+standard output.
+
+ The following example is a convenient way of copying directory
+hierarchy from 'sourcedir' to 'targetdir'.
+
+ $ (cd sourcedir; tar -cf - .) | (cd targetdir; tar -xpf -)
+
+ The '-C' option allows to avoid using subshells:
+
+ $ tar -C sourcedir -cf - . | tar -C targetdir -xpf -
+
+ In both examples above, the leftmost 'tar' invocation archives the
+contents of 'sourcedir' to the standard output, while the rightmost one
+reads this archive from its standard input and extracts it. The '-p'
+option tells it to restore permissions of the extracted files.
+
+ To specify an archive file on a device attached to a remote machine,
+use the following:
+
+ --file=HOSTNAME:/DEV/FILE-NAME
+
+'tar' will set up the remote connection, if possible, and prompt you for
+a username and password. If you use '--file=@HOSTNAME:/DEV/FILE-NAME',
+'tar' will attempt to set up the remote connection using your username
+as the username on the remote machine.
+
+ If the archive file name includes a colon (':'), then it is assumed
+to be a file on another machine. If the archive file is
+'USER@HOST:FILE', then FILE is used on the host HOST. The remote host
+is accessed using the 'rsh' program, with a username of USER. If the
+username is omitted (along with the '@' sign), then your user name will
+be used. (This is the normal 'rsh' behavior.) It is necessary for the
+remote machine, in addition to permitting your 'rsh' access, to have the
+'rmt' program installed (this command is included in the GNU 'tar'
+distribution and by default is installed under 'PREFIX/libexec/rmt',
+where PREFIX means your installation prefix). If you need to use a file
+whose name includes a colon, then the remote tape drive behavior can be
+inhibited by using the '--force-local' option.
+
+ When the archive is being created to '/dev/null', GNU 'tar' tries to
+minimize input and output operations. The Amanda backup system, when
+used with GNU 'tar', has an initial sizing pass which uses this feature.
+
+
+File: tar.info, Node: Selecting Archive Members, Next: files, Prev: file, Up: Choosing
+
+6.2 Selecting Archive Members
+=============================
+
+"File Name arguments" specify which files in the file system 'tar'
+operates on, when creating or adding to an archive, or which archive
+members 'tar' operates on, when reading or deleting from an archive.
+*Note Operations::.
+
+ To specify file names, you can include them as the last arguments on
+the command line, as follows:
+ tar OPERATION [OPTION1 OPTION2 ...] [FILE NAME-1 FILE NAME-2 ...]
+
+ If a file name begins with dash ('-'), precede it with '--add-file'
+option to prevent it from being treated as an option.
+
+ By default GNU 'tar' attempts to "unquote" each file or member name,
+replacing "escape sequences" according to the following table:
+
+Escape Replaced with
+-----------------------------------------------------------
+\a Audible bell (ASCII 7)
+\b Backspace (ASCII 8)
+\f Form feed (ASCII 12)
+\n New line (ASCII 10)
+\r Carriage return (ASCII 13)
+\t Horizontal tabulation (ASCII 9)
+\v Vertical tabulation (ASCII 11)
+\? ASCII 127
+\N ASCII N (N should be an octal number of
+ up to 3 digits)
+
+ A backslash followed by any other symbol is retained.
+
+ This default behavior is controlled by the following command line
+option:
+
+'--unquote'
+ Enable unquoting input file or member names (default).
+
+'--no-unquote'
+ Disable unquoting input file or member names.
+
+ If you specify a directory name as a file name argument, all the
+files in that directory are operated on by 'tar'.
+
+ If you do not specify files, 'tar' behavior differs depending on the
+operation mode as described below:
+
+ When 'tar' is invoked with '--create' ('-c'), 'tar' will stop
+immediately, reporting the following:
+
+ $ tar cf a.tar
+ tar: Cowardly refusing to create an empty archive
+ Try 'tar --help' or 'tar --usage' for more information.
+
+ If you specify either '--list' ('-t') or '--extract' ('--get', '-x'),
+'tar' operates on all the archive members in the archive.
+
+ If run with '--diff' option, tar will compare the archive with the
+contents of the current working directory.
+
+ If you specify any other operation, 'tar' does nothing.
+
+ By default, 'tar' takes file names from the command line. However,
+there are other ways to specify file or member names, or to modify the
+manner in which 'tar' selects the files or members upon which to
+operate. In general, these methods work both for specifying the names
+of files and archive members.
+
+
+File: tar.info, Node: files, Next: exclude, Prev: Selecting Archive Members, Up: Choosing
+
+6.3 Reading Names from a File
+=============================
+
+Instead of giving the names of files or archive members on the command
+line, you can put the names into a file, and then use the
+'--files-from=FILE-OF-NAMES' ('-T FILE-OF-NAMES') option to 'tar'. Give
+the name of the file which contains the list of files to include as the
+argument to '--files-from'. In the list, the file names should be
+separated by newlines. You will frequently use this option when you
+have generated the list of files to archive with the 'find' utility.
+
+'--files-from=FILE-NAME'
+'-T FILE-NAME'
+ Get names to extract or create from file FILE-NAME.
+
+ If you give a single dash as a file name for '--files-from', (i.e.,
+you specify either '--files-from=-' or '-T -'), then the file names are
+read from standard input.
+
+ Unless you are running 'tar' with '--create', you cannot use both
+'--files-from=-' and '--file=-' ('-f -') in the same command.
+
+ Any number of '-T' options can be given in the command line.
+
+ The following example shows how to use 'find' to generate a list of
+files smaller than 400K in length and put that list into a file called
+'small-files'. You can then use the '-T' option to 'tar' to specify the
+files from that file, 'small-files', to create the archive 'little.tgz'.
+(The '-z' option to 'tar' compresses the archive with 'gzip'; *note
+gzip:: for more information.)
+
+ $ find . -size -400 -print > small-files
+ $ tar -c -v -z -T small-files -f little.tgz
+
+By default, each line read from the file list is first stripped off any
+leading and trailing whitespace. If the resulting string begins with
+'-' character, it is considered a 'tar' option and is processed
+accordingly(1). For example, the common use of this feature is to
+change to another directory by specifying '-C' option:
+
+ $ cat list
+ -C/etc
+ passwd
+ hosts
+ -C/lib
+ libc.a
+ $ tar -c -f foo.tar --files-from list
+
+In this example, 'tar' will first switch to '/etc' directory and add
+files 'passwd' and 'hosts' to the archive. Then it will change to
+'/lib' directory and will archive the file 'libc.a'. Thus, the
+resulting archive 'foo.tar' will contain:
+
+ $ tar tf foo.tar
+ passwd
+ hosts
+ libc.a
+
+ Note, that any options used in the file list remain in effect for the
+rest of the command line. For example, using the same 'list' file as
+above, the following command
+
+ $ tar -c -f foo.tar --files-from list libcurses.a
+
+will look for file 'libcurses.a' in the directory '/lib', because it was
+used with the last '-C' option (*note Position-Sensitive Options::).
+
+ If such option handling is undesirable, use the
+'--verbatim-files-from' option. When this option is in effect, each
+line read from the file list is treated as a file name. Notice, that
+this means, in particular, that no whitespace trimming is performed.
+
+ The '--verbatim-files-from' affects all '-T' options that follow it
+in the command line. The default behavior can be restored using
+'--no-verbatim-files-from' option.
+
+ To disable option handling for a single file name, use the
+'--add-file' option, e.g.: '--add-file=--my-file'.
+
+ You can use any GNU 'tar' command line options in the file list file,
+including '--files-from' option itself. This allows for including
+contents of a file list into another file list file. Note however, that
+options that control file list processing, such as
+'--verbatim-files-from' or '--null' won't affect the file they appear
+in. They will affect next '--files-from' option, if there is any.
+
+* Menu:
+
+* nul::
+
+ ---------- Footnotes ----------
+
+ (1) Versions of GNU 'tar' up to 1.15.1 recognized only '-C' option in
+file lists, and only if the option and its argument occupied two
+consecutive lines.
+
+
+File: tar.info, Node: nul, Up: files
+
+6.3.1 'NUL'-Terminated File Names
+---------------------------------
+
+The '--null' option causes '--files-from=FILE-OF-NAMES' ('-T
+FILE-OF-NAMES') to read file names terminated by a 'NUL' instead of a
+newline, so files whose names contain newlines can be archived using
+'--files-from'.
+
+'--null'
+ Only consider 'NUL'-terminated file names, instead of files that
+ terminate in a newline.
+
+'--no-null'
+ Undo the effect of any previous '--null' option.
+
+ The '--null' option is just like the one in GNU 'xargs' and 'cpio',
+and is useful with the '-print0' predicate of GNU 'find'. In 'tar',
+'--null' also disables special handling for file names that begin with
+dash (similar to '--verbatim-files-from' option).
+
+ This example shows how to use 'find' to generate a list of files
+larger than 800K in length and put that list into a file called
+'long-files'. The '-print0' option to 'find' is just like '-print',
+except that it separates files with a 'NUL' rather than with a newline.
+You can then run 'tar' with both the '--null' and '-T' options to
+specify that 'tar' gets the files from that file, 'long-files', to
+create the archive 'big.tgz'. The '--null' option to 'tar' will cause
+'tar' to recognize the 'NUL' separator between files.
+
+ $ find . -size +800 -print0 > long-files
+ $ tar -c -v --null --files-from=long-files --file=big.tar
+
+ The '--no-null' option can be used if you need to read both
+'NUL'-terminated and newline-terminated files on the same command line.
+For example, if 'flist' is a newline-terminated file, then the following
+command can be used to combine it with the above command:
+
+ $ find . -size +800 -print0 |
+ tar -c -f big.tar --null -T - --no-null -T flist
+
+ This example uses short options for typographic reasons, to avoid
+very long lines.
+
+ GNU 'tar' is tries to automatically detect 'NUL'-terminated file
+lists, so in many cases it is safe to use them even without the '--null'
+option. In this case 'tar' will print a warning and continue reading
+such a file as if '--null' were actually given:
+
+ $ find . -size +800 -print0 | tar -c -f big.tar -T -
+ tar: -: file name read contains nul character
+
+ The null terminator, however, remains in effect only for this
+particular file, any following '-T' options will assume newline
+termination. Of course, the null autodetection applies to these
+eventual surplus '-T' options as well.
+
+
+File: tar.info, Node: exclude, Next: wildcards, Prev: files, Up: Choosing
+
+6.4 Excluding Some Files
+========================
+
+To avoid operating on files whose names match a particular pattern, use
+the '--exclude' or '--exclude-from' options.
+
+'--exclude=PATTERN'
+ Causes 'tar' to ignore files that match the PATTERN.
+
+ The '--exclude=PATTERN' option prevents any file or member whose name
+matches the shell wildcard (PATTERN) from being operated on. For
+example, to create an archive with all the contents of the directory
+'src' except for files whose names end in '.o', use the command 'tar -cf
+src.tar --exclude='*.o' src'.
+
+ You may give multiple '--exclude' options.
+
+'--exclude-from=FILE'
+'-X FILE'
+ Causes 'tar' to ignore files that match the patterns listed in
+ FILE.
+
+ Use the '--exclude-from' option to read a list of patterns, one per
+line, from FILE; 'tar' will ignore files matching those patterns. Thus
+if 'tar' is called as 'tar -c -X foo .' and the file 'foo' contains a
+single line '*.o', no files whose names end in '.o' will be added to the
+archive.
+
+ Notice, that lines from FILE are read verbatim. One of the frequent
+errors is leaving some extra whitespace after a file name, which is
+difficult to catch using text editors.
+
+ However, empty lines are OK.
+
+ When archiving directories that are under some version control system
+(VCS), it is often convenient to read exclusion patterns from this VCS'
+ignore files (e.g. '.cvsignore', '.gitignore', etc.) The following
+options provide such possibility:
+
+'--exclude-vcs-ignores'
+ Before archiving a directory, see if it contains any of the
+ following files: 'cvsignore', '.gitignore', '.bzrignore', or
+ '.hgignore'. If so, read ignore patterns from these files.
+
+ The patterns are treated much as the corresponding VCS would treat
+ them, i.e.:
+
+ '.cvsignore'
+ Contains shell-style globbing patterns that apply only to the
+ directory where this file resides. No comments are allowed in
+ the file. Empty lines are ignored.
+
+ '.gitignore'
+ Contains shell-style globbing patterns. Applies to the
+ directory where '.gitfile' is located and all its
+ subdirectories.
+
+ Any line beginning with a '#' is a comment. Backslash escapes
+ the comment character.
+
+ '.bzrignore'
+ Contains shell globbing-patterns and regular expressions (if
+ prefixed with 'RE:'(1). Patterns affect the directory and all
+ its subdirectories.
+
+ Any line beginning with a '#' is a comment.
+
+ '.hgignore'
+ Contains posix regular expressions(2). The line 'syntax:
+ glob' switches to shell globbing patterns. The line 'syntax:
+ regexp' switches back. Comments begin with a '#'. Patterns
+ affect the directory and all its subdirectories.
+
+'--exclude-ignore=FILE'
+ Before dumping a directory, 'tar' checks if it contains FILE. If
+ so, exclusion patterns are read from this file. The patterns
+ affect only the directory itself.
+
+'--exclude-ignore-recursive=FILE'
+ Same as '--exclude-ignore', except that the patterns read affect
+ both the directory where FILE resides and all its subdirectories.
+
+'--exclude-vcs'
+ Exclude files and directories used by following version control
+ systems: 'CVS', 'RCS', 'SCCS', 'SVN', 'Arch', 'Bazaar',
+ 'Mercurial', and 'Darcs'.
+
+ As of version 1.29, the following files are excluded:
+
+ * 'CVS/', and everything under it
+ * 'RCS/', and everything under it
+ * 'SCCS/', and everything under it
+ * '.git/', and everything under it
+ * '.gitignore'
+ * '.gitmodules'
+ * '.gitattributes'
+ * '.cvsignore'
+ * '.svn/', and everything under it
+ * '.arch-ids/', and everything under it
+ * '{arch}/', and everything under it
+ * '=RELEASE-ID'
+ * '=meta-update'
+ * '=update'
+ * '.bzr'
+ * '.bzrignore'
+ * '.bzrtags'
+ * '.hg'
+ * '.hgignore'
+ * '.hgrags'
+ * '_darcs'
+
+'--exclude-backups'
+ Exclude backup and lock files. This option causes exclusion of
+ files that match the following shell globbing patterns:
+
+ .#*
+ *~
+ #*#
+
+ When creating an archive, the '--exclude-caches' option family causes
+'tar' to exclude all directories that contain a "cache directory tag".
+A cache directory tag is a short file with the well-known name
+'CACHEDIR.TAG' and having a standard header specified in
+<http://www.brynosaurus.com/cachedir/spec.html>. Various applications
+write cache directory tags into directories they use to hold
+regenerable, non-precious data, so that such data can be more easily
+excluded from backups.
+
+ There are three 'exclude-caches' options, each providing a different
+exclusion semantics:
+
+'--exclude-caches'
+ Do not archive the contents of the directory, but archive the
+ directory itself and the 'CACHEDIR.TAG' file.
+
+'--exclude-caches-under'
+ Do not archive the contents of the directory, nor the
+ 'CACHEDIR.TAG' file, archive only the directory itself.
+
+'--exclude-caches-all'
+ Omit directories containing 'CACHEDIR.TAG' file entirely.
+
+ Another option family, '--exclude-tag', provides a generalization of
+this concept. It takes a single argument, a file name to look for. Any
+directory that contains this file will be excluded from the dump.
+Similarly to 'exclude-caches', there are three options in this option
+family:
+
+'--exclude-tag=FILE'
+ Do not dump the contents of the directory, but dump the directory
+ itself and the FILE.
+
+'--exclude-tag-under=FILE'
+ Do not dump the contents of the directory, nor the FILE, archive
+ only the directory itself.
+
+'--exclude-tag-all=FILE'
+ Omit directories containing FILE file entirely.
+
+ Multiple '--exclude-tag*' options can be given.
+
+ For example, given this directory:
+
+ $ find dir
+ dir
+ dir/blues
+ dir/jazz
+ dir/folk
+ dir/folk/tagfile
+ dir/folk/sanjuan
+ dir/folk/trote
+
+ The '--exclude-tag' will produce the following:
+
+ $ tar -cf archive.tar --exclude-tag=tagfile -v dir
+ dir/
+ dir/blues
+ dir/jazz
+ dir/folk/
+ tar: dir/folk/: contains a cache directory tag tagfile;
+ contents not dumped
+ dir/folk/tagfile
+
+ Both the 'dir/folk' directory and its tagfile are preserved in the
+archive, however the rest of files in this directory are not.
+
+ Now, using the '--exclude-tag-under' option will exclude 'tagfile'
+from the dump, while still preserving the directory itself, as shown in
+this example:
+
+ $ tar -cf archive.tar --exclude-tag-under=tagfile -v dir
+ dir/
+ dir/blues
+ dir/jazz
+ dir/folk/
+ ./tar: dir/folk/: contains a cache directory tag tagfile;
+ contents not dumped
+
+ Finally, using '--exclude-tag-all' omits the 'dir/folk' directory
+entirely:
+
+ $ tar -cf archive.tar --exclude-tag-all=tagfile -v dir
+ dir/
+ dir/blues
+ dir/jazz
+ ./tar: dir/folk/: contains a cache directory tag tagfile;
+ directory not dumped
+
+* Menu:
+
+* problems with exclude::
+
+ ---------- Footnotes ----------
+
+ (1) According to the Bazaar docs, globbing-patterns are Korn-shell
+style and regular expressions are perl-style. As of GNU 'tar' version
+1.29, these are treated as shell-style globs and posix extended regexps.
+This will be fixed in future releases.
+
+ (2) Support for perl-style regexps will appear in future releases.
+
+
+File: tar.info, Node: problems with exclude, Up: exclude
+
+Problems with Using the 'exclude' Options
+-----------------------------------------
+
+Some users find 'exclude' options confusing. Here are some common
+pitfalls:
+
+ * The main operating mode of 'tar' does not act on a file name
+ explicitly listed on the command line, if one of its file name
+ components is excluded. In the example above, if you create an
+ archive and exclude files that end with '*.o', but explicitly name
+ the file 'dir.o/foo' after all the options have been listed,
+ 'dir.o/foo' will be excluded from the archive.
+
+ * You can sometimes confuse the meanings of '--exclude' and
+ '--exclude-from'. Be careful: use '--exclude' when files to be
+ excluded are given as a pattern on the command line. Use
+ '--exclude-from' to introduce the name of a file which contains a
+ list of patterns, one per line; each of these patterns can exclude
+ zero, one, or many files.
+
+ * When you use '--exclude=PATTERN', be sure to quote the PATTERN
+ parameter, so GNU 'tar' sees wildcard characters like '*'. If you
+ do not do this, the shell might expand the '*' itself using files
+ at hand, so 'tar' might receive a list of files instead of one
+ pattern, or none at all, making the command somewhat illegal. This
+ might not correspond to what you want.
+
+ For example, write:
+
+ $ tar -c -f ARCHIVE.TAR --exclude '*.o' DIRECTORY
+
+ rather than:
+
+ # _Wrong!_
+ $ tar -c -f ARCHIVE.TAR --exclude *.o DIRECTORY
+
+ * You must use use shell syntax, or globbing, rather than 'regexp'
+ syntax, when using exclude options in 'tar'. If you try to use
+ 'regexp' syntax to describe files to be excluded, your command
+ might fail.
+
+ *
+ In earlier versions of 'tar', what is now the '--exclude-from'
+ option was called '--exclude' instead. Now, '--exclude' applies to
+ patterns listed on the command line and '--exclude-from' applies to
+ patterns listed in a file.
+
+
+File: tar.info, Node: wildcards, Next: quoting styles, Prev: exclude, Up: Choosing
+
+6.5 Wildcards Patterns and Matching
+===================================
+
+"Globbing" is the operation by which "wildcard" characters, '*' or '?'
+for example, are replaced and expanded into all existing files matching
+the given pattern. GNU 'tar' can use wildcard patterns for matching (or
+globbing) archive members when extracting from or listing an archive.
+Wildcard patterns are also used for verifying volume labels of 'tar'
+archives. This section has the purpose of explaining wildcard syntax
+for 'tar'.
+
+ A PATTERN should be written according to shell syntax, using wildcard
+characters to effect globbing. Most characters in the pattern stand for
+themselves in the matched string, and case is significant: 'a' will
+match only 'a', and not 'A'. The character '?' in the pattern matches
+any single character in the matched string. The character '*' in the
+pattern matches zero, one, or more single characters in the matched
+string. The character '\' says to take the following character of the
+pattern _literally_; it is useful when one needs to match the '?', '*',
+'[' or '\' characters, themselves.
+
+ The character '[', up to the matching ']', introduces a character
+class. A "character class" is a list of acceptable characters for the
+next single character of the matched string. For example, '[abcde]'
+would match any of the first five letters of the alphabet. Note that
+within a character class, all of the "special characters" listed above
+other than '\' lose their special meaning; for example, '[-\\[*?]]'
+would match any of the characters, '-', '\', '[', '*', '?', or ']'.
+(Due to parsing constraints, the characters '-' and ']' must either come
+_first_ or _last_ in a character class.)
+
+ If the first character of the class after the opening '[' is '!' or
+'^', then the meaning of the class is reversed. Rather than listing
+character to match, it lists those characters which are _forbidden_ as
+the next single character of the matched string.
+
+ Other characters of the class stand for themselves. The special
+construction '[A-E]', using an hyphen between two letters, is meant to
+represent all characters between A and E, inclusive.
+
+ Periods ('.') or forward slashes ('/') are not considered special for
+wildcard matches. However, if a pattern completely matches a directory
+prefix of a matched string, then it matches the full matched string:
+thus, excluding a directory also excludes all the files beneath it.
+
+* Menu:
+
+* controlling pattern-matching::
+
+
+File: tar.info, Node: controlling pattern-matching, Up: wildcards
+
+Controlling Pattern-Matching
+----------------------------
+
+For the purposes of this section, we call "exclusion members" all member
+names obtained while processing '--exclude' and '--exclude-from'
+options, and "inclusion members" those member names that were given in
+the command line or read from the file specified with '--files-from'
+option.
+
+ These two pairs of member lists are used in the following operations:
+'--diff', '--extract', '--list', '--update'.
+
+ There are no inclusion members in create mode ('--create' and
+'--append'), since in this mode the names obtained from the command line
+refer to _files_, not archive members.
+
+ By default, inclusion members are compared with archive members
+literally (1) and exclusion members are treated as globbing patterns.
+For example:
+
+ $ tar tf foo.tar
+ a.c
+ b.c
+ a.txt
+ [remarks]
+ # Member names are used verbatim:
+ $ tar -xf foo.tar -v '[remarks]'
+ [remarks]
+ # Exclude member names are globbed:
+ $ tar -xf foo.tar -v --exclude '*.c'
+ a.txt
+ [remarks]
+
+ This behavior can be altered by using the following options:
+
+'--wildcards'
+ Treat all member names as wildcards.
+
+'--no-wildcards'
+ Treat all member names as literal strings.
+
+ Thus, to extract files whose names end in '.c', you can use:
+
+ $ tar -xf foo.tar -v --wildcards '*.c'
+ a.c
+ b.c
+
+Notice quoting of the pattern to prevent the shell from interpreting it.
+
+ The effect of '--wildcards' option is canceled by '--no-wildcards'.
+This can be used to pass part of the command line arguments verbatim and
+other part as globbing patterns. For example, the following invocation:
+
+ $ tar -xf foo.tar --wildcards '*.txt' --no-wildcards '[remarks]'
+
+instructs 'tar' to extract from 'foo.tar' all files whose names end in
+'.txt' and the file named '[remarks]'.
+
+ Normally, a pattern matches a name if an initial subsequence of the
+name's components matches the pattern, where '*', '?', and '[...]' are
+the usual shell wildcards, '\' escapes wildcards, and wildcards can
+match '/'.
+
+ Other than optionally stripping leading '/' from names (*note
+absolute::), patterns and names are used as-is. For example, trailing
+'/' is not trimmed from a user-specified name before deciding whether to
+exclude it.
+
+ However, this matching procedure can be altered by the options listed
+below. These options accumulate. For example:
+
+ --ignore-case --exclude='makefile' --no-ignore-case ---exclude='readme'
+
+ignores case when excluding 'makefile', but not when excluding 'readme'.
+
+'--anchored'
+'--no-anchored'
+ If anchored, a pattern must match an initial subsequence of the
+ name's components. Otherwise, the pattern can match any
+ subsequence. Default is '--no-anchored' for exclusion members and
+ '--anchored' inclusion members.
+
+'--ignore-case'
+'--no-ignore-case'
+ When ignoring case, upper-case patterns match lower-case names and
+ vice versa. When not ignoring case (the default), matching is
+ case-sensitive.
+
+'--wildcards-match-slash'
+'--no-wildcards-match-slash'
+ When wildcards match slash (the default for exclusion members), a
+ wildcard like '*' in the pattern can match a '/' in the name.
+ Otherwise, '/' is matched only by '/'.
+
+ The '--recursion' and '--no-recursion' options (*note recurse::) also
+affect how member patterns are interpreted. If recursion is in effect,
+a pattern matches a name if it matches any of the name's parent
+directories.
+
+ The following table summarizes pattern-matching default values:
+
+Members Default settings
+--------------------------------------------------------------------------
+Inclusion '--no-wildcards --anchored
+ --no-wildcards-match-slash'
+Exclusion '--wildcards --no-anchored
+ --wildcards-match-slash'
+
+ ---------- Footnotes ----------
+
+ (1) Notice that earlier GNU 'tar' versions used globbing for
+inclusion members, which contradicted to UNIX98 specification and was
+not documented. *Note Changes::, for more information on this and other
+changes.
+
+
+File: tar.info, Node: quoting styles, Next: transform, Prev: wildcards, Up: Choosing
+
+6.6 Quoting Member Names
+========================
+
+When displaying member names, 'tar' takes care to avoid ambiguities
+caused by certain characters. This is called "name quoting". The
+characters in question are:
+
+ * Non-printable control characters:
+ Character ASCII Character name
+ -------------------------------------------------------------------
+ \a 7 Audible bell
+ \b 8 Backspace
+ \f 12 Form feed
+ \n 10 New line
+ \r 13 Carriage return
+ \t 9 Horizontal tabulation
+ \v 11 Vertical tabulation
+
+ * Space (ASCII 32)
+
+ * Single and double quotes (''' and '"')
+
+ * Backslash ('\')
+
+ The exact way 'tar' uses to quote these characters depends on the
+"quoting style". The default quoting style, called "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 'Character' in the above table, a space
+is printed as '\ ' and a backslash as '\\'.
+
+ GNU 'tar' offers seven distinct quoting styles, which can be selected
+using '--quoting-style' option:
+
+'--quoting-style=STYLE'
+
+ Sets quoting style. Valid values for STYLE argument are: literal,
+ shell, shell-always, c, escape, locale, clocale.
+
+ These styles are described in detail below. To illustrate their
+effect, we will use an imaginary tar archive 'arch.tar' containing the
+following members:
+
+ # 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
+
+ Here is how usual 'ls' command would have listed them, if they had
+existed in the current working directory:
+
+ $ ls
+ a\ttab
+ a\nnewline
+ a\ space
+ a"double"quote
+ a'single'quote
+ a\\backslash
+
+ Quoting styles:
+
+'literal'
+ No quoting, display each character as is:
+
+ $ tar tf arch.tar --quoting-style=literal
+ ./
+ ./a space
+ ./a'single'quote
+ ./a"double"quote
+ ./a\backslash
+ ./a tab
+ ./a
+ newline
+
+'shell'
+ Display characters the same way Bourne shell does: control
+ characters, except '\t' and '\n', are printed using backslash
+ escapes, '\t' and '\n' are printed as is, and a single quote is
+ printed as '\''. 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:
+
+ $ tar tf arch.tar --quoting-style=shell
+ ./
+ './a space'
+ './a'\''single'\''quote'
+ './a"double"quote'
+ './a\backslash'
+ './a tab'
+ './a
+ newline'
+
+'shell-always'
+ Same as 'shell', but the names are always enclosed in single
+ quotes:
+
+ $ tar tf arch.tar --quoting-style=shell-always
+ './'
+ './a space'
+ './a'\''single'\''quote'
+ './a"double"quote'
+ './a\backslash'
+ './a tab'
+ './a
+ newline'
+
+'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 '\"',
+ backslash characters are represented as '\\'. Single quotes and
+ spaces are not quoted:
+
+ $ tar tf arch.tar --quoting-style=c
+ "./"
+ "./a space"
+ "./a'single'quote"
+ "./a\"double\"quote"
+ "./a\\backslash"
+ "./a\ttab"
+ "./a\nnewline"
+
+'escape'
+ Control characters are printed using backslash notation, a space is
+ printed as '\ ' and a backslash as '\\'. This is the default
+ quoting style, unless it was changed when configured the package.
+
+ $ tar tf arch.tar --quoting-style=escape
+ ./
+ ./a space
+ ./a'single'quote
+ ./a"double"quote
+ ./a\\backslash
+ ./a\ttab
+ ./a\nnewline
+
+'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 ''' as left and as right quotation
+ marks. Any occurrences of the right quotation mark in a name are
+ escaped with '\', for example:
+
+ For example:
+
+ $ tar tf arch.tar --quoting-style=locale
+ './'
+ './a space'
+ './a\'single\'quote'
+ './a"double"quote'
+ './a\\backslash'
+ './a\ttab'
+ './a\nnewline'
+
+'clocale'
+ Same as 'locale', but '"' is used for both left and right quotation
+ marks, if not provided by the currently selected locale:
+
+ $ tar tf arch.tar --quoting-style=clocale
+ "./"
+ "./a space"
+ "./a'single'quote"
+ "./a\"double\"quote"
+ "./a\\backslash"
+ "./a\ttab"
+ "./a\nnewline"
+
+ You can specify which characters should be quoted in addition to
+those implied by the current quoting style:
+
+'--quote-chars=STRING'
+ Always quote characters from STRING, even if the selected quoting
+ style would not quote them.
+
+ For example, using 'escape' quoting (compare with the usual escape
+listing above):
+
+ $ tar tf arch.tar --quoting-style=escape --quote-chars=' "'
+ ./
+ ./a\ space
+ ./a'single'quote
+ ./a\"double\"quote
+ ./a\\backslash
+ ./a\ttab
+ ./a\nnewline
+
+ To disable quoting of such additional characters, use the following
+option:
+
+'--no-quote-chars=STRING'
+ Remove characters listed in STRING from the list of quoted
+ characters set by the previous '--quote-chars' option.
+
+ This option is particularly useful if you have added '--quote-chars'
+to your 'TAR_OPTIONS' (*note TAR_OPTIONS::) and wish to disable it for
+the current invocation.
+
+ Note, that '--no-quote-chars' does _not_ disable those characters
+that are quoted by default in the selected quoting style.
+
+
+File: tar.info, Node: transform, Next: after, Prev: quoting styles, Up: Choosing
+
+6.7 Modifying File and Member Names
+===================================
+
+'Tar' archives contain detailed information about files stored in them
+and full file names are part of that information. When storing a file
+to an archive, its file name is recorded in it, 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 '../'. GNU 'tar' takes
+special precautions when extracting such names and provides a special
+option for handling them, which is described in *note 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.
+
+ GNU 'tar' provides several options for these needs.
+
+'--strip-components=NUMBER'
+ Strip given NUMBER of leading components from file names before
+ extraction.
+
+ For example, suppose you have archived whole '/usr' hierarchy to a
+tar archive named 'usr.tar'. Among other files, this archive contains
+'usr/include/stdlib.h', which you wish to extract to the current working
+directory. To do so, you type:
+
+ $ tar -xf usr.tar --strip=2 usr/include/stdlib.h
+
+ The option '--strip=2' instructs 'tar' to strip the two leading
+components ('usr/' and 'include/') off the file name.
+
+ If you add the '--verbose' ('-v') option to the invocation above, 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 'tar' provides a special option for altering this
+behavior:
+
+'--show-transformed-names'
+ Display file or member names with all requested transformations
+ applied.
+
+For example:
+
+ $ tar -xf usr.tar -v --strip=2 usr/include/stdlib.h
+ usr/include/stdlib.h
+ $ tar -xf usr.tar -v --strip=2 --show-transformed usr/include/stdlib.h
+ stdlib.h
+
+ Notice that in both cases the file 'stdlib.h' is extracted to the
+current working directory, '--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
+
+ $ tar -x --strip=N
+
+it is often advisable to run
+
+ $ tar -t -v --show-transformed --strip=N
+
+to make sure the command will produce the intended results.
+
+ In case you need to apply more complex modifications to the file
+name, GNU 'tar' provides a general-purpose transformation option:
+
+'--transform=EXPRESSION'
+'--xform=EXPRESSION'
+ Modify file names using supplied EXPRESSION.
+
+The EXPRESSION is a 'sed'-like replace expression of the form:
+
+ s/REGEXP/REPLACE/[FLAGS]
+
+where REGEXP is a "regular expression", REPLACE is a replacement for
+each file name part that matches REGEXP. Both REGEXP and REPLACE are
+described in detail in *note The "s" Command: (sed)The "s" Command.
+
+ Any delimiter can be used in lieu of '/', the only requirement being
+that it be used consistently throughout the expression. For example,
+the following two expressions are equivalent:
+
+ s/one/two/
+ s,one,two,
+
+ Changing delimiters is often useful when the REGEX contains slashes.
+For example, it is more convenient to write 's,/,-,' than 's/\//-/'.
+
+ As in 'sed', you can give several replace expressions, separated by a
+semicolon.
+
+ Supported FLAGS are:
+
+'g'
+ Apply the replacement to _all_ matches to the REGEXP, not just the
+ first.
+
+'i'
+ Use case-insensitive matching.
+
+'x'
+ REGEXP is an "extended regular expression" (*note Extended regular
+ expressions: (sed)Extended regexps.).
+
+'NUMBER'
+ Only replace the NUMBERth match of the REGEXP.
+
+ Note: the POSIX standard does not specify what should happen when
+ you mix the 'g' and NUMBER modifiers. GNU 'tar' follows the GNU
+ 'sed' implementation in this regard, so the interaction is defined
+ to be: ignore matches before the NUMBERth, and then match and
+ replace all matches from the NUMBERth on.
+
+ In addition, several "transformation scope" flags are supported, that
+control to what files transformations apply. These are:
+
+'r'
+ Apply transformation to regular archive members.
+
+'R'
+ Do not apply transformation to regular archive members.
+
+'s'
+ Apply transformation to symbolic link targets.
+
+'S'
+ Do not apply transformation to symbolic link targets.
+
+'h'
+ Apply transformation to hard link targets.
+
+'H'
+ Do not apply transformation to hard link targets.
+
+ Default is 'rsh', which means to apply transformations to both
+archive members and targets of symbolic and hard links.
+
+ Default scope flags can also be changed using 'flags=' statement in
+the transform expression. The flags set this way remain in force until
+next 'flags=' statement or end of expression, whichever occurs first.
+For example:
+
+ --transform 'flags=S;s|^|/usr/local/|'
+
+ Here are several examples of '--transform' usage:
+
+ 1. Extract 'usr/' hierarchy into 'usr/local/':
+
+ $ tar --transform='s,usr/,usr/local/,' -x -f arch.tar
+
+ 2. Strip two leading directory components (equivalent to
+ '--strip-components=2'):
+
+ $ tar --transform='s,/*[^/]*/[^/]*/,,' -x -f arch.tar
+
+ 3. Convert each file name to lower case:
+
+ $ tar --transform 's/.*/\L&/' -x -f arch.tar
+
+ 4. Prepend '/prefix/' to each file name:
+
+ $ tar --transform 's,^,/prefix/,' -x -f arch.tar
+
+ 5. Archive the '/lib' directory, prepending '/usr/local' to each
+ archive member:
+
+ $ tar --transform 's,^,/usr/local/,S' -c -f arch.tar /lib
+
+ Notice the use of flags in the last example. The '/lib' directory
+often contains many symbolic links to files within it. It may look, for
+example, like this:
+
+ $ ls -l
+ drwxr-xr-x root/root 0 2008-07-08 16:20 /lib/
+ -rwxr-xr-x root/root 1250840 2008-05-25 07:44 /lib/libc-2.3.2.so
+ lrwxrwxrwx root/root 0 2008-06-24 17:12 /lib/libc.so.6 -> libc-2.3.2.so
+ ...
+
+ Using the expression 's,^,/usr/local/,' would mean adding
+'/usr/local' to both regular archive members and to link targets. In
+this case, '/lib/libc.so.6' would become:
+
+ /usr/local/lib/libc.so.6 -> /usr/local/libc-2.3.2.so
+
+ This is definitely not desired. To avoid this, the 'S' flag is used,
+which excludes symbolic link targets from filename transformations. The
+result is:
+
+ $ tar --transform 's,^,/usr/local/,S', -c -v -f arch.tar \
+ --show-transformed /lib
+ drwxr-xr-x root/root 0 2008-07-08 16:20 /usr/local/lib/
+ -rwxr-xr-x root/root 1250840 2008-05-25 07:44 /usr/local/lib/libc-2.3.2.so
+ lrwxrwxrwx root/root 0 2008-06-24 17:12 /usr/local/lib/libc.so.6 \
+ -> libc-2.3.2.so
+
+ Unlike '--strip-components', '--transform' can be used in any GNU
+'tar' operation mode. For example, the following command adds files to
+the archive while replacing the leading 'usr/' component with 'var/':
+
+ $ tar -cf arch.tar --transform='s,^usr/,var/,' /
+
+ To test '--transform' effect we suggest using
+'--show-transformed-names' option:
+
+ $ tar -cf arch.tar --transform='s,^usr/,var/,' \
+ --verbose --show-transformed-names /
+
+ If both '--strip-components' and '--transform' are used together,
+then '--transform' is applied first, and the required number of
+components is then stripped from its result.
+
+ You can use as many '--transform' options in a single command line as
+you want. The specified expressions will then be applied in order of
+their appearance. For example, the following two invocations are
+equivalent:
+
+ $ tar -cf arch.tar --transform='s,/usr/var,/var/' \
+ --transform='s,/usr/local,/usr/,'
+ $ tar -cf arch.tar \
+ --transform='s,/usr/var,/var/;s,/usr/local,/usr/,'
+
+
+File: tar.info, Node: after, Next: recurse, Prev: transform, Up: Choosing
+
+6.8 Operating Only on New Files
+===============================
+
+The '--after-date=DATE' ('--newer=DATE', '-N DATE') option causes 'tar'
+to only work on files whose data modification or status change times are
+newer than the DATE given. If DATE starts with '/' or '.', 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
+'--after-date' when extracting an archive, 'tar' will only extract files
+newer than the DATE you specify.
+
+ If you only want 'tar' to make the date comparison based on
+modification of the file's data (rather than status changes), then use
+the '--newer-mtime=DATE' option.
+
+ You may use these options with any operation. Note that these
+options differ from the '--update' ('-u') operation in that they allow
+you to specify a particular date against which 'tar' can compare when
+deciding whether or not to archive the files.
+
+'--after-date=DATE'
+'--newer=DATE'
+'-N DATE'
+ Only store files newer than DATE.
+
+ Acts on files only if their data modification or status change
+ times are later than DATE. Use in conjunction with any operation.
+
+ If DATE starts with '/' or '.', it is taken to be a file name; the
+ data modification time of that file is used as the date.
+
+'--newer-mtime=DATE'
+ Acts like '--after-date', but only looks at data modification
+ times.
+
+ These options limit '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 *note Date input formats::; remember that the
+entire date argument must be quoted if it contains any spaces.)
+
+ Gurus would say that '--after-date' tests both the data modification
+time ('mtime', the time the contents of the file were last modified) and
+the status change time ('ctime', the time the file's status was last
+changed: owner, permissions, etc.) fields, while '--newer-mtime' tests
+only the 'mtime' field.
+
+ To be precise, '--after-date' checks _both_ 'mtime' and 'ctime' and
+processes the file if either one is more recent than DATE, while
+'--newer-mtime' only checks 'mtime' and disregards 'ctime'. Neither
+does it use '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:
+
+ $ tar -cf foo.tar --newer-mtime '2 days ago'
+
+ When any of these options is used with the option '--verbose' (*note
+verbose tutorial::) GNU 'tar' 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, '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:
+
+ $ 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
+
+ *Please Note:* '--after-date' and '--newer-mtime' should not be
+ used for incremental backups. *Note Incremental Dumps::, for
+ proper way of creating incremental backups.
+
+
+File: tar.info, Node: recurse, Next: one, Prev: after, Up: Choosing
+
+6.9 Descending into Directories
+===============================
+
+Usually, 'tar' will recursively explore all directories (either those
+given on the command line or through the '--files-from' option) for the
+various files they contain. However, you may not always want 'tar' to
+act this way.
+
+ The '--no-recursion' option inhibits 'tar''s recursive descent into
+specified directories. If you specify '--no-recursion', you can use the
+'find' (*note find: (find)Top.) utility for hunting through levels of
+directories to construct a list of file names which you could then pass
+to 'tar'. 'find' allows you to be more selective when choosing which
+files to archive; see *note files::, for more information on using
+'find' with 'tar'.
+
+'--no-recursion'
+ Prevents 'tar' from recursively descending directories.
+
+'--recursion'
+ Requires 'tar' to recursively descend directories. This is the
+ default.
+
+ When you use '--no-recursion', GNU 'tar' grabs directory entries
+themselves, but does not descend on them recursively. Many people use
+'find' for locating files they want to back up, and since 'tar'
+_usually_ recursively descends on directories, they have to use the
+'-not -type d' test in their 'find' invocation (*note Type:
+(find)Type.), as they usually do not want all the files in a directory.
+They then use the '--files-from' option to archive the files located via
+'find'.
+
+ The problem when restoring files archived in this manner is that the
+directories themselves are not in the archive; so the
+'--same-permissions' ('--preserve-permissions', '-p') option does not
+affect them--while users might really like it to. Specifying
+'--no-recursion' is a way to tell 'tar' to grab only the directory
+entries given to it, adding no new files on its own. To summarize, if
+you use 'find' to create a list of files to be stored in an archive, use
+it as follows:
+
+ $ find DIR TESTS | \
+ tar -cf ARCHIVE -T - --no-recursion
+
+ The '--no-recursion' option also applies when extracting: it causes
+'tar' to extract only the matched directory entries, not the files under
+those directories.
+
+ The '--no-recursion' option also affects how globbing patterns are
+interpreted (*note controlling pattern-matching::).
+
+ The '--no-recursion' and '--recursion' options apply to later options
+and operands, and can be overridden by later occurrences of
+'--no-recursion' and '--recursion'. For example:
+
+ $ tar -cf jams.tar --no-recursion grape --recursion grape/concord
+
+creates an archive with one entry for 'grape', and the recursive
+contents of 'grape/concord', but no entries under 'grape' other than
+'grape/concord'.
+
diff --git a/doc/tar.info-2 b/doc/tar.info-2
new file mode 100644
index 0000000..9dc6a87
--- /dev/null
+++ b/doc/tar.info-2
@@ -0,0 +1,7007 @@
+This is tar.info, produced by makeinfo version 5.9.93 from tar.texi.
+
+This manual is for GNU 'tar' (version 1.29, 14 April 2016), which
+creates and extracts files from archives.
+
+ Copyright (C) 1992, 1994-1997, 1999-2001, 2003-2016 Free Software
+Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being "GNU General Public
+ License", with the Front-Cover Texts being "A GNU Manual", and with
+ the Back-Cover Texts as in (a) below. A copy of the license is
+ included in the section entitled "GNU Free Documentation License".
+
+ (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
+ modify this GNU manual."
+INFO-DIR-SECTION Archiving
+START-INFO-DIR-ENTRY
+* Tar: (tar). Making tape (or disk) archives.
+END-INFO-DIR-ENTRY
+
+INFO-DIR-SECTION Individual utilities
+START-INFO-DIR-ENTRY
+* tar: (tar)tar invocation. Invoking GNU 'tar'.
+END-INFO-DIR-ENTRY
+
+
+File: tar.info, Node: one, Prev: recurse, Up: Choosing
+
+6.10 Crossing File System Boundaries
+====================================
+
+'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 'tar' and specifying '--one-file-system'. This
+option only affects files that are archived because they are in a
+directory that is being archived; 'tar' will still archive files
+explicitly named on the command line or through '--files-from',
+regardless of where they reside.
+
+'--one-file-system'
+ Prevents 'tar' from crossing file system boundaries when archiving.
+ Use in conjunction with any write operation.
+
+ The '--one-file-system' option causes '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
+'tar' will not archive that file. If the file is a directory itself,
+'tar' will not archive anything beneath it; in other words, '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
+'--verbose' ('-v'), files that are excluded are mentioned by name on the
+standard error.
+
+* Menu:
+
+* directory:: Changing Directory
+* absolute:: Absolute File Names
+
+
+File: tar.info, Node: directory, Next: absolute, Up: one
+
+6.10.1 Changing the Working Directory
+-------------------------------------
+
+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 '--files-from'
+('-T'), use '--directory' ('-C'). This will change the working
+directory to the specified directory after that point in the list.
+
+'--directory=DIRECTORY'
+'-C DIRECTORY'
+ Changes the working directory in the middle of a command line.
+
+ For example,
+
+ $ tar -c -f jams.tar grape prune -C food cherry
+
+will place the files 'grape' and 'prune' from the current directory into
+the archive 'jams.tar', followed by the file 'cherry' from the directory
+'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 'cherry' is recorded in the archive under the
+precise name 'cherry', _not_ '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 'tar --extract', all
+three files will be written in the current directory.
+
+ Contrast this with the command,
+
+ $ tar -c -f jams.tar grape prune -C food red/cherry
+
+which records the third file in the archive under the name 'red/cherry'
+so that, if the archive is extracted using 'tar --extract', the third
+file will be written in a subdirectory named 'red'.
+
+ You can use the '--directory' option to make the archive independent
+of the original name of the directory holding the files. The following
+command places the files '/etc/passwd', '/etc/hosts', and '/lib/libc.a'
+into the archive 'foo.tar':
+
+ $ tar -c -f foo.tar -C /etc passwd hosts -C /lib libc.a
+
+However, the names of the archive members will be exactly what they were
+on the command line: 'passwd', 'hosts', and 'libc.a'. They will not
+appear to be related by file name to the original directories where
+those files were located.
+
+ Note that '--directory' options are interpreted consecutively. If
+'--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 'tar', due to a previous
+'--directory' option.
+
+ When using '--files-from' (*note files::), you can put various 'tar'
+options (including '-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:
+
+ -C/etc
+ passwd
+ hosts
+ --directory=/lib
+ libc.a
+
+To use it, you would invoke 'tar' as follows:
+
+ $ tar -c -f foo.tar --files-from list
+
+ The interpretation of options in file lists is disabled by
+'--verbatim-files-from' and '--null' options.
+
+
+File: tar.info, Node: absolute, Prev: directory, Up: one
+
+6.10.2 Absolute File Names
+--------------------------
+
+By default, GNU 'tar' drops a leading '/' on input or output, and
+complains about file names containing a '..' component. There is an
+option that turns off this behavior:
+
+'--absolute-names'
+'-P'
+ Do not strip leading slashes from file names, and permit file names
+ containing a '..' file name component.
+
+ When 'tar' extracts archive members from an archive, it strips any
+leading slashes ('/') 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 '/etc/passwd',
+'tar' will extract it as if the name were really 'etc/passwd'.
+
+ File names containing '..' can cause problems when extracting, so
+'tar' normally warns you about such files when creating an archive, and
+rejects attempts to extracts such files.
+
+ Other '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-GNU 'tar' program to use. Therefore, GNU
+'tar' also strips leading slashes from member names when putting members
+into the archive. For example, if you ask 'tar' to add the file
+'/bin/ls' to an archive, it will do so, but the member name will be
+'bin/ls'(1).
+
+ Symbolic links containing '..' or leading '/' can also cause problems
+when extracting, so 'tar' normally extracts them last; it may create
+empty files as placeholders during extraction.
+
+ If you use the '--absolute-names' ('-P') option, 'tar' will do none
+of these transformations.
+
+ To archive or extract files relative to the root directory, specify
+the '--absolute-names' ('-P') option.
+
+ Normally, 'tar' acts on files relative to the working
+directory--ignoring superior directory names when archiving, and
+ignoring leading slashes when extracting.
+
+ When you specify '--absolute-names' ('-P'), 'tar' stores file names
+including all superior directory names, and preserves leading slashes.
+If you only invoked 'tar' from the root directory you would never need
+the '--absolute-names' option, but using this option may be more
+convenient than switching to root.
+
+'--absolute-names'
+ Preserves full file names (including superior directory names) when
+ archiving and extracting files.
+
+ 'tar' prints out a message about removing the '/' from file names.
+This message appears once per GNU 'tar' 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 'tar' standard
+error to the sink. For example, under 'sh':
+
+ $ tar -c -f archive.tar /home 2> /dev/null
+
+Another solution, both nicer and simpler, would be to change to the '/'
+directory first, and then avoid absolute notation. For example:
+
+ $ tar -c -f archive.tar -C / home
+
+ *Note Integrity::, for some of the security-related implications of
+using this option.
+
+ ---------- Footnotes ----------
+
+ (1) A side effect of this is that when '--create' is used with
+'--verbose' the resulting output is not, generally speaking, the same as
+the one you'd get running 'tar --list' command. This may be important
+if you use some scripts for comparing both outputs. *Note listing
+member and file names::, for the information on how to handle this case.
+
+
+File: tar.info, Node: Date input formats, Next: Formats, Prev: Choosing, Up: Top
+
+7 Date input formats
+********************
+
+First, a quote:
+
+ Our units of temporal measurement, from seconds on up to months,
+ are so complicated, asymmetrical and disjunctive so as to make
+ coherent mental reckoning in time all but impossible. Indeed, had
+ some tyrannical god contrived to enslave our minds to time, to make
+ it all but impossible for us to escape subjection to sodden
+ routines and unpleasant surprises, he could hardly have done better
+ than handing down our present system. It is like a set of
+ trapezoidal building blocks, with no vertical or horizontal
+ surfaces, like a language in which the simplest thought demands
+ ornate constructions, useless particles and lengthy
+ circumlocutions. Unlike the more successful patterns of language
+ and science, which enable us to face experience boldly or at least
+ level-headedly, our system of temporal calculation silently and
+ persistently encourages our terror of time.
+
+ ... It is as though architects had to measure length in feet, width
+ in meters and height in ells; as though basic instruction manuals
+ demanded a knowledge of five different languages. It is no wonder
+ then that we often look into our own immediate past or future, last
+ Tuesday or a week from Sunday, with feelings of helpless confusion.
+ ...
+
+ --Robert Grudin, 'Time and the Art of Living'.
+
+ This section describes the textual date representations that GNU
+programs accept. These are the strings you, as a user, can supply as
+arguments to the various programs. The C interface (via the
+'parse_datetime' function) is not described here.
+
+* Menu:
+
+* General date syntax:: Common rules.
+* Calendar date items:: 19 Dec 1994.
+* Time of day items:: 9:20pm.
+* Time zone items:: EST, PDT, UTC, ...
+* Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500.
+* 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 parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+
+
+File: tar.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats
+
+7.1 General date syntax
+=======================
+
+A "date" is a string, possibly empty, containing many items separated by
+whitespace. The whitespace may be omitted when no ambiguity arises.
+The empty string means the beginning of today (i.e., midnight). Order
+of the items is immaterial. A date string may contain many flavors of
+items:
+
+ * calendar date items
+ * time of day items
+ * time zone items
+ * combined date and time of day items
+ * day of the week items
+ * relative items
+ * pure numbers.
+
+We describe each of these item types in turn, below.
+
+ A few ordinal numbers may be written out in words in some contexts.
+This is most useful for specifying day of the week items or relative
+items (see below). Among the most commonly used ordinal numbers, the
+word 'last' stands for -1, 'this' stands for 0, and 'first' and 'next'
+both stand for 1. Because the word 'second' stands for the unit of time
+there is no way to write the ordinal number 2, but for convenience
+'third' stands for 3, 'fourth' for 4, 'fifth' for 5, 'sixth' for 6,
+'seventh' for 7, 'eighth' for 8, 'ninth' for 9, 'tenth' for 10,
+'eleventh' for 11 and 'twelfth' for 12.
+
+ When a month is written this way, it is still considered to be
+written numerically, instead of being "spelled in full"; this changes
+the allowed strings.
+
+ In the current implementation, only English is supported for words
+and abbreviations like 'AM', 'DST', 'EST', 'first', 'January', 'Sunday',
+'tomorrow', and 'year'.
+
+ The output of the 'date' command is not always acceptable as a date
+string, not only because of the language problem, but also because there
+is no standard meaning for time zone items like 'IST'. When using
+'date' to generate a date string intended to be parsed later, specify a
+date format that is independent of language and that does not use time
+zone items other than 'UTC' and 'Z'. Here are some ways to do this:
+
+ $ LC_ALL=C TZ=UTC0 date
+ Mon Mar 1 00:21:42 UTC 2004
+ $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ'
+ 2004-03-01 00:21:42Z
+ $ date --rfc-3339=ns # --rfc-3339 is a GNU extension.
+ 2004-02-29 16:21:42.692722128-08:00
+ $ date --rfc-2822 # a GNU extension
+ Sun, 29 Feb 2004 16:21:42 -0800
+ $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension.
+ 2004-02-29 16:21:42 -0800
+ $ date +'@%s.%N' # %s and %N are GNU extensions.
+ @1078100502.692722128
+
+ Alphabetic case is completely ignored in dates. Comments may be
+introduced between round parentheses, as long as included parentheses
+are properly nested. Hyphens not followed by a digit are currently
+ignored. Leading zeros on numbers are ignored.
+
+ Invalid dates like '2005-02-29' or times like '24:00' are rejected.
+In the typical case of a host that does not support leap seconds, a time
+like '23:59:60' is rejected even if it corresponds to a valid leap
+second.
+
+
+File: tar.info, Node: Calendar date items, Next: Time of day items, Prev: General date syntax, Up: Date input formats
+
+7.2 Calendar date items
+=======================
+
+A "calendar date item" specifies a day of the year. It is specified
+differently, depending on whether the month is specified numerically or
+literally. All these strings specify the same calendar date:
+
+ 1972-09-24 # ISO 8601.
+ 72-9-24 # Assume 19xx for 69 through 99,
+ # 20xx for 00 through 68.
+ 72-09-24 # Leading zeros are ignored.
+ 9/24/72 # Common U.S. writing.
+ 24 September 1972
+ 24 Sept 72 # September has a special abbreviation.
+ 24 Sep 72 # Three-letter abbreviations always allowed.
+ Sep 24, 1972
+ 24-sep-72
+ 24sep72
+
+ The year can also be omitted. In this case, the last specified year
+is used, or the current year if none. For example:
+
+ 9/24
+ sep 24
+
+ Here are the rules.
+
+ For numeric months, the ISO 8601 format 'YEAR-MONTH-DAY' is allowed,
+where YEAR is any positive number, MONTH is a number between 01 and 12,
+and DAY is a number between 01 and 31. A leading zero must be present
+if a number is less than ten. If YEAR is 68 or smaller, then 2000 is
+added to it; otherwise, if YEAR is less than 100, then 1900 is added to
+it. The construct 'MONTH/DAY/YEAR', popular in the United States, is
+accepted. Also 'MONTH/DAY', omitting the year.
+
+ Literal months may be spelled out in full: 'January', 'February',
+'March', 'April', 'May', 'June', 'July', 'August', 'September',
+'October', 'November' or 'December'. Literal months may be abbreviated
+to their first three letters, possibly followed by an abbreviating dot.
+It is also permitted to write 'Sept' instead of 'September'.
+
+ When months are written literally, the calendar date may be given as
+any of the following:
+
+ DAY MONTH YEAR
+ DAY MONTH
+ MONTH DAY YEAR
+ DAY-MONTH-YEAR
+
+ Or, omitting the year:
+
+ MONTH DAY
+
+
+File: tar.info, Node: Time of day items, Next: Time zone items, Prev: Calendar date items, Up: Date input formats
+
+7.3 Time of day items
+=====================
+
+A "time of day item" in date strings specifies the time on a given day.
+Here are some examples, all of which represent the same time:
+
+ 20:02:00.000000
+ 20:02
+ 8:02pm
+ 20:02-0500 # In EST (U.S. Eastern Standard Time).
+
+ More generally, the time of day may be given as 'HOUR:MINUTE:SECOND',
+where HOUR is a number between 0 and 23, MINUTE is a number between 0
+and 59, and SECOND is a number between 0 and 59 possibly followed by '.'
+or ',' and a fraction containing one or more digits. Alternatively,
+':SECOND' can be omitted, in which case it is taken to be zero. On the
+rare hosts that support leap seconds, SECOND may be 60.
+
+ If the time is followed by 'am' or 'pm' (or 'a.m.' or 'p.m.'), HOUR
+is restricted to run from 1 to 12, and ':MINUTE' may be omitted (taken
+to be zero). 'am' indicates the first half of the day, 'pm' indicates
+the second half of the day. In this notation, 12 is the predecessor of
+1: midnight is '12am' while noon is '12pm'. (This is the zero-oriented
+interpretation of '12am' and '12pm', as opposed to the old tradition
+derived from Latin which uses '12m' for noon and '12pm' for midnight.)
+
+ The time may alternatively be followed by a time zone correction,
+expressed as 'SHHMM', where S is '+' or '-', HH is a number of zone
+hours and MM is a number of zone minutes. The zone minutes term, MM,
+may be omitted, in which case the one- or two-digit correction is
+interpreted as a number of hours. You can also separate HH from MM with
+a colon. When a time zone correction is given this way, it forces
+interpretation of the time relative to Coordinated Universal Time (UTC),
+overriding any previous specification for the time zone or the local
+time zone. For example, '+0530' and '+05:30' both stand for the time
+zone 5.5 hours ahead of UTC (e.g., India). This is the best way to
+specify a time zone correction by fractional parts of an hour. The
+maximum zone correction is 24 hours.
+
+ Either 'am'/'pm' or a time zone correction may be specified, but not
+both.
+
+
+File: tar.info, Node: Time zone items, Next: Combined date and time of day items, Prev: Time of day items, Up: Date input formats
+
+7.4 Time zone items
+===================
+
+A "time zone item" specifies an international time zone, indicated by a
+small set of letters, e.g., 'UTC' or 'Z' for Coordinated Universal Time.
+Any included periods are ignored. By following a non-daylight-saving
+time zone by the string 'DST' in a separate word (that is, separated by
+some white space), the corresponding daylight saving time zone may be
+specified. Alternatively, a non-daylight-saving time zone can be
+followed by a time zone correction, to add the two values. This is
+normally done only for 'UTC'; for example, 'UTC+05:30' is equivalent to
+'+05:30'.
+
+ Time zone items other than 'UTC' and 'Z' are obsolescent and are not
+recommended, because they are ambiguous; for example, 'EST' has a
+different meaning in Australia than in the United States. Instead, it's
+better to use unambiguous numeric time zone corrections like '-0500', as
+described in the previous section.
+
+ If neither a time zone item nor a time zone correction is supplied,
+time stamps are interpreted using the rules of the default time zone
+(*note Specifying time zone rules::).
+
+
+File: tar.info, Node: Combined date and time of day items, Next: Day of week items, Prev: Time zone items, Up: Date input formats
+
+7.5 Combined date and time of day items
+=======================================
+
+The ISO 8601 date and time of day extended format consists of an ISO
+8601 date, a 'T' character separator, and an ISO 8601 time of day. This
+format is also recognized if the 'T' is replaced by a space.
+
+ In this format, the time of day should use 24-hour notation.
+Fractional seconds are allowed, with either comma or period preceding
+the fraction. ISO 8601 fractional minutes and hours are not supported.
+Typically, hosts support nanosecond timestamp resolution; excess
+precision is silently discarded.
+
+ Here are some examples:
+
+ 2012-09-24T20:02:00.052-0500
+ 2012-12-31T23:59:59,999999999+1100
+ 1970-01-01 00:00Z
+
+
+File: tar.info, Node: Day of week items, Next: Relative items in date strings, Prev: Combined date and time of day items, Up: Date input formats
+
+7.6 Day of week items
+=====================
+
+The explicit mention of a day of the week will forward the date (only if
+necessary) to reach that day of the week in the future.
+
+ Days of the week may be spelled out in full: 'Sunday', 'Monday',
+'Tuesday', 'Wednesday', 'Thursday', 'Friday' or 'Saturday'. Days may be
+abbreviated to their first three letters, optionally followed by a
+period. The special abbreviations 'Tues' for 'Tuesday', 'Wednes' for
+'Wednesday' and 'Thur' or 'Thurs' for 'Thursday' are also allowed.
+
+ A number may precede a day of the week item to move forward
+supplementary weeks. It is best used in expression like 'third monday'.
+In this context, 'last DAY' or 'next DAY' is also acceptable; they move
+one week before or after the day that DAY by itself would represent.
+
+ A comma following a day of the week item is ignored.
+
+
+File: tar.info, Node: Relative items in date strings, Next: Pure numbers in date strings, Prev: Day of week items, Up: Date input formats
+
+7.7 Relative items in date strings
+==================================
+
+"Relative items" adjust a date (or the current date if none) forward or
+backward. The effects of relative items accumulate. Here are some
+examples:
+
+ 1 year
+ 1 year ago
+ 3 years
+ 2 days
+
+ The unit of time displacement may be selected by the string 'year' or
+'month' for moving by whole years or months. These are fuzzy units, as
+years and months are not all of equal duration. More precise units are
+'fortnight' which is worth 14 days, 'week' worth 7 days, 'day' worth 24
+hours, 'hour' worth 60 minutes, 'minute' or 'min' worth 60 seconds, and
+'second' or 'sec' worth one second. An 's' suffix on these units is
+accepted and ignored.
+
+ The unit of time may be preceded by a multiplier, given as an
+optionally signed number. Unsigned numbers are taken as positively
+signed. No number at all implies 1 for a multiplier. Following a
+relative item by the string 'ago' is equivalent to preceding the unit by
+a multiplier with value -1.
+
+ The string 'tomorrow' is worth one day in the future (equivalent to
+'day'), the string 'yesterday' is worth one day in the past (equivalent
+to 'day ago').
+
+ The strings 'now' or 'today' are relative items corresponding to
+zero-valued time displacement, these strings come from the fact a
+zero-valued time displacement represents the current time when not
+otherwise changed by previous items. They may be used to stress other
+items, like in '12:00 today'. The string 'this' also has the meaning of
+a zero-valued time displacement, but is preferred in date strings like
+'this thursday'.
+
+ When a relative item causes the resulting date to cross a boundary
+where the clocks were adjusted, typically for daylight saving time, the
+resulting date and time are adjusted accordingly.
+
+ The fuzz in units can cause problems with relative items. For
+example, '2003-07-31 -1 month' might evaluate to 2003-07-01, because
+2003-06-31 is an invalid date. To determine the previous month more
+reliably, you can ask for the month before the 15th of the current
+month. For example:
+
+ $ date -R
+ Thu, 31 Jul 2003 13:02:39 -0700
+ $ date --date='-1 month' +'Last month was %B?'
+ Last month was July?
+ $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!'
+ Last month was June!
+
+ Also, take care when manipulating dates around clock changes such as
+daylight saving leaps. In a few cases these have added or subtracted as
+much as 24 hours from the clock, so it is often wise to adopt universal
+time by setting the 'TZ' environment variable to 'UTC0' before embarking
+on calendrical calculations.
+
+
+File: tar.info, Node: Pure numbers in date strings, Next: Seconds since the Epoch, Prev: Relative items in date strings, Up: Date input formats
+
+7.8 Pure numbers in date strings
+================================
+
+The precise interpretation of a pure decimal number depends on the
+context in the date string.
+
+ If the decimal number is of the form YYYYMMDD and no other calendar
+date item (*note Calendar date items::) appears before it in the date
+string, then YYYY is read as the year, MM as the month number and DD as
+the day of the month, for the specified calendar date.
+
+ If the decimal number is of the form HHMM and no other time of day
+item appears before it in the date string, then HH is read as the hour
+of the day and MM as the minute of the hour, for the specified time of
+day. MM can also be omitted.
+
+ If both a calendar date and a time of day appear to the left of a
+number in the date string, but no relative item, then the number
+overrides the year.
+
+
+File: tar.info, Node: Seconds since the Epoch, Next: Specifying time zone rules, Prev: Pure numbers in date strings, Up: Date input formats
+
+7.9 Seconds since the Epoch
+===========================
+
+If you precede a number with '@', it represents an internal time stamp
+as a count of seconds. The number can contain an internal decimal point
+(either '.' or ','); any excess precision not supported by the internal
+representation is truncated toward minus infinity. Such a number cannot
+be combined with any other date item, as it specifies a complete time
+stamp.
+
+ Internally, computer times are represented as a count of seconds
+since an epoch--a well-defined point of time. On GNU and POSIX systems,
+the epoch is 1970-01-01 00:00:00 UTC, so '@0' represents this time, '@1'
+represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other
+POSIX-compliant systems support such times as an extension to POSIX,
+using negative counts, so that '@-1' represents 1969-12-31 23:59:59 UTC.
+
+ Traditional Unix systems count seconds with 32-bit two's-complement
+integers and can represent times from 1901-12-13 20:45:52 through
+2038-01-19 03:14:07 UTC. More modern systems use 64-bit counts of
+seconds with nanosecond subcounts, and can represent all the times in
+the known lifetime of the universe to a resolution of 1 nanosecond.
+
+ On most hosts, these counts ignore the presence of leap seconds. For
+example, on most hosts '@915148799' represents 1998-12-31 23:59:59 UTC,
+'@915148800' represents 1999-01-01 00:00:00 UTC, and there is no way to
+represent the intervening leap second 1998-12-31 23:59:60 UTC.
+
+
+File: tar.info, Node: Specifying time zone rules, Next: Authors of parse_datetime, Prev: Seconds since the Epoch, Up: Date input formats
+
+7.10 Specifying time zone rules
+===============================
+
+Normally, dates are interpreted using the rules of the current time
+zone, which in turn are specified by the 'TZ' environment variable, or
+by a system default if 'TZ' is not set. To specify a different set of
+default time zone rules that apply just to one date, start the date with
+a string of the form 'TZ="RULE"'. The two quote characters ('"') must
+be present in the date, and any quotes or backslashes within RULE must
+be escaped by a backslash.
+
+ For example, with the GNU 'date' command you can answer the question
+"What time is it in New York when a Paris clock shows 6:30am on October
+31, 2004?" by using a date beginning with 'TZ="Europe/Paris"' as shown
+in the following shell transcript:
+
+ $ export TZ="America/New_York"
+ $ date --date='TZ="Europe/Paris" 2004-10-31 06:30'
+ Sun Oct 31 01:30:00 EDT 2004
+
+ In this example, the '--date' operand begins with its own 'TZ'
+setting, so the rest of that operand is processed according to
+'Europe/Paris' rules, treating the string '2004-10-31 06:30' as if it
+were in Paris. However, since the output of the 'date' command is
+processed according to the overall time zone rules, it uses New York
+time. (Paris was normally six hours ahead of New York in 2004, but this
+example refers to a brief Halloween period when the gap was five hours.)
+
+ A 'TZ' value is a rule that typically names a location in the 'tz'
+database (http://www.twinsun.com/tz/tz-link.htm). A recent catalog of
+location names appears in the TWiki Date and Time Gateway
+(http://twiki.org/cgi-bin/xtra/tzdate). A few non-GNU hosts require a
+colon before a location name in a 'TZ' setting, e.g.,
+'TZ=":America/New_York"'.
+
+ The 'tz' database includes a wide variety of locations ranging from
+'Arctic/Longyearbyen' to 'Antarctica/South_Pole', but if you are at sea
+and have your own private time zone, or if you are using a non-GNU host
+that does not support the 'tz' database, you may need to use a POSIX
+rule instead. Simple POSIX rules like 'UTC0' specify a time zone
+without daylight saving time; other rules can specify simple daylight
+saving regimes. *Note Specifying the Time Zone with 'TZ': (libc)TZ
+Variable.
+
+
+File: tar.info, Node: Authors of parse_datetime, Prev: Specifying time zone rules, Up: Date input formats
+
+7.11 Authors of 'parse_datetime'
+================================
+
+'parse_datetime' started life as 'getdate', as originally implemented by
+Steven M. Bellovin (<smb@research.att.com>) while at the University of
+North Carolina at Chapel Hill. The code was later tweaked by a couple
+of people on Usenet, then completely overhauled by Rich $alz
+(<rsalz@bbn.com>) and Jim Berets (<jberets@bbn.com>) in August, 1990.
+Various revisions for the GNU system were made by David MacKenzie, Jim
+Meyering, Paul Eggert and others, including renaming it to 'get_date' to
+avoid a conflict with the alternative Posix function 'getdate', and a
+later rename to 'parse_datetime'. The Posix function 'getdate' can
+parse more locale-specific dates using 'strptime', but relies on an
+environment variable and external file, and lacks the thread-safety of
+'parse_datetime'.
+
+ This chapter was originally produced by Franc,ois Pinard
+(<pinard@iro.umontreal.ca>) from the 'parse_datetime.y' source code, and
+then edited by K. Berry (<kb@cs.umb.edu>).
+
+
+File: tar.info, Node: Formats, Next: Media, Prev: Date input formats, Up: Top
+
+8 Controlling the Archive Format
+********************************
+
+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):
+
+gnu
+ Format used by GNU 'tar' versions up to 1.13.25. This format
+ derived from an early 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 'gnu' format are able to hold file names of unlimited
+ length.
+
+oldgnu
+ Format used by GNU 'tar' of versions prior to 1.12.
+
+v7
+ Archive format, compatible with the V7 implementation of tar. This
+ format imposes a number of limitations. The most important of them
+ are:
+
+ 1. The maximum length of a file name is limited to 99 characters.
+ 2. The maximum length of a symbolic link is limited to 99
+ characters.
+ 3. It is impossible to store special files (block and character
+ devices, fifos etc.)
+ 4. Maximum value of user or group ID is limited to 2097151
+ (7777777 octal)
+ 5. V7 archives do not contain symbolic ownership information
+ (user and group name of the file owner).
+
+ 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 file names
+ more than 99 characters long will not be able to use GNU 'tar' 1.29
+ and Automake prior to 1.9.
+
+ustar
+ Archive format defined by POSIX.1-1988 specification. It stores
+ symbolic ownership information. It is also able to store special
+ files. However, it imposes several restrictions as well:
+
+ 1. The maximum length of a file name is limited to 256
+ characters, provided that the file name can be split at a
+ 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.
+ 2. The maximum length of a symbolic link name is limited to 100
+ characters.
+ 3. Maximum size of a file the archive is able to accommodate is
+ 8GB
+ 4. Maximum value of UID/GID is 2097151.
+ 5. Maximum number of bits in device major and minor numbers is
+ 21.
+
+star
+ Format used by Jo"rg Schilling 'star' implementation. GNU 'tar' is
+ able to read 'star' archives but currently does not produce them.
+
+posix
+ Archive format defined by POSIX.1-2001 specification. This is the
+ most flexible and feature-rich format. It does not impose any
+ restrictions on file sizes or file name 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 'ustar' archives will be able to
+ read most '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 GNU 'tar'.
+
+ The following table summarizes the limitations of each of these
+formats:
+
+Format UID File Size File Name Devn
+--------------------------------------------------------------------
+gnu 1.8e19 Unlimited Unlimited 63
+oldgnu 1.8e19 Unlimited Unlimited 63
+v7 2097151 8GB 99 n/a
+ustar 2097151 8GB 256 21
+posix Unlimited Unlimited Unlimited Unlimited
+
+ The default format for GNU 'tar' is defined at compilation time. You
+may check it by running 'tar --help', and examining the last lines of
+its output. Usually, GNU 'tar' is configured to create archives in
+'gnu' format, however, future version will switch to 'posix'.
+
+* Menu:
+
+* Compression:: Using Less Space through Compression
+* Attributes:: Handling File Attributes
+* Portability:: Making 'tar' Archives More Portable
+* cpio:: Comparison of 'tar' and 'cpio'
+
+
+File: tar.info, Node: Compression, Next: Attributes, Up: Formats
+
+8.1 Using Less Space through Compression
+========================================
+
+* Menu:
+
+* gzip:: Creating and Reading Compressed Archives
+* sparse:: Archiving Sparse Files
+
+
+File: tar.info, Node: gzip, Next: sparse, Up: Compression
+
+8.1.1 Creating and Reading Compressed Archives
+----------------------------------------------
+
+GNU 'tar' is able to create and read compressed archives. It supports a
+wide variety of compression programs, namely: 'gzip', 'bzip2', 'lzip',
+'lzma', 'lzop', 'xz' and traditional 'compress'. The latter is
+supported mostly for backward compatibility, and we recommend against
+using it, because it is by far less effective than the other compression
+programs(1).
+
+ Creating a compressed archive is simple: you just specify a
+"compression option" along with the usual archive creation commands.
+The compression option is '-z' ('--gzip') to create a 'gzip' compressed
+archive, '-j' ('--bzip2') to create a 'bzip2' compressed archive,
+'--lzip' to create an lzip compressed archive, '-J' ('--xz') to create
+an XZ archive, '--lzma' to create an LZMA compressed archive, '--lzop'
+to create an LSOP archive, and '-Z' ('--compress') to use 'compress'
+program. For example:
+
+ $ tar czf archive.tar.gz .
+
+ You can also let GNU 'tar' select the compression program based on
+the suffix of the archive file name. This is done using
+'--auto-compress' ('-a') command line option. For example, the
+following invocation will use 'bzip2' for compression:
+
+ $ tar caf archive.tar.bz2 .
+
+whereas the following one will use 'lzma':
+
+ $ tar caf archive.tar.lzma .
+
+ For a complete list of file name suffixes recognized by GNU 'tar',
+see *note auto-compress::.
+
+ Reading compressed archive is even simpler: you don't need to specify
+any additional options as GNU 'tar' recognizes its format automatically.
+Thus, the following commands will list and extract the archive created
+in previous example:
+
+ # List the compressed archive
+ $ tar tf archive.tar.gz
+ # Extract the compressed archive
+ $ tar xf archive.tar.gz
+
+ The format recognition algorithm is based on "signatures", a special
+byte sequences in the beginning of file, that are specific for certain
+compression formats. If this approach fails, 'tar' falls back to using
+archive name suffix to determine its format (*note auto-compress::, for
+a list of recognized suffixes).
+
+ Some compression programs are able to handle different compression
+formats. GNU 'tar' uses this, if the principal decompressor for the
+given format is not available. For example, if 'compress' is not
+installed, 'tar' will try to use 'gzip'. As of version 1.29 the
+following alternatives are tried(2):
+
+Format Main decompressor Alternatives
+---------------------------------------------------------------------
+compress compress gzip
+lzma lzma xz
+bzip2 bzip2 lbzip2
+
+ The only case when you have to specify a decompression option while
+reading the archive is when reading from a pipe or from a tape drive
+that does not support random access. However, in this case GNU 'tar'
+will indicate which option you should use. For example:
+
+ $ cat archive.tar.gz | tar tf -
+ tar: Archive is compressed. Use -z option
+ tar: Error is not recoverable: exiting now
+
+ If you see such diagnostics, just add the suggested option to the
+invocation of GNU 'tar':
+
+ $ cat archive.tar.gz | tar tzf -
+
+ Notice also, that there are several restrictions on operations on
+compressed archives. First of all, compressed archives cannot be
+modified, i.e., you cannot update ('--update', alias '-u') them or
+delete ('--delete') members from them or add ('--append', alias '-r')
+members to them. Likewise, you cannot append another 'tar' archive to a
+compressed archive using '--concatenate' ('-A'). Secondly, multi-volume
+archives cannot be compressed.
+
+ The following options allow to select a particular compressor
+program:
+
+'-z'
+'--gzip'
+'--ungzip'
+ Filter the archive through 'gzip'.
+
+'-J'
+'--xz'
+ Filter the archive through 'xz'.
+
+'-j'
+'--bzip2'
+ Filter the archive through 'bzip2'.
+
+'--lzip'
+ Filter the archive through 'lzip'.
+
+'--lzma'
+ Filter the archive through 'lzma'.
+
+'--lzop'
+ Filter the archive through 'lzop'.
+
+'-Z'
+'--compress'
+'--uncompress'
+ Filter the archive through 'compress'.
+
+ When any of these options is given, GNU 'tar' searches the compressor
+binary in the current path and invokes it. The name of the compressor
+program is specified at compilation time using a corresponding
+'--with-COMPNAME' option to 'configure', e.g. '--with-bzip2' to select
+a specific 'bzip2' binary. *Note lbzip2::, for a detailed discussion.
+
+ The output produced by 'tar --help' shows the actual compressor names
+along with each of these options.
+
+ You can use any of these options on physical devices (tape drives,
+etc.) and remote files as well as on normal files; data to or from such
+devices or remote files is reblocked by another copy of the 'tar'
+program to enforce the specified (or default) record size. The default
+compression parameters are used. You can override them by using the
+'-I' option (see below), e.g.:
+
+ $ tar -cf archive.tar.gz -I 'gzip -9 -n' subdir
+
+A more traditional way to do this is to use a pipe:
+
+ $ tar cf - subdir | gzip -9 -n > archive.tar.gz
+
+ Compressed archives are easily corrupted, because compressed files
+have little redundancy. The adaptive nature of the compression scheme
+means that the compression tables are implicitly spread all over the
+archive. If you lose a few blocks, the dynamic construction of the
+compression tables becomes unsynchronized, and there is little chance
+that you could recover later in the archive.
+
+ Other compression options provide better control over creating
+compressed archives. These are:
+
+'--auto-compress'
+'-a'
+ Select a compression program to use by the archive file name
+ suffix. The following suffixes are recognized:
+
+ Suffix Compression program
+ -------------------------------------------------------------------
+ '.gz' 'gzip'
+ '.tgz' 'gzip'
+ '.taz' 'gzip'
+ '.Z' 'compress'
+ '.taZ' 'compress'
+ '.bz2' 'bzip2'
+ '.tz2' 'bzip2'
+ '.tbz2' 'bzip2'
+ '.tbz' 'bzip2'
+ '.lz' 'lzip'
+ '.lzma' 'lzma'
+ '.tlz' 'lzma'
+ '.lzo' 'lzop'
+ '.xz' 'xz'
+
+'--use-compress-program=COMMAND'
+'-I=COMMAND'
+ Use external compression program COMMAND. Use this option if you
+ want to specify options for the compression program, or if you are
+ not happy with the compression program associated with the suffix
+ at compile time, or if you have a compression program that GNU
+ 'tar' does not support. The COMMAND argument is a valid command
+ invocation, as you would type it at the command line prompt, with
+ any additional options as needed. Enclose it in quotes if it
+ contains white space (*note Running External Commands: external.).
+
+ The COMMAND should follow two conventions:
+
+ First, when invoked without additional options, it should read data
+ from standard input, compress it and output it on standard output.
+
+ Secondly, if invoked with the additional '-d' option, it should do
+ exactly the opposite, i.e., read the compressed data from the
+ standard input and produce uncompressed data on the standard
+ output.
+
+ The latter requirement means that you must not use the '-d' option
+ as a part of the COMMAND itself.
+
+ The '--use-compress-program' option, in particular, lets you
+implement your own filters, not necessarily dealing with
+compression/decompression. For example, suppose you wish to implement
+PGP encryption on top of compression, using 'gpg' (*note gpg:
+(gpg)Top.). The following script does that:
+
+ #! /bin/sh
+ case $1 in
+ -d) gpg --decrypt - | gzip -d -c;;
+ '') gzip -c | gpg -s;;
+ *) echo "Unknown option $1">&2; exit 1;;
+ esac
+
+ Suppose you name it 'gpgz' and save it somewhere in your 'PATH'.
+Then the following command will create a compressed archive signed with
+your private key:
+
+ $ tar -cf foo.tar.gpgz -Igpgz .
+
+Likewise, the command below will list its contents:
+
+ $ tar -tf foo.tar.gpgz -Igpgz .
+
+* Menu:
+
+* lbzip2:: Using lbzip2 with GNU 'tar'.
+
+ ---------- Footnotes ----------
+
+ (1) It also had patent problems in the past.
+
+ (2) To verbosely trace the decompressor selection, use the
+'--warning=decompress-program' option (*note decompress-program:
+warnings.).
+
+
+File: tar.info, Node: lbzip2, Up: gzip
+
+8.1.1.1 Using lbzip2 with GNU 'tar'.
+....................................
+
+'Lbzip2' is a multithreaded utility for handling 'bzip2' compression,
+written by Laszlo Ersek. It makes use of multiple processors to speed
+up its operation and in general works considerably faster than 'bzip2'.
+For a detailed description of 'lbzip2' see
+<http://freshmeat.net/projects/lbzip2> and lbzip2: parallel bzip2
+utility
+(http://www.linuxinsight.com/lbzip2-parallel-bzip2-utility.html).
+
+ Recent versions of 'lbzip2' are mostly command line compatible with
+'bzip2', which makes it possible to automatically invoke it via the
+'--bzip2' GNU 'tar' command line option. To do so, GNU 'tar' must be
+configured with the '--with-bzip2' command line option, like this:
+
+ $ ./configure --with-bzip2=lbzip2 [OTHER-OPTIONS]
+
+ Once configured and compiled this way, 'tar --help' will show the
+following:
+
+ $ tar --help | grep -- --bzip2
+ -j, --bzip2 filter the archive through lbzip2
+
+which means that running 'tar --bzip2' will invoke 'lbzip2'.
+
+
+File: tar.info, Node: sparse, Prev: gzip, Up: Compression
+
+8.1.2 Archiving Sparse Files
+----------------------------
+
+Files in the file system occasionally have "holes". A "hole" in a file
+is a section of the file's contents which was never written. The
+contents of a hole reads as all zeros. On many operating systems,
+actual disk storage is not allocated for holes, but they are counted in
+the length of the file. If you archive such a file, 'tar' could create
+an archive longer than the original. To have 'tar' attempt to recognize
+the holes in a file, use '--sparse' ('-S'). When you use this option,
+then, for any file using less disk space than would be expected from its
+length, 'tar' searches the file for holes. It then records in the
+archive for the file where the holes (consecutive stretches of zeros)
+are, and only archives the "real contents" of the file. On extraction
+(using '--sparse' is not needed on extraction) any such files have also
+holes created wherever the holes were found. Thus, if you use
+'--sparse', 'tar' archives won't take more space than the original.
+
+ GNU 'tar' uses two methods for detecting holes in sparse files.
+These methods are described later in this subsection.
+
+'-S'
+'--sparse'
+ This option instructs 'tar' to test each file for sparseness before
+ attempting to archive it. If the file is found to be sparse it is
+ treated specially, thus allowing to decrease the amount of space
+ used by its image in the archive.
+
+ This option is meaningful only when creating or updating archives.
+ It has no effect on extraction.
+
+ Consider using '--sparse' when performing file system backups, to
+avoid archiving the expanded forms of files stored sparsely in the
+system.
+
+ Even if your system has no sparse files currently, some may be
+created in the future. If you use '--sparse' while making file system
+backups as a matter of course, you can be assured the archive will never
+take more space on the media than the files take on disk (otherwise,
+archiving a disk filled with sparse files might take hundreds of tapes).
+*Note Incremental Dumps::.
+
+ However, be aware that '--sparse' option may present a serious
+drawback. Namely, in order to determine the positions of holes in a
+file 'tar' may have to read it before trying to archive it, so in total
+the file may be read *twice*. This may happen when your OS or your FS
+does not support "SEEK_HOLE/SEEK_DATA" feature in "lseek" (See
+'--hole-detection', below).
+
+ When using 'POSIX' archive format, GNU 'tar' is able to store sparse
+files using in three distinct ways, called "sparse formats". A sparse
+format is identified by its "number", consisting, as usual of two
+decimal numbers, delimited by a dot. By default, format '1.0' is used.
+If, for some reason, you wish to use an earlier format, you can select
+it using '--sparse-version' option.
+
+'--sparse-version=VERSION'
+ Select the format to store sparse files in. Valid VERSION values
+ are: '0.0', '0.1' and '1.0'. *Note Sparse Formats::, for a
+ detailed description of each format.
+
+ Using '--sparse-format' option implies '--sparse'.
+
+'--hole-detection=METHOD'
+ Enforce concrete hole detection method. Before the real contents
+ of sparse file are stored, 'tar' needs to gather knowledge about
+ file sparseness. This is because it needs to have the file's map
+ of holes stored into tar header before it starts archiving the file
+ contents. Currently, two methods of hole detection are
+ implemented:
+
+ * '--hole-detection=seek' Seeking the file for data and holes.
+ It uses enhancement of the 'lseek' system call ('SEEK_HOLE'
+ and 'SEEK_DATA') which is able to reuse file system knowledge
+ about sparse file contents - so the detection is usually very
+ fast. To use this feature, your file system and operating
+ system must support it. At the time of this writing (2015)
+ this feature, in spite of not being accepted by POSIX, is
+ fairly widely supported by different operating systems.
+
+ * '--hole-detection=raw' Reading byte-by-byte the whole sparse
+ file before the archiving. This method detects holes like
+ consecutive stretches of zeroes. Comparing to the previous
+ method, it is usually much slower, although more portable.
+
+ When no '--hole-detection' option is given, 'tar' uses the 'seek', if
+supported by the operating system.
+
+ Using '--hole-detection' option implies '--sparse'.
+
+
+File: tar.info, Node: Attributes, Next: Portability, Prev: Compression, Up: Formats
+
+8.2 Handling File Attributes
+============================
+
+When 'tar' reads files, it updates their access times. To avoid this,
+use the '--atime-preserve[=METHOD]' option, which can either reset the
+access time retroactively or avoid changing it in the first place.
+
+'--atime-preserve'
+'--atime-preserve=replace'
+'--atime-preserve=system'
+ Preserve the access times of files that are read. This works only
+ for files that you own, unless you have superuser privileges.
+
+ '--atime-preserve=replace' works on most systems, but it also
+ restores the data modification time and updates the status change
+ time. Hence it doesn't interact with incremental dumps nicely
+ (*note Incremental Dumps::), and it can set access or data
+ modification times incorrectly if other programs access the file
+ while 'tar' is running.
+
+ '--atime-preserve=system' avoids changing the access time in the
+ first place, if the operating system supports this. Unfortunately,
+ this may or may not work on any given operating system or file
+ system. If 'tar' knows for sure it won't work, it complains right
+ away.
+
+ Currently '--atime-preserve' with no operand defaults to
+ '--atime-preserve=replace', but this is intended to change to
+ '--atime-preserve=system' when the latter is better-supported.
+
+'-m'
+'--touch'
+ Do not extract data modification time.
+
+ When this option is used, 'tar' leaves the data modification times
+ of the files it extracts as the times when the files were
+ extracted, instead of setting it to the times recorded in the
+ archive.
+
+ This option is meaningless with '--list' ('-t').
+
+'--same-owner'
+ Create extracted files with the same ownership they have in the
+ archive.
+
+ This is the default behavior for the superuser, so this option is
+ meaningful only for non-root users, when 'tar' is executed on those
+ systems able to give files away. This is considered as a security
+ flaw by many people, at least because it makes quite difficult to
+ correctly account users for the disk space they occupy. Also, the
+ 'suid' or 'sgid' attributes of files are easily and silently lost
+ when files are given away.
+
+ When writing an archive, 'tar' writes the user ID and user name
+ separately. If it can't find a user name (because the user ID is
+ not in '/etc/passwd'), then it does not write one. When restoring,
+ it tries to look the name (if one was written) up in '/etc/passwd'.
+ If it fails, then it uses the user ID stored in the archive
+ instead.
+
+'--no-same-owner'
+'-o'
+ Do not attempt to restore ownership when extracting. This is the
+ default behavior for ordinary users, so this option has an effect
+ only for the superuser.
+
+'--numeric-owner'
+ The '--numeric-owner' option allows (ANSI) archives to be written
+ without user/group name information or such information to be
+ ignored when extracting. It effectively disables the generation
+ and/or use of user/group name information. This option forces
+ extraction using the numeric ids from the archive, ignoring the
+ names.
+
+ This is useful in certain circumstances, when restoring a backup
+ from an emergency floppy with different passwd/group files for
+ example. It is otherwise impossible to extract files with the
+ right ownerships if the password file in use during the extraction
+ does not match the one belonging to the file system(s) being
+ extracted. This occurs, for example, if you are restoring your
+ files after a major crash and had booted from an emergency floppy
+ with no password file or put your disk into another machine to do
+ the restore.
+
+ The numeric ids are _always_ saved into 'tar' archives. The
+ identifying names are added at create time when provided by the
+ system, unless '--format=oldgnu' is used. Numeric ids could be
+ used when moving archives between a collection of machines using a
+ centralized management for attribution of numeric ids to users and
+ groups. This is often made through using the NIS capabilities.
+
+ When making a 'tar' file for distribution to other sites, it is
+ sometimes cleaner to use a single owner for all files in the
+ distribution, and nicer to specify the write permission bits of the
+ files as stored in the archive independently of their actual value
+ on the file system. The way to prepare a clean distribution is
+ usually to have some Makefile rule creating a directory, copying
+ all needed files in that directory, then setting ownership and
+ permissions as wanted (there are a lot of possible schemes), and
+ only then making a 'tar' archive out of this directory, before
+ cleaning everything out. Of course, we could add a lot of options
+ to GNU 'tar' for fine tuning permissions and ownership. This is
+ not the good way, I think. GNU 'tar' is already crowded with
+ options and moreover, the approach just explained gives you a great
+ deal of control already.
+
+'-p'
+'--same-permissions'
+'--preserve-permissions'
+ Extract all protection information.
+
+ This option causes 'tar' to set the modes (access permissions) of
+ extracted files exactly as recorded in the archive. If this option
+ is not used, the current 'umask' setting limits the permissions on
+ extracted files. This option is by default enabled when 'tar' is
+ executed by a superuser.
+
+ This option is meaningless with '--list' ('-t').
+
+
+File: tar.info, Node: Portability, Next: cpio, Prev: Attributes, Up: Formats
+
+8.3 Making 'tar' Archives More Portable
+=======================================
+
+Creating a 'tar' archive on a particular system that is meant to be
+useful later on many other machines and with other versions of 'tar' is
+more challenging than you might think. '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 'tar'
+archives more portable.
+
+ One golden rule is simplicity. For example, limit your '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.
+
+* Menu:
+
+* Portable Names:: Portable Names
+* dereference:: Symbolic Links
+* hard links:: Hard Links
+* old:: Old V7 Archives
+* ustar:: Ustar Archives
+* gnu:: GNU and old GNU format archives.
+* posix:: 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 'tar' Implementations
+
+
+File: tar.info, Node: Portable Names, Next: dereference, Up: Portability
+
+8.3.1 Portable Names
+--------------------
+
+Use portable file and member names. A name is portable if it contains
+only ASCII letters and digits, '/', '.', '_', and '-'; it cannot be
+empty, start with '-' or '//', or contain '/-'. 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 'tar' archives to be read under MSDOS, you
+should not rely on case distinction for file names, and you might use
+the GNU 'doschk' program for helping you further diagnosing illegal
+MSDOS names, which are even more limited than System V's.
+
+
+File: tar.info, Node: dereference, Next: hard links, Prev: Portable Names, Up: Portability
+
+8.3.2 Symbolic Links
+--------------------
+
+Normally, when 'tar' archives a symbolic link, it writes a block to the
+archive naming the target of the link. In that way, the 'tar' archive
+is a faithful record of the file system contents. When '--dereference'
+('-h') is used with '--create' ('-c'), 'tar' archives the files symbolic
+links point to, instead of the links themselves.
+
+ When creating portable archives, use '--dereference' ('-h'): some
+systems do not support symbolic links, and moreover, your distribution
+might be unusable if it contains unresolved symbolic links.
+
+ When reading from an archive, the '--dereference' ('-h') option
+causes 'tar' to follow an already-existing symbolic link when 'tar'
+writes or reads a file named in the archive. Ordinarily, 'tar' does not
+follow such a link, though it may remove the link before writing a new
+file. *Note Dealing with Old Files::.
+
+ The '--dereference' option is unsafe if an untrusted user can modify
+directories while 'tar' is running. *Note Security::.
+
+
+File: tar.info, Node: hard links, Next: old, Prev: dereference, Up: Portability
+
+8.3.3 Hard Links
+----------------
+
+Normally, when 'tar' archives a hard link, it writes a block to the
+archive naming the target of the link (a '1' type block). In that way,
+the actual file contents is stored in file only once. For example,
+consider the following two files:
+
+ $ ls -l
+ -rw-r--r-- 2 gray staff 4 2007-10-30 15:11 one
+ -rw-r--r-- 2 gray staff 4 2007-10-30 15:11 jeden
+
+ Here, 'jeden' is a link to 'one'. When archiving this directory with
+a verbose level 2, you will get an output similar to the following:
+
+ $ tar cvvf ../archive.tar .
+ drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./
+ -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden
+ hrw-r--r-- gray/staff 0 2007-10-30 15:11 ./one link to ./jeden
+
+ The last line shows that, instead of storing two copies of the file,
+'tar' stored it only once, under the name 'jeden', and stored file 'one'
+as a hard link to this file.
+
+ It may be important to know that all hard links to the given file are
+stored in the archive. For example, this may be necessary for exact
+reproduction of the file system. The following option does that:
+
+'--check-links'
+'-l'
+ 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,
+ print a warning message.
+
+ For example, trying to archive only file 'jeden' with this option
+produces the following diagnostics:
+
+ $ tar -c -f ../archive.tar -l jeden
+ tar: Missing links to 'jeden'.
+
+ Although creating special records for hard links helps keep a
+faithful record of the file system contents and makes archives more
+compact, it may present some difficulties when extracting individual
+members from the archive. For example, trying to extract file 'one'
+from the archive created in previous examples produces, in the absence
+of file 'jeden':
+
+ $ tar xf archive.tar ./one
+ tar: ./one: Cannot hard link to './jeden': No such file or directory
+ tar: Error exit delayed from previous errors
+
+ The reason for this behavior is that 'tar' cannot seek back in the
+archive to the previous member (in this case, 'one'), to extract it(1).
+If you wish to avoid such problems at the cost of a bigger archive, use
+the following option:
+
+'--hard-dereference'
+ Dereference hard links and store the files they refer to.
+
+ For example, trying this option on our two sample files, we get two
+copies in the archive, each of which can then be extracted independently
+of the other:
+
+ $ tar -c -vv -f ../archive.tar --hard-dereference .
+ drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./
+ -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden
+ -rw-r--r-- gray/staff 4 2007-10-30 15:11 ./one
+
+ ---------- Footnotes ----------
+
+ (1) There are plans to fix this in future releases.
+
+
+File: tar.info, Node: old, Next: ustar, Prev: hard links, Up: Portability
+
+8.3.4 Old V7 Archives
+---------------------
+
+Certain old versions of 'tar' cannot handle additional information
+recorded by newer 'tar' programs. To create an archive in V7 format
+(not ANSI), which can be read by these old versions, specify the
+'--format=v7' option in conjunction with the '--create' ('-c') ('tar'
+also accepts '--portability' or '--old-archive' for this option). When
+you specify it, '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 '--format=v7' unless the archive
+was created using this option.
+
+ In most cases, a _new_ format archive can be read by an _old_ 'tar'
+program without serious trouble, so this option should seldom be needed.
+On the other hand, most modern 'tar's are able to read old format
+archives, so it might be safer for you to always use '--format=v7' for
+your distributions. Notice, however, that 'ustar' format is a better
+alternative, as it is free from many of 'v7''s drawbacks.
+
+
+File: tar.info, Node: ustar, Next: gnu, Prev: old, Up: Portability
+
+8.3.5 Ustar Archive Format
+--------------------------
+
+The archive format defined by the POSIX.1-1988 specification is called
+'ustar'. Although it is more flexible than the V7 format, it still has
+many restrictions (*note ustar: Formats, for the detailed description of
+'ustar' format). Along with V7 format, 'ustar' format is a good choice
+for archives intended to be read with other implementations of 'tar'.
+
+ To create an archive in 'ustar' format, use the '--format=ustar'
+option in conjunction with '--create' ('-c').
+
+
+File: tar.info, Node: gnu, Next: posix, Prev: ustar, Up: Portability
+
+8.3.6 GNU and old GNU 'tar' format
+----------------------------------
+
+GNU 'tar' was based on an early draft of the POSIX 1003.1 'ustar'
+standard. GNU extensions to 'tar', such as the support for file names
+longer than 100 characters, use portions of the 'tar' header record
+which were specified in that POSIX draft as unused. Subsequent changes
+in POSIX have allocated the same parts of the header record for other
+purposes. As a result, GNU 'tar' format is incompatible with the
+current POSIX specification, and with 'tar' programs that follow it.
+
+ In the majority of cases, 'tar' will be configured to create this
+format by default. This will change in future releases, since we plan
+to make 'POSIX' format the default.
+
+ To force creation a GNU 'tar' archive, use option '--format=gnu'.
+
+
+File: tar.info, Node: posix, Next: Checksumming, Prev: gnu, Up: Portability
+
+8.3.7 GNU 'tar' and POSIX 'tar'
+-------------------------------
+
+Starting from version 1.14 GNU 'tar' features full support for
+POSIX.1-2001 archives.
+
+ A POSIX conformant archive will be created if 'tar' was given
+'--format=posix' ('--format=pax') option. No special option is required
+to read and extract from a POSIX archive.
+
+* Menu:
+
+* PAX keywords:: Controlling Extended Header Keywords.
+
+
+File: tar.info, Node: PAX keywords, Up: posix
+
+8.3.7.1 Controlling Extended Header Keywords
+............................................
+
+'--pax-option=KEYWORD-LIST'
+ Handle keywords in PAX extended headers. This option is equivalent
+ to '-o' option of the 'pax' utility.
+
+ KEYWORD-LIST is a comma-separated list of keyword options, each
+keyword option taking one of the following forms:
+
+'delete=PATTERN'
+ When used with one of archive-creation commands, this option
+ instructs 'tar' to omit from extended header records that it
+ produces any keywords matching the string PATTERN.
+
+ When used in extract or list mode, this option instructs tar to
+ ignore any keywords matching the given PATTERN in the extended
+ header records. In both cases, matching is performed using the
+ pattern matching notation described in POSIX 1003.2, 3.13 (*note
+ wildcards::). For example:
+
+ --pax-option delete=security.*
+
+ would suppress security-related information.
+
+'exthdr.name=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 STRING after making the following substitutions:
+
+ Meta-character Replaced By
+ ------------------------------------------------------------
+ %d The directory name of the file,
+ equivalent to the result of the
+ 'dirname' utility on the translated
+ file name.
+ %f The name of the file with the
+ directory information stripped,
+ equivalent to the result of the
+ 'basename' utility on the translated
+ file name.
+ %p The process ID of the 'tar' process.
+ %% A '%' character.
+
+ Any other '%' characters in STRING produce undefined results.
+
+ If no option 'exthdr.name=string' is specified, 'tar' will use the
+ following default value:
+
+ %d/PaxHeaders.%p/%f
+
+'exthdr.mtime=VALUE'
+
+ This keyword defines the value of the 'mtime' field that is written
+ into the ustar header blocks for the extended headers. By default,
+ the 'mtime' field is set to the modification time of the archive
+ member described by that extended header (or to the value of the
+ '--mtime' option, if supplied).
+
+'globexthdr.name=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 STRING, after making the
+ following substitutions:
+
+ Meta-character Replaced By
+ ------------------------------------------------------------
+ %n An integer that represents the
+ sequence number of the global extended
+ header record in the archive, starting
+ at 1.
+ %p The process ID of the 'tar' process.
+ %% A '%' character.
+
+ Any other '%' characters in STRING produce undefined results.
+
+ If no option 'globexthdr.name=string' is specified, 'tar' will use
+ the following default value:
+
+ $TMPDIR/GlobalHead.%p.%n
+
+ where '$TMPDIR' represents the value of the TMPDIR environment
+ variable. If TMPDIR is not set, 'tar' uses '/tmp'.
+
+'globexthdr.mtime=VALUE'
+
+ This keyword defines the value of the 'mtime' field that is written
+ into the ustar header blocks for the global extended headers. By
+ default, the 'mtime' field is set to the time when 'tar' was
+ invoked.
+
+'KEYWORD=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, 'tar' will behave as if it has
+ encountered these keyword/value pairs at the beginning of the
+ archive in a global extended header record.
+
+'KEYWORD:=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 KEYWORD=VALUE form except that it creates no global extended
+ header records.
+
+ When used with one of archive-reading commands, '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:
+
+ tar --format=posix --create \
+ --file archive --pax-option gname:=user .
+
+ the group name will be forced to a new value for all files stored
+ in the archive.
+
+ In any of the forms described above, the VALUE may be a string
+enclosed in curly braces. In that case, the string between the braces
+is understood either as a textual time representation, as described in
+*note Date input formats::, or a name of the existing file, starting
+with '/' or '.'. In the latter case, the modification time of that file
+is used.
+
+ For example, to set all modification times to the current date, you
+use the following option:
+
+ --pax-option='mtime:={now}'
+
+ Note quoting of the option's argument.
+
+ As another example, here is the option that ensures that any two
+archives created using it, will be binary equivalent if they have the
+same contents:
+
+ --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0
+
+If you extract files from such an archive and recreate the archive from
+them, you will also need to eliminate changes due to ctime, as shown in
+examples below:
+
+ --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,ctime:=0
+
+or
+
+ --pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,delete=ctime
+
+
+File: tar.info, Node: Checksumming, Next: Large or Negative Values, Prev: posix, Up: Portability
+
+8.3.8 Checksumming Problems
+---------------------------
+
+SunOS and HP-UX 'tar' fail to accept archives created using GNU 'tar'
+and containing non-ASCII file names, that is, file names having
+characters with the eighth bit set, because they use signed checksums,
+while GNU 'tar' uses unsigned checksums while creating archives, as per
+POSIX standards. On reading, GNU 'tar' computes both checksums and
+accepts either of them. 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.
+
+ GNU 'tar' computes checksums both ways, and accepts either of them on
+read, so GNU tar can read Sun tapes even with their wrong checksums.
+GNU 'tar' produces the standard checksum, however, raising
+incompatibilities with Sun. That is to say, GNU 'tar' has not been
+modified to _produce_ incorrect archives to be read by buggy 'tar''s.
+I've been told that more recent Sun 'tar' now read standard archives, so
+maybe Sun did a similar patch, after all?
+
+ The story seems to be that when Sun first imported '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
+'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 their 'tar' archives to be
+compatible with Sun's. The current standards do not favor Sun 'tar'
+format. In any case, it now falls on the shoulders of SunOS and HP-UX
+users to get a 'tar' able to read the good archives they receive.
+
+
+File: tar.info, Node: Large or Negative Values, Next: Other Tars, Prev: Checksumming, Up: Portability
+
+8.3.9 Large or Negative Values
+------------------------------
+
+ _(This message will disappear, once this node revised.)_
+
+ The above sections suggest to use '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, GNU 'tar' 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 (*note Formats::) will help you to do so.
+
+ 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 UTC, you will have to chose between GNU and POSIX archive
+formats. When considering which format to choose, bear in mind that the
+GNU format uses two's-complement base-256 notation to store values that
+do not fit into standard ustar range. Such archives can generally be
+read only by a GNU 'tar' implementation. Moreover, they sometimes
+cannot be correctly restored on another hosts even by GNU 'tar'. For
+example, using two's complement representation for negative time stamps
+that assumes a signed 32-bit 'time_t' generates archives that are not
+portable to hosts with differing 'time_t' representations.
+
+ On the other hand, POSIX archives, generally speaking, can be
+extracted by any tar implementation that understands older ustar format.
+The only exception are files larger than 8GB.
+
+
+File: tar.info, Node: Other Tars, Prev: Large or Negative Values, Up: Portability
+
+8.3.10 How to Extract GNU-Specific Data Using Other 'tar' Implementations
+-------------------------------------------------------------------------
+
+In previous sections you became acquainted with various quirks necessary
+to make your archives portable. Sometimes you may need to extract
+archives containing GNU-specific members using some third-party 'tar'
+implementation or an older version of GNU 'tar'. Of course your best
+bet is to have GNU 'tar' installed, but if it is for some reason
+impossible, this section will explain how to cope without it.
+
+ When we speak about "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.
+
+* Menu:
+
+* Split Recovery:: Members Split Between Volumes
+* Sparse Recovery:: Sparse Members
+
+
+File: tar.info, Node: Split Recovery, Next: Sparse Recovery, Up: Other Tars
+
+8.3.10.1 Extracting Members Split Between Volumes
+.................................................
+
+If a member is split between several volumes of an old GNU format
+archive most third party 'tar' implementation will fail to extract it.
+To extract it, use 'tarcat' program (*note Tarcat::). This program is
+available from GNU 'tar' home page
+(http://www.gnu.org/software/tar/utils/tarcat.html). It concatenates
+several archive volumes into a single valid archive. For example, if
+you have three volumes named from 'vol-1.tar' to 'vol-3.tar', you can do
+the following to extract them using a third-party 'tar':
+
+ $ tarcat vol-1.tar vol-2.tar vol-3.tar | tar xf -
+
+ You could use this approach for most (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 to a different file by
+'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:
+
+ %d/GNUFileParts.%p/%f.%n
+
+where symbols preceded by '%' are "macro characters" that have the
+following meaning:
+
+Meta-character Replaced By
+------------------------------------------------------------
+%d The directory name of the file,
+ equivalent to the result of the
+ 'dirname' utility on its full name.
+%f The file name of the file, equivalent
+ to the result of the 'basename'
+ utility on its full name.
+%p The process ID of the 'tar' process
+ that created the archive.
+%n Ordinal number of this particular
+ part.
+
+ For example, if the file 'var/longfile' was split during archive
+creation between three volumes, and the creator 'tar' process had
+process ID '27962', then the member names will be:
+
+ var/longfile
+ var/GNUFileParts.27962/longfile.1
+ var/GNUFileParts.27962/longfile.2
+
+ When you extract your archive using a third-party '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:
+
+ $ cd var
+ $ cat GNUFileParts.27962/longfile.1 \
+ GNUFileParts.27962/longfile.2 >> longfile
+ $ rm -f GNUFileParts.27962
+
+ Notice, that if the 'tar' implementation you use supports PAX format
+archives, it will probably emit warnings about unknown keywords during
+extraction. They will look like this:
+
+ 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.
+
+You can safely ignore these warnings.
+
+ If your 'tar' implementation is not PAX-aware, you will get more
+warnings and more files generated on your disk, e.g.:
+
+ $ tar xf vol-1.tar
+ var/PaxHeaders.27962/longfile: Unknown file type 'x', extracted as
+ normal file
+ Unexpected EOF in archive
+ $ 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
+
+ Ignore these warnings. The 'PaxHeaders.*' directories created will
+contain files with "extended header keywords" describing the extracted
+files. You can delete them, unless they describe sparse members. Read
+further to learn more about them.
+
+
+File: tar.info, Node: Sparse Recovery, Prev: Split Recovery, Up: Other Tars
+
+8.3.10.2 Extracting Sparse Members
+..................................
+
+Any 'tar' implementation will be able to extract sparse members from a
+PAX archive. However, the extracted files will be "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 blocks (or "holes")
+back to their original locations, we call this process "expanding" a
+compressed sparse file.
+
+ To expand a file, you will need a simple auxiliary program called
+'xsparse'. It is available in source form from GNU 'tar' home page
+(http://www.gnu.org/software/tar/utils/xsparse.html).
+
+ Let's begin with archive members in "sparse format version 1.0"(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 'DIR/NAME', then the condensed file
+will be named 'DIR/GNUSparseFile.N/NAME', where N is a decimal
+number(2).
+
+ To expand a version 1.0 file, run 'xsparse' as follows:
+
+ $ xsparse cond-file
+
+where 'cond-file' is the name of the condensed file. The utility will
+deduce the name for the resulting expanded file using the following
+algorithm:
+
+ 1. If 'cond-file' does not contain any directories, '../cond-file'
+ will be used;
+
+ 2. If 'cond-file' has the form 'DIR/T/NAME', where both T and NAME are
+ simple names, with no '/' characters in them, the output file name
+ will be 'DIR/NAME'.
+
+ 3. Otherwise, if 'cond-file' has the form 'DIR/NAME', the output file
+ name will be 'NAME'.
+
+ In the unlikely case when this algorithm does not suit your needs,
+you can explicitly specify output file name as a second argument to the
+command:
+
+ $ xsparse cond-file out-file
+
+ It is often a good idea to run 'xsparse' in "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 '-n' command line argument:
+
+ $ 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
+
+ To actually expand the file, you would run:
+
+ $ xsparse /home/gray/GNUSparseFile.6058/sparsefile
+
+The program behaves the same way all UNIX utilities do: it will keep
+quiet unless it has something 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, use '-v' option:
+
+ $ 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
+
+ Additionally, if your 'tar' implementation has extracted the
+"extended headers" for this file, you can instruct 'xstar' to use them
+in order to verify the integrity of the expanded file. The option '-x'
+sets the name of the extended header file to use. Continuing our
+example:
+
+ $ 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
+
+ An "extended header" is a special 'tar' archive header that precedes
+an archive member and contains a set of "variables", describing the
+member properties that cannot be stored in the standard 'ustar' header.
+While optional for expanding sparse version 1.0 members, the 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 *note Sparse Formats::.) So, for these formats, the question
+is: how to obtain extended headers from the archive?
+
+ If you use a '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 'DIR/NAME', then the extended header
+file will be named 'DIR/PaxHeaders.N/NAME', where N is an integer
+number.
+
+ Things become more difficult if your 'tar' implementation does
+support PAX headers, because in this case you will have to manually
+extract the headers. We recommend the following algorithm:
+
+ 1. Consult the documentation of your 'tar' implementation for an
+ option that prints "block numbers" along with the archive listing
+ (analogous to GNU 'tar''s '-R' option). For example, 'star' has
+ '-block-number'.
+
+ 2. Obtain verbose listing using the 'block number' option, and find
+ block numbers of the sparse member in question and the member
+ immediately following it. For example, running 'star' on our
+ archive we obtain:
+
+ $ star -t -v -block-number -f arc.tar
+ ...
+ 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
+ ...
+
+ (as usual, ignore the warnings about unknown keywords.)
+
+ 3. Let SIZE be the size of the sparse member, BS be its block number
+ and BN be the block number of the next member. Compute:
+
+ N = BS - BN - SIZE/512 - 2
+
+ This number gives the size of the extended header part in tar
+ "blocks". In our example, this formula gives: '897 - 56 - 425984 /
+ 512 - 2 = 7'.
+
+ 4. Use 'dd' to extract the headers:
+
+ dd if=ARCHIVE of=HNAME bs=512 skip=BS count=N
+
+ where ARCHIVE is the archive name, HNAME is a name of the file to
+ store the extended header in, BS and N are computed in previous
+ steps.
+
+ In our example, this command will be
+
+ $ dd if=arc.tar of=xhdr bs=512 skip=56 count=7
+
+ Finally, you can expand the condensed file, using the obtained
+header:
+
+ $ 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,...
+ Expanding file 'GNUSparseFile.28124/sparsefile' to 'sparsefile'
+ Done
+
+ ---------- Footnotes ----------
+
+ (1) *Note PAX 1::.
+
+ (2) Technically speaking, N is a "process ID" of the 'tar' process
+which created the archive (*note PAX keywords::).
+
+
+File: tar.info, Node: cpio, Prev: Portability, Up: Formats
+
+8.4 Comparison of 'tar' and 'cpio'
+==================================
+
+ _(This message will disappear, once this node revised.)_
+
+ The 'cpio' archive formats, like 'tar', do have maximum file name
+lengths. The binary and old ASCII formats have a maximum file length of
+256, and the new ASCII and CRC ASCII formats have a max file length of
+1024. GNU 'cpio' can read and write archives with arbitrary file name
+lengths, but other 'cpio' implementations may crash unexplainedly trying
+to read them.
+
+ 'tar' handles symbolic links in the form in which it comes in BSD;
+'cpio' doesn't handle symbolic links in the form in which it comes in
+System V prior to SVR4, and some vendors may have added symlinks to
+their system without enhancing 'cpio' to know about them. Others may
+have enhanced it in a way other than the way I did it at Sun, and which
+was adopted by AT&T (and which is, I think, also present in the 'cpio'
+that Berkeley picked up from AT&T and put into a later BSD release--I
+think I gave them my changes).
+
+ (SVR4 does some funny stuff with 'tar'; basically, its 'cpio' can
+handle 'tar' format input, and write it on output, and it probably
+handles symbolic links. They may not have bothered doing anything to
+enhance 'tar' as a result.)
+
+ 'cpio' handles special files; traditional 'tar' doesn't.
+
+ 'tar' comes with V7, System III, System V, and BSD source; 'cpio'
+comes only with System III, System V, and later BSD (4.3-tahoe and
+later).
+
+ 'tar''s way of handling multiple hard links to a file can handle file
+systems that support 32-bit i-numbers (e.g., the BSD file system);
+'cpio's way requires you to play some games (in its "binary" format,
+i-numbers are only 16 bits, and in its "portable ASCII" format, they're
+18 bits--it would have to play games with the "file system ID" field of
+the header to make sure that the file system ID/i-number pairs of
+different files were always different), and I don't know which 'cpio's,
+if any, play those games. Those that don't might get confused and think
+two files are the same file when they're not, and make hard links
+between them.
+
+ 'tar's way of handling multiple hard links to a file places only one
+copy of the link on the tape, but the name attached to that copy is the
+_only_ one you can use to retrieve the file; 'cpio's way puts one copy
+for every link, but you can retrieve it using any of the names.
+
+ What type of check sum (if any) is used, and how is this
+ calculated.
+
+ See the attached manual pages for 'tar' and 'cpio' format. 'tar'
+uses a checksum which is the sum of all the bytes in the 'tar' header
+for a file; 'cpio' uses no checksum.
+
+ If anyone knows why 'cpio' was made when 'tar' was present at the
+ unix scene,
+
+ It wasn't. 'cpio' first showed up in PWB/UNIX 1.0; no
+generally-available version of UNIX had 'tar' at the time. I don't know
+whether any version that was generally available _within AT&T_ had
+'tar', or, if so, whether the people within AT&T who did 'cpio' knew
+about it.
+
+ On restore, if there is a corruption on a tape 'tar' will stop at
+that point, while 'cpio' will skip over it and try to restore the rest
+of the files.
+
+ The main difference is just in the command syntax and header format.
+
+ 'tar' is a little more tape-oriented in that everything is blocked to
+start on a record boundary.
+
+ Is there any differences between the ability to recover crashed
+ archives between the two of them. (Is there any chance of
+ recovering crashed archives at all.)
+
+ Theoretically it should be easier under 'tar' since the blocking lets
+you find a header with some variation of 'dd skip=NN'. However, modern
+'cpio''s and variations have an option to just search for the next file
+header after an error with a reasonable chance of resyncing. However,
+lots of tape driver software won't allow you to continue past a media
+error which should be the only reason for getting out of sync unless a
+file changed sizes while you were writing the archive.
+
+ If anyone knows why 'cpio' was made when 'tar' was present at the
+ unix scene, please tell me about this too.
+
+ Probably because it is more media efficient (by not blocking
+everything and using only the space needed for the headers where 'tar'
+always uses 512 bytes per file header) and it knows how to archive
+special files.
+
+ You might want to look at the freely available alternatives. The
+major ones are 'afio', GNU 'tar', and 'pax', each of which have their
+own extensions with some backwards compatibility.
+
+ Sparse files were 'tar'red as sparse files (which you can easily
+test, because the resulting archive gets smaller, and GNU 'cpio' can no
+longer read it).
+
+
+File: tar.info, Node: Media, Next: Reliability and security, Prev: Formats, Up: Top
+
+9 Tapes and Other Archive Media
+*******************************
+
+ _(This message will disappear, once this node revised.)_
+
+ A few special cases about tape handling warrant more detailed
+description. These special cases are discussed below.
+
+ Many complexities surround the use of 'tar' on tape drives. Since
+the creation and manipulation of archives located on magnetic tape was
+the original purpose of 'tar', it contains many features making such
+manipulation easier.
+
+ Archives are usually written on dismountable media--tape cartridges,
+mag tapes, or floppy disks.
+
+ The amount of data a tape or disk holds depends not only on its size,
+but also on how it is formatted. A 2400 foot long reel of mag tape
+holds 40 megabytes of data when formatted at 1600 bits per inch. The
+physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
+
+ Magnetic media are re-usable--once the archive on a tape is no longer
+needed, the archive can be erased and the tape or disk used over. Media
+quality does deteriorate with use, however. Most tapes or disks should
+be discarded when they begin to produce data errors. EXABYTE tape
+cartridges should be discarded when they generate an "error count"
+(number of non-usable bits) of more than 10k.
+
+ Magnetic media are written and erased using magnetic fields, and
+should be protected from such fields to avoid damage to stored data.
+Sticking a floppy disk to a filing cabinet using a magnet is probably
+not a good idea.
+
+* Menu:
+
+* Device:: Device selection and switching
+* Remote Tape Server::
+* Common Problems and Solutions::
+* Blocking:: Blocking
+* Many:: Many archives on one tape
+* Using Multiple Tapes:: Using Multiple Tapes
+* label:: Including a Label in the Archive
+* verify::
+* Write Protection::
+
+
+File: tar.info, Node: Device, Next: Remote Tape Server, Up: Media
+
+9.1 Device Selection and Switching
+==================================
+
+ _(This message will disappear, once this node revised.)_
+
+'-f [HOSTNAME:]FILE'
+'--file=[HOSTNAME:]FILE'
+ Use archive file or device FILE on HOSTNAME.
+
+ This option is used to specify the file name of the archive 'tar'
+works on.
+
+ If the file name is '-', 'tar' reads the archive from standard input
+(when listing or extracting), or writes it to standard output (when
+creating). If the '-' file name is given when updating an archive,
+'tar' will read the original archive from its standard input, and will
+write the entire new archive to its standard output.
+
+ If the file name contains a ':', it is interpreted as 'hostname:file
+name'. If the HOSTNAME contains an "at" sign ('@'), it is treated as
+'user@hostname:file name'. In either case, 'tar' will invoke the
+command 'rsh' (or 'remsh') to start up an '/usr/libexec/rmt' on the
+remote machine. If you give an alternate login name, it will be given
+to the 'rsh'. Naturally, the remote machine must have an executable
+'/usr/libexec/rmt'. This program is free software from the University
+of California, and a copy of the source code can be found with the
+sources for 'tar'; it's compiled and installed by default. The exact
+path to this utility is determined when configuring the package. It is
+'PREFIX/libexec/rmt', where PREFIX stands for your installation prefix.
+This location may also be overridden at runtime by using the
+'--rmt-command=COMMAND' option (*Note --rmt-command: Option Summary, for
+detailed description of this option. *Note Remote Tape Server::, for
+the description of 'rmt' command).
+
+ If this option is not given, but the environment variable 'TAPE' is
+set, its value is used; otherwise, old versions of 'tar' used a default
+archive name (which was picked when 'tar' was compiled). The default is
+normally set up to be the "first" tape drive or other transportable I/O
+medium on the system.
+
+ Starting with version 1.11.5, GNU 'tar' uses standard input and
+standard output as the default device, and I will not try anymore
+supporting automatic device detection at installation time. This was
+failing really in too many cases, it was hopeless. This is now
+completely left to the installer to override standard input and standard
+output for default device, if this seems preferable. Further, I think
+_most_ actual usages of 'tar' are done with pipes or disks, not really
+tapes, cartridges or diskettes.
+
+ Some users think that using standard input and output is running
+after trouble. This could lead to a nasty surprise on your screen if
+you forget to specify an output file name--especially if you are going
+through a network or terminal server capable of buffering large amounts
+of output. We had so many bug reports in that area of configuring
+default tapes automatically, and so many contradicting requests, that we
+finally consider the problem to be portably intractable. We could of
+course use something like '/dev/tape' as a default, but this is _also_
+running after various kind of trouble, going from hung processes to
+accidental destruction of real tapes. After having seen all this mess,
+using standard input and output as a default really sounds like the only
+clean choice left, and a very useful one too.
+
+ GNU 'tar' reads and writes archive in records, I suspect this is the
+main reason why block devices are preferred over character devices.
+Most probably, block devices are more efficient too. The installer
+could also check for 'DEFTAPE' in '<sys/mtio.h>'.
+
+'--force-local'
+ Archive file is local even if it contains a colon.
+
+'--rsh-command=COMMAND'
+ Use remote COMMAND instead of 'rsh'. This option exists so that
+ people who use something other than the standard 'rsh' (e.g., a
+ Kerberized 'rsh') can access a remote device.
+
+ When this command is not used, the shell command found when the
+ 'tar' program was installed is used instead. This is the first
+ found of '/usr/ucb/rsh', '/usr/bin/remsh', '/usr/bin/rsh',
+ '/usr/bsd/rsh' or '/usr/bin/nsh'. The installer may have
+ overridden this by defining the environment variable 'RSH' _at
+ installation time_.
+
+'-[0-7][lmh]'
+ Specify drive and density.
+
+'-M'
+'--multi-volume'
+ Create/list/extract multi-volume archive.
+
+ This option causes 'tar' to write a "multi-volume" archive--one
+ that may be larger than will fit on the medium used to hold it.
+ *Note Multi-Volume Archives::.
+
+'-L NUM'
+'--tape-length=SIZE[SUF]'
+ Change tape after writing SIZE units of data. Unless SUF is given,
+ SIZE is treated as kilobytes, i.e. 'SIZE x 1024' bytes. The
+ following suffixes alter this behavior:
+
+ Suffix Units Byte Equivalent
+ -------------------------------------------------------------
+ b Blocks SIZE x 512
+ B Kilobytes SIZE x 1024
+ c Bytes SIZE
+ G Gigabytes SIZE x 1024^3
+ K Kilobytes SIZE x 1024
+ k Kilobytes SIZE x 1024
+ M Megabytes SIZE x 1024^2
+ P Petabytes SIZE x 1024^5
+ T Terabytes SIZE x 1024^4
+ w Words SIZE x 2
+
+ Table 9.1: Size Suffixes
+
+ 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.
+
+'-F COMMAND'
+'--info-script=COMMAND'
+'--new-volume-script=COMMAND'
+ Execute COMMAND at end of each tape. This implies '--multi-volume'
+ ('-M'). *Note info-script::, for a detailed description of this
+ option.
+
+
+File: tar.info, Node: Remote Tape Server, Next: Common Problems and Solutions, Prev: Device, Up: Media
+
+9.2 Remote Tape Server
+======================
+
+In order to access the tape drive on a remote machine, 'tar' uses the
+remote tape server written at the University of California at Berkeley.
+The remote tape server must be installed as 'PREFIX/libexec/rmt' on any
+machine whose tape drive you want to use. 'tar' calls 'rmt' by running
+an 'rsh' or 'remsh' to the remote machine, optionally using a different
+login name if one is supplied.
+
+ A copy of the source for the remote tape server is provided. Its
+source code can be freely distributed. It is compiled and installed by
+default.
+
+ Unless you use the '--absolute-names' ('-P') option, GNU 'tar' will
+not allow you to create an archive that contains absolute file names (a
+file name beginning with '/'). If you try, 'tar' will automatically
+remove the leading '/' from the file names it stores in the archive. It
+will also type a warning message telling you what it is doing.
+
+ When reading an archive that was created with a different 'tar'
+program, GNU 'tar' automatically extracts entries in the archive which
+have absolute file names as if the file names were not absolute. This
+is an important feature. A visitor here once gave a 'tar' tape to an
+operator to restore; the operator used Sun 'tar' instead of GNU 'tar',
+and the result was that it replaced large portions of our '/bin' and
+friends with versions from the tape; needless to say, we were unhappy
+about having to recover the file system from backup tapes.
+
+ For example, if the archive contained a file '/usr/bin/computoy', GNU
+'tar' would extract the file to 'usr/bin/computoy', relative to the
+current directory. If you want to extract the files in an archive to
+the same absolute names that they had when the archive was created, you
+should do a 'cd /' before extracting the files from the archive, or you
+should either use the '--absolute-names' option, or use the command 'tar
+-C / ...'.
+
+ Some versions of Unix (Ultrix 3.1 is known to have this problem), can
+claim that a short write near the end of a tape succeeded, when it
+actually failed. This will result in the -M option not working
+correctly. The best workaround at the moment is to use a significantly
+larger blocking factor than the default 20.
+
+ In order to update an archive, 'tar' must be able to backspace the
+archive in order to reread or rewrite a record that was just read (or
+written). This is currently possible only on two kinds of files: normal
+disk files (or any other file that can be backspaced with 'lseek'), and
+industry-standard 9-track magnetic tape (or any other kind of tape that
+can be backspaced with the 'MTIOCTOP' 'ioctl').
+
+ This means that the '--append', '--concatenate', and '--delete'
+commands will not work on any other kind of file. Some media simply
+cannot be backspaced, which means these commands and options will never
+be able to work on them. These non-backspacing media include pipes and
+cartridge tape drives.
+
+ Some other media can be backspaced, and 'tar' will work on them once
+'tar' is modified to do so.
+
+ Archives created with the '--multi-volume', '--label', and
+'--incremental' ('-G') options may not be readable by other version of
+'tar'. In particular, restoring a file that was split over a volume
+boundary will require some careful work with 'dd', if it can be done at
+all. Other versions of 'tar' may also create an empty file whose name
+is that of the volume header. Some versions of 'tar' may create normal
+files instead of directories archived with the '--incremental' ('-G')
+option.
+
+
+File: tar.info, Node: Common Problems and Solutions, Next: Blocking, Prev: Remote Tape Server, Up: Media
+
+9.3 Some Common Problems and their Solutions
+============================================
+
+errors from system:
+permission denied
+no such file or directory
+not owner
+
+errors from 'tar':
+directory checksum error
+header format error
+
+errors from media/system:
+i/o error
+device busy
+
+
+File: tar.info, Node: Blocking, Next: Many, Prev: Common Problems and Solutions, Up: Media
+
+9.4 Blocking
+============
+
+"Block" and "record" terminology is rather confused, and it is also
+confusing to the expert reader. On the other hand, readers who are new
+to the field have a fresh mind, and they may safely skip the next two
+paragraphs, as the remainder of this manual uses those two terms in a
+quite consistent way.
+
+ John Gilmore, the writer of the public domain 'tar' from which GNU
+'tar' was originally derived, wrote (June 1995):
+
+ The nomenclature of tape drives comes from IBM, where I believe
+ they were invented for the IBM 650 or so. On IBM mainframes, what
+ is recorded on tape are tape blocks. The logical organization of
+ data is into records. There are various ways of putting records
+ into blocks, including 'F' (fixed sized records), 'V' (variable
+ sized records), 'FB' (fixed blocked: fixed size records, N to a
+ block), 'VB' (variable size records, N to a block), 'VSB' (variable
+ spanned blocked: variable sized records that can occupy more than
+ one block), etc. The 'JCL' 'DD RECFORM=' parameter specified this
+ to the operating system.
+
+ The Unix man page on 'tar' was totally confused about this. When I
+ wrote 'PD TAR', I used the historically correct terminology ('tar'
+ writes data records, which are grouped into blocks). It appears
+ that the bogus terminology made it into POSIX (no surprise here),
+ and now Franc,ois has migrated that terminology back into the
+ source code too.
+
+ The term "physical block" means the basic transfer chunk from or to a
+device, after which reading or writing may stop without anything being
+lost. In this manual, the term "block" usually refers to a disk
+physical block, _assuming_ that each disk block is 512 bytes in length.
+It is true that some disk devices have different physical blocks, but
+'tar' ignore these differences in its own format, which is meant to be
+portable, so a 'tar' block is always 512 bytes in length, and "block"
+always mean a 'tar' block. The term "logical block" often represents
+the basic chunk of allocation of many disk blocks as a single entity,
+which the operating system treats somewhat atomically; this concept is
+only barely used in GNU 'tar'.
+
+ The term "physical record" is another way to speak of a physical
+block, those two terms are somewhat interchangeable. In this manual,
+the term "record" usually refers to a tape physical block, _assuming_
+that the 'tar' archive is kept on magnetic tape. It is true that
+archives may be put on disk or used with pipes, but nevertheless, 'tar'
+tries to read and write the archive one "record" at a time, whatever the
+medium in use. One record is made up of an integral number of blocks,
+and this operation of putting many disk blocks into a single tape block
+is called "reblocking", or more simply, "blocking". The term "logical
+record" refers to the logical organization of many characters into
+something meaningful to the application. The term "unit record"
+describes a small set of characters which are transmitted whole to or by
+the application, and often refers to a line of text. Those two last
+terms are unrelated to what we call a "record" in GNU 'tar'.
+
+ When writing to tapes, 'tar' writes the contents of the archive in
+chunks known as "records". To change the default blocking factor, use
+the '--blocking-factor=512-SIZE' ('-b 512-SIZE') option. Each record
+will then be composed of 512-SIZE blocks. (Each 'tar' block is 512
+bytes. *Note Standard::.) Each file written to the archive uses at
+least one full record. As a result, using a larger record size can
+result in more wasted space for small files. On the other hand, a
+larger record size can often be read and written much more efficiently.
+
+ Further complicating the problem is that some tape drives ignore the
+blocking entirely. For these, a larger record size can still improve
+performance (because the software layers above the tape drive still
+honor the blocking), but not as dramatically as on tape drives that
+honor blocking.
+
+ When reading an archive, 'tar' can usually figure out the record size
+on itself. When this is the case, and a non-standard record size was
+used when the archive was created, 'tar' will print a message about a
+non-standard blocking factor, and then operate normally(1). On some
+tape devices, however, 'tar' cannot figure out the record size itself.
+On most of those, you can specify a blocking factor (with
+'--blocking-factor') larger than the actual blocking factor, and then
+use the '--read-full-records' ('-B') option. (If you specify a blocking
+factor with '--blocking-factor' and don't use the '--read-full-records'
+option, then 'tar' will not attempt to figure out the recording size
+itself.) On some devices, you must always specify the record size
+exactly with '--blocking-factor' when reading, because 'tar' cannot
+figure it out. In any case, use '--list' ('-t') before doing any
+extractions to see whether 'tar' is reading the archive correctly.
+
+ 'tar' blocks are all fixed size (512 bytes), and its scheme for
+putting them into records is to put a whole number of them (one or more)
+into each record. 'tar' records are all the same size; at the end of
+the file there's a block containing all zeros, which is how you tell
+that the remainder of the last record(s) are garbage.
+
+ In a standard 'tar' file (no options), the block size is 512 and the
+record size is 10240, for a blocking factor of 20. What the
+'--blocking-factor' option does is sets the blocking factor, changing
+the record size while leaving the block size at 512 bytes. 20 was fine
+for ancient 800 or 1600 bpi reel-to-reel tape drives; most tape drives
+these days prefer much bigger records in order to stream and not waste
+tape. When writing tapes for myself, some tend to use a factor of the
+order of 2048, say, giving a record size of around one megabyte.
+
+ If you use a blocking factor larger than 20, older 'tar' programs
+might not be able to read the archive, so we recommend this as a limit
+to use in practice. GNU 'tar', however, will support arbitrarily large
+record sizes, limited only by the amount of virtual memory or the
+physical characteristics of the tape device.
+
+* Menu:
+
+* Format Variations:: Format Variations
+* Blocking Factor:: The Blocking Factor of an Archive
+
+ ---------- Footnotes ----------
+
+ (1) If this message is not needed, you can turn it off using the
+'--warning=no-record-size' option.
+
+
+File: tar.info, Node: Format Variations, Next: Blocking Factor, Up: Blocking
+
+9.4.1 Format Variations
+-----------------------
+
+ _(This message will disappear, once this node revised.)_
+
+ Format parameters specify how an archive is written on the archive
+media. The best choice of format parameters will vary depending on the
+type and number of files being archived, and on the media used to store
+the archive.
+
+ To specify format parameters when accessing or creating an archive,
+you can use the options described in the following sections. If you do
+not specify any format parameters, 'tar' uses default parameters. You
+cannot modify a compressed archive. If you create an archive with the
+'--blocking-factor' option specified (*note Blocking Factor::), you must
+specify that blocking-factor when operating on the archive. *Note
+Formats::, for other examples of format parameter considerations.
+
+
+File: tar.info, Node: Blocking Factor, Prev: Format Variations, Up: Blocking
+
+9.4.2 The Blocking Factor of an Archive
+---------------------------------------
+
+ _(This message will disappear, once this node revised.)_
+
+ The data in an archive is grouped into blocks, which are 512 bytes.
+Blocks are read and written in whole number multiples called "records".
+The number of blocks in a record (i.e., the size of a record in units of
+512 bytes) is called the "blocking factor". The
+'--blocking-factor=512-SIZE' ('-b 512-SIZE') option specifies the
+blocking factor of an archive. The default blocking factor is typically
+20 (i.e., 10240 bytes), but can be specified at installation. To find
+out the blocking factor of an existing archive, use 'tar --list
+--file=ARCHIVE-NAME'. This may not work on some devices.
+
+ Records are separated by gaps, which waste space on the archive
+media. If you are archiving on magnetic tape, using a larger blocking
+factor (and therefore larger records) provides faster throughput and
+allows you to fit more data on a tape (because there are fewer gaps).
+If you are archiving on cartridge, a very large blocking factor (say 126
+or more) greatly increases performance. A smaller blocking factor, on
+the other hand, may be useful when archiving small files, to avoid
+archiving lots of nulls as 'tar' fills out the archive to the end of the
+record. In general, the ideal record size depends on the size of the
+inter-record gaps on the tape you are using, and the average size of the
+files you are archiving. *Note create::, for information on writing
+archives.
+
+ Archives with blocking factors larger than 20 cannot be read by very
+old versions of 'tar', or by some newer versions of 'tar' running on old
+machines with small address spaces. With GNU 'tar', the blocking factor
+of an archive is limited only by the maximum record size of the device
+containing the archive, or by the amount of available virtual memory.
+
+ Also, on some systems, not using adequate blocking factors, as
+sometimes imposed by the device drivers, may yield unexpected
+diagnostics. For example, this has been reported:
+
+ Cannot write to /dev/dlt: Invalid argument
+
+In such cases, it sometimes happen that the 'tar' bundled by the system
+is aware of block size idiosyncrasies, while GNU 'tar' requires an
+explicit specification for the block size, which it cannot guess. This
+yields some people to consider GNU 'tar' is misbehaving, because by
+comparison, 'the bundle 'tar' works OK'. Adding '-b 256', for example,
+might resolve the problem.
+
+ If you use a non-default blocking factor when you create an archive,
+you must specify the same blocking factor when you modify that archive.
+Some archive devices will also require you to specify the blocking
+factor when reading that archive, however this is not typically the
+case. Usually, you can use '--list' ('-t') without specifying a
+blocking factor--'tar' reports a non-default record size and then lists
+the archive members as 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
+'--read-full-records' ('-B') option while specifying a blocking factor
+larger then the blocking factor of the archive (i.e., 'tar --extract
+--read-full-records --blocking-factor=300'). *Note list::, for more
+information on the '--list' ('-t') operation. *Note Reading::, for a
+more detailed explanation of that option.
+
+'--blocking-factor=NUMBER'
+'-b NUMBER'
+ Specifies the blocking factor of an archive. Can be used with any
+ operation, but is usually not necessary with '--list' ('-t').
+
+ Device blocking
+
+'-b BLOCKS'
+'--blocking-factor=BLOCKS'
+ Set record size to BLOCKS*512 bytes.
+
+ This option is used to specify a "blocking factor" for the archive.
+ When reading or writing the archive, 'tar', will do reads and
+ writes of the archive in records of BLOCK*512 bytes. This is true
+ even when the archive is compressed. Some devices requires that
+ all write operations be a multiple of a certain size, and so, 'tar'
+ pads the archive out to the next record boundary.
+
+ The default blocking factor is set when 'tar' is compiled, and is
+ typically 20. Blocking factors larger than 20 cannot be read by
+ very old versions of 'tar', or by some newer versions of 'tar'
+ running on old machines with small address spaces.
+
+ With a magnetic tape, larger records give faster throughput and fit
+ more data on a tape (because there are fewer inter-record gaps).
+ If the archive is in a disk file or a pipe, you may want to specify
+ a smaller blocking factor, since a large one will result in a large
+ number of null bytes at the end of the archive.
+
+ When writing cartridge or other streaming tapes, a much larger
+ blocking factor (say 126 or more) will greatly increase
+ performance. However, you must specify the same blocking factor
+ when reading or updating the archive.
+
+ Apparently, Exabyte drives have a physical block size of 8K bytes.
+ If we choose our blocksize as a multiple of 8k bytes, then the
+ problem seems to disappear. Id est, we are using block size of 112
+ right now, and we haven't had the problem since we switched...
+
+ With GNU 'tar' the blocking factor is limited only by the maximum
+ record size of the device containing the archive, or by the amount
+ of available virtual memory.
+
+ However, deblocking or reblocking is virtually avoided in a special
+ case which often occurs in practice, but which requires all the
+ following conditions to be simultaneously true:
+ * the archive is subject to a compression option,
+ * the archive is not handled through standard input or output,
+ nor redirected nor piped,
+ * the archive is directly handled to a local disk, instead of
+ any special device,
+ * '--blocking-factor' is not explicitly specified on the 'tar'
+ invocation.
+
+ If the output goes directly to a local disk, and not through
+ stdout, then the last write is not extended to a full record size.
+ Otherwise, reblocking occurs. Here are a few other remarks on this
+ topic:
+
+ * 'gzip' will complain about trailing garbage if asked to
+ uncompress a compressed archive on tape, there is an option to
+ turn the message off, but it breaks the regularity of simply
+ having to use 'PROG -d' for decompression. It would be nice
+ if gzip was silently ignoring any number of trailing zeros.
+ I'll ask Jean-loup Gailly, by sending a copy of this message
+ to him.
+
+ * 'compress' does not show this problem, but as Jean-loup
+ pointed out to Michael, 'compress -d' silently adds garbage
+ after the result of decompression, which tar ignores because
+ it already recognized its end-of-file indicator. So this bug
+ may be safely ignored.
+
+ * 'gzip -d -q' will be silent about the trailing zeros indeed,
+ but will still return an exit status of 2 which tar reports in
+ turn. 'tar' might ignore the exit status returned, but I hate
+ doing that, as it weakens the protection 'tar' offers users
+ against other possible problems at decompression time. If
+ 'gzip' was silently skipping trailing zeros _and_ also
+ avoiding setting the exit status in this innocuous case, that
+ would solve this situation.
+
+ * 'tar' should become more solid at not stopping to read a pipe
+ at the first null block encountered. This inelegantly breaks
+ the pipe. 'tar' should rather drain the pipe out before
+ exiting itself.
+
+'-i'
+'--ignore-zeros'
+ Ignore blocks of zeros in archive (means EOF).
+
+ The '--ignore-zeros' ('-i') option causes 'tar' to ignore blocks of
+ zeros in the archive. Normally a block of zeros indicates the end
+ of the archive, but when reading a damaged archive, or one which
+ was created by concatenating several archives together, this option
+ allows 'tar' to read the entire archive. This option is not on by
+ default because many versions of 'tar' write garbage after the
+ zeroed blocks.
+
+ Note that this option causes '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.
+
+'-B'
+'--read-full-records'
+ Reblock as we read (for reading 4.2BSD pipes).
+
+ If '--read-full-records' is used, 'tar' will not panic if an
+ attempt to read a record from the archive does not return a full
+ record. Instead, 'tar' will keep reading until it has obtained a
+ full record.
+
+ This option is turned on by default when 'tar' is reading an
+ archive from standard input, or from a remote machine. This is
+ because on BSD Unix systems, a read of a pipe will return however
+ much happens to be in the pipe, even if it is less than 'tar'
+ requested. If this option was not used, 'tar' would fail as soon
+ as it read an incomplete record from the pipe.
+
+ This option is also useful with the commands for updating an
+ archive.
+
+ Tape blocking
+
+ When handling various tapes or cartridges, you have to take care of
+selecting a proper blocking, that is, the number of disk blocks you put
+together as a single tape block on the tape, without intervening tape
+gaps. A "tape gap" is a small landing area on the tape with no
+information on it, used for decelerating the tape to a full stop, and
+for later regaining the reading or writing speed. When the tape driver
+starts reading a record, the record has to be read whole without
+stopping, as a tape gap is needed to stop the tape motion without losing
+information.
+
+ Using higher blocking (putting more disk blocks per tape block) will
+use the tape more efficiently as there will be less tape gaps. But
+reading such tapes may be more difficult for the system, as more memory
+will be required to receive at once the whole record. Further, if there
+is a reading error on a huge record, this is less likely that the system
+will succeed in recovering the information. So, blocking should not be
+too low, nor it should be too high. 'tar' uses by default a blocking of
+20 for historical reasons, and it does not really matter when reading or
+writing to disk. Current tape technology would easily accommodate
+higher blockings. Sun recommends a blocking of 126 for Exabytes and 96
+for DATs. We were told that for some DLT drives, the blocking should be
+a multiple of 4Kb, preferably 64Kb ('-b 128') or 256 for decent
+performance. Other manufacturers may use different recommendations for
+the same tapes. This might also depends of the buffering techniques
+used inside modern tape controllers. Some imposes a minimum blocking,
+or a maximum blocking. Others request blocking to be some exponent of
+two.
+
+ So, there is no fixed rule for blocking. But blocking at read time
+should ideally be the same as blocking used at write time. At one place
+I know, with a wide variety of equipment, they found it best to use a
+blocking of 32 to guarantee that their tapes are fully interchangeable.
+
+ I was also told that, for recycled tapes, prior erasure (by the same
+drive unit that will be used to create the archives) sometimes lowers
+the error rates observed at rewriting time.
+
+ I might also use '--number-blocks' instead of '--block-number', so
+'--block' will then expand to '--blocking-factor' unambiguously.
+
+
+File: tar.info, Node: Many, Next: Using Multiple Tapes, Prev: Blocking, Up: Media
+
+9.5 Many Archives on One Tape
+=============================
+
+Most tape devices have two entries in the '/dev' directory, or entries
+that come in pairs, which differ only in the minor number for this
+device. Let's take for example '/dev/tape', which often points to the
+only or usual tape device of a given system. There might be a
+corresponding '/dev/nrtape' or '/dev/ntape'. The simpler name is the
+_rewinding_ version of the device, while the name having 'nr' in it is
+the _no rewinding_ version of the same device.
+
+ A rewinding tape device will bring back the tape to its beginning
+point automatically when this device is opened or closed. Since 'tar'
+opens the archive file before using it and closes it afterwards, this
+means that a simple:
+
+ $ tar cf /dev/tape DIRECTORY
+
+will reposition the tape to its beginning both prior and after saving
+DIRECTORY contents to it, thus erasing prior tape contents and making it
+so that any subsequent write operation will destroy what has just been
+saved.
+
+ So, a rewinding device is normally meant to hold one and only one
+file. If you want to put more than one 'tar' archive on a given tape,
+you will need to avoid using the rewinding version of the tape device.
+You will also have to pay special attention to tape positioning. Errors
+in positioning may overwrite the valuable data already on your tape.
+Many people, burnt by past experiences, will only use rewinding devices
+and limit themselves to one file per tape, precisely to avoid the risk
+of such errors. Be fully aware that writing at the wrong position on a
+tape loses all information past this point and most probably until the
+end of the tape, and this destroyed information _cannot_ be recovered.
+
+ To save DIRECTORY-1 as a first archive at the beginning of a tape,
+and leave that tape ready for a second archive, you should use:
+
+ $ mt -f /dev/nrtape rewind
+ $ tar cf /dev/nrtape DIRECTORY-1
+
+ "Tape marks" are special magnetic patterns written on the tape media,
+which are later recognizable by the reading hardware. These marks are
+used after each file, when there are many on a single tape. An empty
+file (that is to say, two tape marks in a row) signal the logical end of
+the tape, after which no file exist. Usually, non-rewinding tape device
+drivers will react to the close request issued by 'tar' by first writing
+two tape marks after your archive, and by backspacing over one of these.
+So, if you remove the tape at that time from the tape drive, it is
+properly terminated. But if you write another file at the current
+position, the second tape mark will be erased by the new information,
+leaving only one tape mark between files.
+
+ So, you may now save DIRECTORY-2 as a second archive after the first
+on the same tape by issuing the command:
+
+ $ tar cf /dev/nrtape DIRECTORY-2
+
+and so on for all the archives you want to put on the same tape.
+
+ Another usual case is that you do not write all the archives the same
+day, and you need to remove and store the tape between two archive
+sessions. In general, you must remember how many files are already
+saved on your tape. Suppose your tape already has 16 files on it, and
+that you are ready to write the 17th. You have to take care of skipping
+the first 16 tape marks before saving DIRECTORY-17, say, by using these
+commands:
+
+ $ mt -f /dev/nrtape rewind
+ $ mt -f /dev/nrtape fsf 16
+ $ tar cf /dev/nrtape DIRECTORY-17
+
+ In all the previous examples, we put aside blocking considerations,
+but you should do the proper things for that as well. *Note Blocking::.
+
+* Menu:
+
+* Tape Positioning:: Tape Positions and Tape Marks
+* mt:: The 'mt' Utility
+
+
+File: tar.info, Node: Tape Positioning, Next: mt, Up: Many
+
+9.5.1 Tape Positions and Tape Marks
+-----------------------------------
+
+ _(This message will disappear, once this node revised.)_
+
+ Just as archives can store more than one file from the file system,
+tapes can store more than one archive file. To keep track of where
+archive files (or any other type of file stored on tape) begin and end,
+tape archive devices write magnetic "tape marks" on the archive media.
+Tape drives write one tape mark between files, two at the end of all the
+file entries.
+
+ If you think of data as a series of records "rrrr"'s, and tape marks
+as "*"'s, a tape might look like the following:
+
+ rrrr*rrrrrr*rrrrr*rr*rrrrr**-------------------------
+
+ Tape devices read and write tapes using a read/write "tape head"--a
+physical part of the device which can only access one point on the tape
+at a time. When you use 'tar' to read or write archive data from a tape
+device, the device will begin reading or writing from wherever on the
+tape the tape head happens to be, regardless of which archive or what
+part of the archive the tape head is on. Before writing an archive, you
+should make sure that no data on the tape will be overwritten (unless it
+is no longer needed). Before reading an archive, you should make sure
+the tape head is at the beginning of the archive you want to read. You
+can do it manually via 'mt' utility (*note mt::). The 'restore' script
+does that automatically (*note Scripted Restoration::).
+
+ If you want to add new archive file entries to a tape, you should
+advance the tape to the end of the existing file entries, backspace over
+the last tape mark, and write the new archive file. If you were to add
+two archives to the example above, the tape might look like the
+following:
+
+ rrrr*rrrrrr*rrrrr*rr*rrrrr*rrr*rrrr**----------------
+
+
+File: tar.info, Node: mt, Prev: Tape Positioning, Up: Many
+
+9.5.2 The 'mt' Utility
+----------------------
+
+ _(This message will disappear, once this node revised.)_
+
+ *Note Blocking Factor::.
+
+ You can use the 'mt' utility to advance or rewind a tape past a
+specified number of archive files on the tape. This will allow you to
+move to the beginning of an archive before extracting or reading it, or
+to the end of all the archives before writing a new one.
+
+ The syntax of the 'mt' command is:
+
+ mt [-f TAPENAME] OPERATION [NUMBER]
+
+ where TAPENAME is the name of the tape device, NUMBER is the number
+of times an operation is performed (with a default of one), and
+OPERATION is one of the following:
+
+'eof'
+'weof'
+ Writes NUMBER tape marks at the current position on the tape.
+
+'fsf'
+ Moves tape position forward NUMBER files.
+
+'bsf'
+ Moves tape position back NUMBER files.
+
+'rewind'
+ Rewinds the tape. (Ignores NUMBER.)
+
+'offline'
+'rewoff1'
+ Rewinds the tape and takes the tape device off-line. (Ignores
+ NUMBER.)
+
+'status'
+ Prints status information about the tape unit.
+
+ If you don't specify a TAPENAME, 'mt' uses the environment variable
+'TAPE'; if 'TAPE' is not set, 'mt' will use the default device specified
+in your 'sys/mtio.h' file ('DEFTAPE' variable). If this is not defined,
+the program will display a descriptive error message and exit with code
+1.
+
+ 'mt' returns a 0 exit status when the operation(s) were successful, 1
+if the command was unrecognized, and 2 if an operation failed.
+
+
+File: tar.info, Node: Using Multiple Tapes, Next: label, Prev: Many, Up: Media
+
+9.6 Using Multiple Tapes
+========================
+
+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
+'tar' commands, but this can be inconvenient, particularly if you are
+using options like '--exclude=PATTERN' or dumping entire file systems.
+Therefore, 'tar' provides a special mode for creating multi-volume
+archives.
+
+ "Multi-volume" archive is a single 'tar' archive, stored on several
+media volumes of fixed size. Although in this section we will often
+call 'volume' a "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 archive, GNU 'tar' 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 until all requested files are dumped. If GNU 'tar' 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 GNU 'tar' 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.
+
+ GNU 'tar' is able to create multi-volume archives of two formats
+(*note Formats::): 'GNU' and 'POSIX'.
+
+* Menu:
+
+* Multi-Volume Archives:: Archives Longer than One Tape or Disk
+* Tape Files:: Tape Files
+* Tarcat:: Concatenate Volumes into a Single Archive
+
+
+File: tar.info, Node: Multi-Volume Archives, Next: Tape Files, Up: Using Multiple Tapes
+
+9.6.1 Archives Longer than One Tape or Disk
+-------------------------------------------
+
+To create an archive that is larger than will fit on a single unit of
+the media, use the '--multi-volume' ('-M') option in conjunction with
+the '--create' option (*note create::). A "multi-volume" archive can be
+manipulated like any other archive (provided the '--multi-volume' option
+is specified), but is stored on more than one tape or file.
+
+ When you specify '--multi-volume', '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.
+
+'--multi-volume'
+'-M'
+ Creates a multi-volume archive, when used in conjunction with
+ '--create' ('-c'). To perform any other operation on a
+ multi-volume archive, specify '--multi-volume' in conjunction with
+ that operation. For example:
+
+ $ tar --create --multi-volume --file=/dev/tape FILES
+
+ The method 'tar' uses to detect end of tape is not perfect, and fails
+on some operating systems or on some devices. If 'tar' cannot detect
+the end of the tape itself, you can use '--tape-length' option to inform
+it about the capacity of the tape:
+
+'--tape-length=SIZE[SUF]'
+'-L SIZE[SUF]'
+ Set maximum length of a volume. The SUF, if given, specifies units
+ in which SIZE is expressed, e.g. '2M' mean 2 megabytes (*note
+ Table 9.1: size-suffixes, for a list of allowed size suffixes).
+ Without SUF, units of 1024 bytes (kilobyte) are assumed.
+
+ This option selects '--multi-volume' automatically. For example:
+
+ $ tar --create --tape-length=41943040 --file=/dev/tape FILES
+
+ or, which is equivalent:
+
+ $ tar --create --tape-length=4G --file=/dev/tape FILES
+
+ When GNU 'tar' comes to the end of a storage media, it asks you to
+change the volume. The built-in prompt for POSIX locale is(1):
+
+ Prepare volume #N for 'ARCHIVE' and hit return:
+
+where N is the ordinal number of the volume to be created and ARCHIVE is
+archive file or device name.
+
+ When prompting for a new tape, 'tar' accepts any of the following
+responses:
+
+'?'
+ Request 'tar' to explain possible responses.
+'q'
+ Request 'tar' to exit immediately.
+'n FILE-NAME'
+ Request 'tar' to write the next volume on the file FILE-NAME.
+'!'
+ Request 'tar' to run a subshell. This option can be disabled by
+ giving '--restrict' command line option to 'tar'(2).
+'y'
+ Request 'tar' to begin writing the next volume.
+
+ (You should only type 'y' after you have changed the tape; otherwise
+'tar' will write over the volume it just finished.)
+
+ The volume number used by 'tar' in its tape-changing prompt can be
+changed; if you give the '--volno-file=FILE-OF-NUMBER' option, then
+FILE-OF-NUMBER should be an non-existing 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 '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 *note
+label::, it _only_ affects the number used in the prompt.)
+
+ If you want more elaborate behavior than this, you can write a
+special "new volume script", that will be responsible for changing the
+volume, and instruct 'tar' to use it instead of its normal prompting
+procedure:
+
+'--info-script=COMMAND'
+'--new-volume-script=COMMAND'
+'-F COMMAND'
+ Specify the command to invoke when switching volumes. The COMMAND
+ can be used to eject cassettes, or to broadcast messages such as
+ 'Someone please come change my tape' when performing unattended
+ backups.
+
+ The COMMAND can contain additional options, if such are needed.
+*Note Running External Commands: external, for a detailed discussion of
+the way GNU 'tar' runs external commands. It inherits 'tar''s shell
+environment. Additional data is passed to it via the following
+environment variables:
+
+'TAR_VERSION'
+ GNU 'tar' version number.
+
+'TAR_ARCHIVE'
+ The name of the archive 'tar' is processing.
+
+'TAR_BLOCKING_FACTOR'
+ Current blocking factor (*note Blocking::).
+
+'TAR_VOLUME'
+ Ordinal number of the volume 'tar' is about to start.
+
+'TAR_SUBCOMMAND'
+ A short option describing the operation 'tar' is executing. *Note
+ Operations::, for a complete list of subcommand options.
+
+'TAR_FORMAT'
+ Format of the archive being processed. *Note Formats::, for a
+ complete list of archive format names.
+
+'TAR_FD'
+ File descriptor which can be used to communicate the new volume
+ name to 'tar'.
+
+ These variables can be used in the COMMAND itself, provided that they
+are properly quoted to prevent them from being expanded by the shell
+that invokes 'tar'.
+
+ The volume script can instruct 'tar' to use new archive name, by
+writing in to file descriptor '$TAR_FD' (see below for an example).
+
+ If the info script fails, 'tar' exits; otherwise, it begins writing
+the next volume.
+
+ If you want 'tar' to cycle through a series of files or tape drives,
+there are three approaches to choose from. First of all, you can give
+'tar' multiple '--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 'tar'
+prompt for a tape change (or run the info script). For example, suppose
+someone has two tape drives on a system named '/dev/tape0' and
+'/dev/tape1'. For having GNU 'tar' 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:
+
+ $ tar --create --multi-volume --file=/dev/tape0 --file=/dev/tape1 FILES
+ $ tar -cM -f /dev/tape0 -f /dev/tape1 FILES
+
+ The second method is to use the '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 '$TAR_FD'. For example,
+the following volume script will create a series of archive files, named
+'ARCHIVE-VOL', where ARCHIVE is the name of the archive being created
+(as given by '--file' option) and VOL is the ordinal number of the
+archive being created:
+
+ #! /bin/bash
+ # For this script it's advisable to use a shell, such as Bash,
+ # that supports a TAR_FD value greater than 9.
+
+ echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
+
+ name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
+ case $TAR_SUBCOMMAND in
+ -c) ;;
+ -d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
+ ;;
+ *) exit 1
+ esac
+
+ echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD
+
+ The same script can be used while listing, comparing or extracting
+from the created archive. For example:
+
+ # Create a multi-volume archive:
+ $ tar -c -L1024 -f archive.tar -F new-volume .
+ # Extract from the created archive:
+ $ tar -x -f archive.tar -F new-volume .
+
+Notice, that the first command had to use '-L' option, since otherwise
+GNU 'tar' will end up writing everything to 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
+volume, use '--list', without '--multi-volume' specified. To extract an
+archive member from one volume (assuming it is described that volume),
+use '--extract', again without '--multi-volume'.
+
+ 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
+'--multi-volume' to extract it successfully. In this case, you should
+load the volume where the archive member starts, and use 'tar --extract
+--multi-volume'--'tar' will prompt for later volumes as it needs them.
+*Note extracting archives::, for more information about extracting
+archives.
+
+ 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 '--label=ARCHIVE-LABEL'
+(*note label::) when it was created, 'tar' will not automatically label
+volumes which are added later. To label subsequent volumes, specify
+'--label=ARCHIVE-LABEL' again in conjunction with the '--append',
+'--update' or '--concatenate' operation.
+
+ Notice that multi-volume support is a GNU extension and the archives
+created in this mode should be read only using GNU 'tar'. If you
+absolutely have to process such archives using a third-party 'tar'
+implementation, read *note Split Recovery::.
+
+ ---------- Footnotes ----------
+
+ (1) If you run GNU 'tar' under a different locale, the translation to
+the locale's language will be used.
+
+ (2) *Note --restrict::, for more information about this option.
+
+
+File: tar.info, Node: Tape Files, Next: Tarcat, Prev: Multi-Volume Archives, Up: Using Multiple Tapes
+
+9.6.2 Tape Files
+----------------
+
+ _(This message will disappear, once this node revised.)_
+
+ To give the archive a name which will be recorded in it, use the
+'--label=VOLUME-LABEL' ('-V VOLUME-LABEL') option. This will write a
+special block identifying VOLUME-LABEL as the name of the archive to the
+front of the archive which will be displayed when the archive is listed
+with '--list'. If you are creating a multi-volume archive with
+'--multi-volume' (*note Using Multiple Tapes::), then the volume label
+will have 'Volume NNN' appended to the name you give, where NNN is the
+number of the volume of the archive. If you use the
+'--label=VOLUME-LABEL' option when reading an archive, it checks to make
+sure the label on the tape matches the one you gave. *Note label::.
+
+ When 'tar' writes an archive to tape, it creates a single tape file.
+If multiple archives are written to the same tape, one after the other,
+they each get written as separate tape files. When extracting, it is
+necessary to position the tape at the right place before running 'tar'.
+To do this, use the 'mt' command. For more information on the 'mt'
+command and on the organization of tapes into a sequence of tape files,
+see *note mt::.
+
+ People seem to often do:
+
+ --label="SOME-PREFIX `date +SOME-FORMAT`"
+
+ or such, for pushing a common date in all volumes or an archive set.
+
+
+File: tar.info, Node: Tarcat, Prev: Tape Files, Up: Using Multiple Tapes
+
+9.6.3 Concatenate Volumes into a Single Archive
+-----------------------------------------------
+
+Sometimes it is necessary to convert existing GNU 'tar' multi-volume
+archive to a single 'tar' archive. Simply concatenating all volumes
+into one will not work, since each volume carries an additional
+information at the beginning. GNU 'tar' is shipped with the shell
+script 'tarcat' designed for this purpose.
+
+ The script takes a list of files comprising a multi-volume archive
+and creates the resulting archive at the standard output. For example:
+
+ tarcat vol.1 vol.2 vol.3 | tar tf -
+
+ The script implements a simple heuristics to determine the format of
+the first volume file and to decide how to process the rest of the
+files. However, it makes no attempt to verify whether the files are
+given in order or even if they are valid 'tar' archives. It uses 'dd'
+and does not filter its standard error, so you will usually see lots of
+spurious messages.
+
+
+File: tar.info, Node: label, Next: verify, Prev: Using Multiple Tapes, Up: Media
+
+9.7 Including a Label in the Archive
+====================================
+
+To avoid problems caused by misplaced paper labels on the archive media,
+you can include a "label" entry -- an archive member which contains the
+name of the archive -- in the archive itself. Use the
+'--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') option(1) in conjunction
+with the '--create' operation to include a label entry in the archive as
+it is being created.
+
+'--label=ARCHIVE-LABEL'
+'-V ARCHIVE-LABEL'
+ Includes an "archive-label" at the beginning of the archive when
+ the archive is being created, when used in conjunction with the
+ '--create' operation. Checks to make sure the archive label
+ matches the one specified (when used in conjunction with any other
+ operation).
+
+ If you create an archive using both '--label=ARCHIVE-LABEL' ('-V
+ARCHIVE-LABEL') and '--multi-volume' ('-M'), each volume of the archive
+will have an archive label of the form 'ARCHIVE-LABEL Volume N', where N
+is 1 for the first volume, 2 for the next, and so on. *Note Using
+Multiple Tapes::, for information on creating multiple volume archives.
+
+ The volume label will be displayed by '--list' along with the file
+contents. If verbose display is requested, it will also be explicitly
+marked as in the example below:
+
+ $ tar --verbose --list --file=iamanarchive
+ V--------- 0/0 0 1992-03-07 12:01 iamalabel--Volume Header--
+ -rw-r--r-- ringo/user 40 1990-05-21 13:30 iamafilename
+
+ However, '--list' option will cause listing entire contents of the
+archive, which may be undesirable (for example, if the archive is stored
+on a tape). You can request checking only the volume label by
+specifying '--test-label' option. This option reads only the first
+block of an archive, so it can be used with slow storage devices. For
+example:
+
+ $ tar --test-label --file=iamanarchive
+ iamalabel
+
+ If '--test-label' is used with one or more command line arguments,
+'tar' compares the volume label with each argument. It exits with code
+0 if a match is found, and with code 1 otherwise(2). No output is
+displayed, unless you also used the '--verbose' option. For example:
+
+ $ tar --test-label --file=iamanarchive 'iamalabel'
+ => 0
+ $ tar --test-label --file=iamanarchive 'alabel'
+ => 1
+
+ When used with the '--verbose' option, 'tar' prints the actual volume
+label (if any), and a verbose diagnostics in case of a mismatch:
+
+ $ tar --test-label --verbose --file=iamanarchive 'iamalabel'
+ iamalabel
+ => 0
+ $ tar --test-label --verbose --file=iamanarchive 'alabel'
+ iamalabel
+ tar: Archive label mismatch
+ => 1
+
+ If you request any operation, other than '--create', along with using
+'--label' option, 'tar' will first check if the archive label matches
+the one specified and will refuse to proceed if it does not. Use this
+as a safety precaution to avoid accidentally overwriting existing
+archives. For example, if you wish to add files to 'archive',
+presumably labeled with string 'My volume', you will get:
+
+ $ tar -rf archive --label 'My volume' .
+ tar: Archive not labeled to match 'My volume'
+
+in case its label does not match. This will work even if 'archive' is
+not labeled at all.
+
+ Similarly, 'tar' will refuse to list or extract the archive if its
+label doesn't match the ARCHIVE-LABEL specified. In those cases,
+ARCHIVE-LABEL argument is interpreted as a globbing-style pattern which
+must match the actual magnetic volume label. *Note exclude::, for a
+precise description of how match is attempted(3). If the switch
+'--multi-volume' ('-M') is being used, the volume label matcher will
+also suffix ARCHIVE-LABEL by ' Volume [1-9]*' if the initial match
+fails, before giving up. Since the volume numbering is automatically
+added in labels at creation time, it sounded logical to equally help the
+user taking care of it when the archive is being read.
+
+ You can also use '--label' to get a common information on all tapes
+of a series. For having this information different in each series
+created through a single script used on a regular basis, just manage to
+get some date string as part of the label. For example:
+
+ $ tar -cM -f /dev/tape -V "Daily backup for `date +%Y-%m-%d`"
+ $ tar --create --file=/dev/tape --multi-volume \
+ --label="Daily backup for `date +%Y-%m-%d`"
+
+ Some more notes about volume labels:
+
+ * Each label has its own date and time, which corresponds to the time
+ when GNU 'tar' initially attempted to write it, often soon after
+ the operator launches 'tar' or types the carriage return telling
+ that the next tape is ready.
+
+ * Comparing date labels to get an idea of tape throughput is
+ unreliable. It gives correct results only if the delays for
+ rewinding tapes and the operator switching them were negligible,
+ which is usually not the case.
+
+ ---------- Footnotes ----------
+
+ (1) Until version 1.10, that option was called '--volume', but is not
+available under that name anymore.
+
+ (2) Note that GNU 'tar' versions up to 1.23 indicated mismatch with
+an exit code 2 and printed a spurious diagnostics on stderr.
+
+ (3) Previous versions of 'tar' used full regular expression matching,
+or before that, only exact string matching, instead of wildcard
+matchers. We decided for the sake of simplicity to use a uniform
+matching device through 'tar'.
+
+
+File: tar.info, Node: verify, Next: Write Protection, Prev: label, Up: Media
+
+9.8 Verifying Data as It is Stored
+==================================
+
+'-W'
+'--verify'
+ Attempt to verify the archive after writing.
+
+ This option causes 'tar' to verify the archive after writing it.
+Each volume is checked after it is written, and any discrepancies are
+recorded on the standard error output.
+
+ Verification requires that the archive be on a back-space-able
+medium. This means pipes, some cartridge tape drives, and some other
+devices cannot be verified.
+
+ You can insure the accuracy of an archive by comparing files in the
+system with archive members. 'tar' can compare an archive to the 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.
+
+ To check for discrepancies in an archive immediately after it is
+written, use the '--verify' ('-W') option in conjunction with the
+'--create' operation. When this option is specified, 'tar' checks
+archive members against their counterparts in the file system, and
+reports discrepancies on the standard error.
+
+ To verify an archive, you must be able to read it from before the end
+of the last written entry. This option is useful for detecting data
+errors on some tapes. Archives written to pipes, some cartridge tape
+drives, and some other devices cannot be verified.
+
+ One can explicitly compare an already made archive with the file
+system by using the '--compare' ('--diff', '-d') option, instead of
+using the more automatic '--verify' option. *Note compare::.
+
+ Note that these two options have a slightly different intent. The
+'--compare' option checks how identical are the logical contents of some
+archive with what is on your disks, while the '--verify' option is
+really for checking if the physical contents agree and if the recording
+media itself is of dependable quality. So, for the '--verify'
+operation, 'tar' tries to defeat all in-memory cache pertaining to the
+archive, while it lets the speed optimization undisturbed for the
+'--compare' option. If you nevertheless use '--compare' for media
+verification, you may have to defeat the in-memory cache yourself, maybe
+by opening and reclosing the door latch of your recording unit, forcing
+some doubt in your operating system about the fact this is really the
+same volume as the one just written or read.
+
+ The '--verify' option would not be necessary if drivers were indeed
+able to detect dependably all write failures. This sometimes require
+many magnetic heads, some able to read after the writes occurred. One
+would not say that drivers unable to detect all cases are necessarily
+flawed, as long as programming is concerned.
+
+ The '--verify' ('-W') option will not work in conjunction with the
+'--multi-volume' ('-M') option or the '--append' ('-r'), '--update'
+('-u') and '--delete' operations. *Note Operations::, for more
+information on these operations.
+
+ Also, since 'tar' normally strips leading '/' from file names (*note
+absolute::), a command like 'tar --verify -cf /tmp/foo.tar /etc' will
+work as desired only if the working directory is '/', as 'tar' uses the
+archive's relative member names (e.g., 'etc/motd') when verifying the
+archive.
+
+
+File: tar.info, Node: Write Protection, Prev: verify, Up: Media
+
+9.9 Write Protection
+====================
+
+Almost all tapes and diskettes, and in a few rare cases, even disks can
+be "write protected", to protect data on them from being changed. Once
+an archive is written, you should write protect the media to prevent the
+archive from being accidentally overwritten or deleted. (This will
+protect the archive from being changed with a tape or floppy drive--it
+will not protect it from magnet fields or other physical hazards.)
+
+ The write protection device itself is usually an integral part of the
+physical media, and can be a two position (write enabled/write disabled)
+switch, a notch which can be popped out or covered, a ring which can be
+removed from the center of a tape reel, or some other changeable
+feature.
+
+
+File: tar.info, Node: Reliability and security, Next: Changes, Prev: Media, Up: Top
+
+10 Reliability and Security
+***************************
+
+The 'tar' command reads and writes files as any other application does,
+and is subject to the usual caveats about reliability and security.
+This section contains some commonsense advice on the topic.
+
+* Menu:
+
+* Reliability::
+* Security::
+
+
+File: tar.info, Node: Reliability, Next: Security, Up: Reliability and security
+
+10.1 Reliability
+================
+
+Ideally, when 'tar' is creating an archive, it reads from a file system
+that is not being modified, and encounters no errors or inconsistencies
+while reading and writing. If this is the case, the archive should
+faithfully reflect what was read. Similarly, when extracting from an
+archive, ideally 'tar' ideally encounters no errors and the extracted
+files faithfully reflect what was in the archive.
+
+ However, when reading or writing real-world file systems, several
+things can go wrong; these include permissions problems, corruption of
+data, and race conditions.
+
+* Menu:
+
+* Permissions problems::
+* Data corruption and repair::
+* Race conditions::
+
+
+File: tar.info, Node: Permissions problems, Next: Data corruption and repair, Up: Reliability
+
+10.1.1 Permissions Problems
+---------------------------
+
+If 'tar' encounters errors while reading or writing files, it normally
+reports an error and exits with nonzero status. The work it does may
+therefore be incomplete. For example, when creating an archive, if
+'tar' cannot read a file then it cannot copy the file into the archive.
+
+
+File: tar.info, Node: Data corruption and repair, Next: Race conditions, Prev: Permissions problems, Up: Reliability
+
+10.1.2 Data Corruption and Repair
+---------------------------------
+
+If an archive becomes corrupted by an I/O error, this may corrupt the
+data in an extracted file. Worse, it may corrupt the file's metadata,
+which may cause later parts of the archive to become misinterpreted. An
+tar-format archive contains a checksum that most likely will detect
+errors in the metadata, but it will not detect errors in the data.
+
+ If data corruption is a concern, you can compute and check your own
+checksums of an archive by using other programs, such as 'cksum'.
+
+ When attempting to recover from a read error or data corruption in an
+archive, you may need to skip past the questionable data and read the
+rest of the archive. This requires some expertise in the archive format
+and in other software tools.
+
+
+File: tar.info, Node: Race conditions, Prev: Data corruption and repair, Up: Reliability
+
+10.1.3 Race conditions
+----------------------
+
+If some other process is modifying the file system while 'tar' is
+reading or writing files, the result may well be inconsistent due to
+race conditions. For example, if another process creates some files in
+a directory while 'tar' is creating an archive containing the
+directory's files, 'tar' may see some of the files but not others, or it
+may see a file that is in the process of being created. The resulting
+archive may not be a snapshot of the file system at any point in time.
+If an application such as a database system depends on an accurate
+snapshot, restoring from the 'tar' archive of a live file system may
+therefore break that consistency and may break the application. The
+simplest way to avoid the consistency issues is to avoid making other
+changes to the file system while tar is reading it or writing it.
+
+ When creating an archive, several options are available to avoid race
+conditions. Some hosts have a way of snapshotting a file system, or of
+temporarily suspending all changes to a file system, by (say) suspending
+the only virtual machine that can modify a file system; if you use these
+facilities and have 'tar -c' read from a snapshot when creating an
+archive, you can avoid inconsistency problems. More drastically, before
+starting 'tar' you could suspend or shut down all processes other than
+'tar' that have access to the file system, or you could unmount the file
+system and then mount it read-only.
+
+ When extracting from an archive, one approach to avoid race
+conditions is to create a directory that no other process can write to,
+and extract into that.
+
+
+File: tar.info, Node: Security, Prev: Reliability, Up: Reliability and security
+
+10.2 Security
+=============
+
+In some cases 'tar' may be used in an adversarial situation, where an
+untrusted user is attempting to gain information about or modify
+otherwise-inaccessible files. Dealing with untrusted data (that is,
+data generated by an untrusted user) typically requires extra care,
+because even the smallest mistake in the use of 'tar' is more likely to
+be exploited by an adversary than by a race condition.
+
+* Menu:
+
+* Privacy::
+* Integrity::
+* Live untrusted data::
+* Security rules of thumb::
+
+
+File: tar.info, Node: Privacy, Next: Integrity, Up: Security
+
+10.2.1 Privacy
+--------------
+
+Standard privacy concerns apply when using 'tar'. For example, suppose
+you are archiving your home directory into a file '/archive/myhome.tar'.
+Any secret information in your home directory, such as your SSH secret
+keys, are copied faithfully into the archive. Therefore, if your home
+directory contains any file that should not be read by some other user,
+the archive itself should be not be readable by that user. And even if
+the archive's data are inaccessible to untrusted users, its metadata
+(such as size or last-modified date) may reveal some information about
+your home directory; if the metadata are intended to be private, the
+archive's parent directory should also be inaccessible to untrusted
+users.
+
+ One precaution is to create '/archive' so that it is not accessible
+to any user, unless that user also has permission to access all the
+files in your home directory.
+
+ Similarly, when extracting from an archive, take care that the
+permissions of the extracted files are not more generous than what you
+want. Even if the archive itself is readable only to you, files
+extracted from it have their own permissions that may differ.
+
+
+File: tar.info, Node: Integrity, Next: Live untrusted data, Prev: Privacy, Up: Security
+
+10.2.2 Integrity
+----------------
+
+When creating archives, take care that they are not writable by a
+untrusted user; otherwise, that user could modify the archive, and when
+you later extract from the archive you will get incorrect data.
+
+ When 'tar' extracts from an archive, by default it writes into files
+relative to the working directory. If the archive was generated by an
+untrusted user, that user therefore can write into any file under the
+working directory. If the working directory contains a symbolic link to
+another directory, the untrusted user can also write into any file under
+the referenced directory. When extracting from an untrusted archive, it
+is therefore good practice to create an empty directory and run 'tar' in
+that directory.
+
+ When extracting from two or more untrusted archives, each one should
+be extracted independently, into different empty directories.
+Otherwise, the first archive could create a symbolic link into an area
+outside the working directory, and the second one could follow the link
+and overwrite data that is not under the working directory. For
+example, when restoring from a series of incremental dumps, the archives
+should have been created by a trusted process, as otherwise the
+incremental restores might alter data outside the working directory.
+
+ If you use the '--absolute-names' ('-P') option when extracting,
+'tar' respects any file names in the archive, even file names that begin
+with '/' or contain '..'. As this lets the archive overwrite any file
+in your system that you can write, the '--absolute-names' ('-P') option
+should be used only for trusted archives.
+
+ Conversely, with the '--keep-old-files' ('-k') and '--skip-old-files'
+options, 'tar' refuses to replace existing files when extracting. The
+difference between the two options is that the former treats existing
+files as errors whereas the latter just silently ignores them.
+
+ Finally, with the '--no-overwrite-dir' option, 'tar' refuses to
+replace the permissions or ownership of already-existing directories.
+These options may help when extracting from untrusted archives.
+
+
+File: tar.info, Node: Live untrusted data, Next: Security rules of thumb, Prev: Integrity, Up: Security
+
+10.2.3 Dealing with Live Untrusted Data
+---------------------------------------
+
+Extra care is required when creating from or extracting into a file
+system that is accessible to untrusted users. For example, superusers
+who invoke 'tar' must be wary about its actions being hijacked by an
+adversary who is reading or writing the file system at the same time
+that 'tar' is operating.
+
+ When creating an archive from a live file system, 'tar' is vulnerable
+to denial-of-service attacks. For example, an adversarial user could
+create the illusion of an indefinitely-deep directory hierarchy
+'d/e/f/g/...' by creating directories one step ahead of 'tar', or the
+illusion of an indefinitely-long file by creating a sparse file but
+arranging for blocks to be allocated just before 'tar' reads them.
+There is no easy way for 'tar' to distinguish these scenarios from
+legitimate uses, so you may need to monitor 'tar', just as you'd need to
+monitor any other system service, to detect such attacks.
+
+ While a superuser is extracting from an archive into a live file
+system, an untrusted user might replace a directory with a symbolic
+link, in hopes that 'tar' will follow the symbolic link and extract data
+into files that the untrusted user does not have access to. Even if the
+archive was generated by the superuser, it may contain a file such as
+'d/etc/passwd' that the untrusted user earlier created in order to break
+in; if the untrusted user replaces the directory 'd/etc' with a symbolic
+link to '/etc' while 'tar' is running, 'tar' will overwrite
+'/etc/passwd'. This attack can be prevented by extracting into a
+directory that is inaccessible to untrusted users.
+
+ Similar attacks via symbolic links are also possible when creating an
+archive, if the untrusted user can modify an ancestor of a top-level
+argument of 'tar'. For example, an untrusted user that can modify
+'/home/eve' can hijack a running instance of 'tar -cf -
+/home/eve/Documents/yesterday' by replacing '/home/eve/Documents' with a
+symbolic link to some other location. Attacks like these can be
+prevented by making sure that untrusted users cannot modify any files
+that are top-level arguments to 'tar', or any ancestor directories of
+these files.
+
+
+File: tar.info, Node: Security rules of thumb, Prev: Live untrusted data, Up: Security
+
+10.2.4 Security Rules of Thumb
+------------------------------
+
+This section briefly summarizes rules of thumb for avoiding security
+pitfalls.
+
+ * Protect archives at least as much as you protect any of the files
+ being archived.
+
+ * Extract from an untrusted archive only into an otherwise-empty
+ directory. This directory and its parent should be accessible only
+ to trusted users. For example:
+
+ $ chmod go-rwx .
+ $ mkdir -m go-rwx dir
+ $ cd dir
+ $ tar -xvf /archives/got-it-off-the-net.tar.gz
+
+ As a corollary, do not do an incremental restore from an untrusted
+ archive.
+
+ * Do not let untrusted users access files extracted from untrusted
+ archives without checking first for problems such as setuid
+ programs.
+
+ * Do not let untrusted users modify directories that are ancestors of
+ top-level arguments of 'tar'. For example, while you are executing
+ 'tar -cf /archive/u-home.tar /u/home', do not let an untrusted user
+ modify '/', '/archive', or '/u'.
+
+ * Pay attention to the diagnostics and exit status of 'tar'.
+
+ * When archiving live file systems, monitor running instances of
+ 'tar' to detect denial-of-service attacks.
+
+ * Avoid unusual options such as '--absolute-names' ('-P'),
+ '--dereference' ('-h'), '--overwrite', '--recursive-unlink', and
+ '--remove-files' unless you understand their security implications.
+
+
+File: tar.info, Node: Changes, Next: Configuring Help Summary, Prev: Reliability and security, Up: Top
+
+Appendix A Changes
+******************
+
+This appendix lists some important user-visible changes between version
+GNU 'tar' 1.29 and previous versions. An up-to-date version of this
+document is available at the GNU 'tar' documentation page
+(http://www.gnu.org/software/tar/manual/changes.html).
+
+Use of globbing patterns when listing and extracting.
+
+ Previous versions of GNU tar assumed shell-style globbing when
+ extracting from or listing an archive. For example:
+
+ $ tar xf foo.tar '*.c'
+
+ would extract all files whose names end in '.c'. This behavior was
+ not documented and was incompatible with traditional tar
+ implementations. Therefore, starting from version 1.15.91, GNU tar
+ no longer uses globbing by default. For example, the above
+ invocation is now interpreted as a request to extract from the
+ archive the file named '*.c'.
+
+ To facilitate transition to the new behavior for those users who
+ got used to the previous incorrect one, 'tar' will print a warning
+ if it finds out that a requested member was not found in the
+ archive and its name looks like a globbing pattern. For example:
+
+ $ tar xf foo.tar '*.c'
+ tar: Pattern matching characters used in file names. Please,
+ tar: use --wildcards to enable pattern matching, or --no-wildcards to
+ tar: suppress this warning.
+ tar: *.c: Not found in archive
+ tar: Error exit delayed from previous errors
+
+ To treat member names as globbing patterns, use the '--wildcards'
+ option. If you want to tar to mimic the behavior of versions prior
+ to 1.15.91, add this option to your 'TAR_OPTIONS' variable.
+
+ *Note wildcards::, for the detailed discussion of the use of
+ globbing patterns by GNU 'tar'.
+
+Use of short option '-o'.
+
+ Earlier versions of GNU 'tar' understood '-o' command line option
+ as a synonym for '--old-archive'.
+
+ GNU 'tar' starting from version 1.13.90 understands this option as
+ a synonym for '--no-same-owner'. This is compatible with UNIX98
+ 'tar' implementations.
+
+ However, to facilitate transition, '-o' option retains its old
+ semantics when it is used with one of archive-creation commands.
+ Users are encouraged to use '--format=oldgnu' instead.
+
+ It is especially important, since versions of GNU Automake up to
+ and including 1.8.4 invoke tar with this option to produce
+ distribution tarballs. *Note v7: Formats, for the detailed
+ discussion of this issue and its implications.
+
+ *Note tar-formats: (automake)Options, for a description on how to
+ use various archive formats with 'automake'.
+
+ Future versions of GNU 'tar' will understand '-o' only as a synonym
+ for '--no-same-owner'.
+
+Use of short option '-l'
+
+ Earlier versions of GNU 'tar' understood '-l' option as a synonym
+ for '--one-file-system'. Since such usage contradicted to UNIX98
+ specification and harmed compatibility with other implementations,
+ it was declared deprecated in version 1.14. However, to facilitate
+ transition to its new semantics, it was supported by versions 1.15
+ and 1.15.90. The present use of '-l' as a short variant of
+ '--check-links' was introduced in version 1.15.91.
+
+Use of options '--portability' and '--old-archive'
+
+ These options are deprecated. Please use '--format=v7' instead.
+
+Use of option '--posix'
+
+ This option is deprecated. Please use '--format=posix' instead.
+
+
+File: tar.info, Node: Configuring Help Summary, Next: Fixing Snapshot Files, Prev: Changes, Up: Top
+
+Appendix B Configuring Help Summary
+***********************************
+
+Running 'tar --help' displays the short 'tar' option summary (*note
+help::). This summary is organized by "groups" of semantically close
+options. The options within each group are printed in the following
+order: a short option, eventually followed by a list of corresponding
+long option names, followed by a short description of the option. For
+example, here is an excerpt from the actual 'tar --help' output:
+
+ Main operation mode:
+
+ -A, --catenate, --concatenate append tar files to an archive
+ -c, --create create a new archive
+ -d, --diff, --compare find differences between archive and
+ file system
+ --delete delete from the archive
+
+ The exact visual representation of the help output is configurable
+via 'ARGP_HELP_FMT' environment variable. The value of this variable is
+a comma-separated list of "format variable" assignments. There are two
+kinds of format variables. An "offset variable" keeps the offset of
+some part of help output text from the leftmost column on the screen. A
+"boolean" variable is a flag that toggles some output feature on or off.
+Depending on the type of the corresponding variable, there are two kinds
+of assignments:
+
+Offset assignment
+
+ The assignment to an offset variable has the following syntax:
+
+ VARIABLE=VALUE
+
+ where VARIABLE is the variable name, and VALUE is a numeric value
+ to be assigned to the variable.
+
+Boolean assignment
+
+ To assign 'true' value to a variable, simply put this variable
+ name. To assign 'false' value, prefix the variable name with
+ 'no-'. For example:
+
+ # Assign true value:
+ dup-args
+ # Assign false value:
+ no-dup-args
+
+ Following variables are declared:
+
+ -- Help Output: boolean dup-args
+ If true, arguments for an option are shown with both short and long
+ options, even when a given option has both forms, for example:
+
+ -f ARCHIVE, --file=ARCHIVE use archive file or device ARCHIVE
+
+ If false, then if an option has both short and long forms, the
+ argument is only shown with the long one, for example:
+
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+
+ and a message indicating that the argument is applicable to both
+ forms is printed below the options. This message can be disabled
+ using 'dup-args-note' (see below).
+
+ The default is false.
+
+ -- Help Output: boolean dup-args-note
+ If this variable is true, which is the default, the following
+ notice is displayed at the end of the help output:
+
+ Mandatory or optional arguments to long options are also
+ mandatory or optional for any corresponding short options.
+
+ Setting 'no-dup-args-note' inhibits this message. Normally, only
+ one of variables 'dup-args' or 'dup-args-note' should be set.
+
+ -- Help Output: offset short-opt-col
+ Column in which short options start. Default is 2.
+
+ $ tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+ $ ARGP_HELP_FMT=short-opt-col=6 tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+
+ -- Help Output: offset long-opt-col
+ Column in which long options start. Default is 6. For example:
+
+ $ tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+ $ ARGP_HELP_FMT=long-opt-col=16 tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+
+ -- Help Output: offset doc-opt-col
+ Column in which "doc options" start. A doc option isn't actually
+ an option, but rather an arbitrary piece of documentation that is
+ displayed in much the same manner as the options. For example, in
+ the description of '--format' option:
+
+ -H, --format=FORMAT create archive of the given format.
+
+ FORMAT is one of the following:
+
+ gnu GNU tar 1.13.x format
+ oldgnu GNU format as per tar <= 1.12
+ pax POSIX 1003.1-2001 (pax) format
+ posix same as pax
+ ustar POSIX 1003.1-1988 (ustar) format
+ v7 old V7 tar format
+
+ the format names are doc options. Thus, if you set
+ 'ARGP_HELP_FMT=doc-opt-col=6' the above part of the help output
+ will look as follows:
+
+ -H, --format=FORMAT create archive of the given format.
+
+ FORMAT is one of the following:
+
+ gnu GNU tar 1.13.x format
+ oldgnu GNU format as per tar <= 1.12
+ pax POSIX 1003.1-2001 (pax) format
+ posix same as pax
+ ustar POSIX 1003.1-1988 (ustar) format
+ v7 old V7 tar format
+
+ -- Help Output: offset opt-doc-col
+ Column in which option description starts. Default is 29.
+
+ $ tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+ $ ARGP_HELP_FMT=opt-doc-col=19 tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+ $ ARGP_HELP_FMT=opt-doc-col=9 tar --help|grep ARCHIVE
+ -f, --file=ARCHIVE
+ use archive file or device ARCHIVE
+
+ Notice, that the description starts on a separate line if
+ 'opt-doc-col' value is too small.
+
+ -- Help Output: offset header-col
+ Column in which "group headers" are printed. A group header is a
+ descriptive text preceding an option group. For example, in the
+ following text:
+
+ Main operation mode:
+
+ -A, --catenate, --concatenate append tar files to
+ an archive
+ -c, --create create a new archive
+ 'Main operation mode:' is the group header.
+
+ The default value is 1.
+
+ -- Help Output: offset usage-indent
+ Indentation of wrapped usage lines. Affects '--usage' output.
+ Default is 12.
+
+ -- Help Output: offset rmargin
+ Right margin of the text output. Used for wrapping.
+
+
+File: tar.info, Node: Fixing Snapshot Files, Next: Tar Internals, Prev: Configuring Help Summary, Up: Top
+
+Appendix C Fixing Snapshot Files
+********************************
+
+Various situations can cause device numbers to change: upgrading your
+kernel version, reconfiguring your hardware, loading kernel modules in a
+different order, using virtual volumes that are assembled dynamically
+(such as with LVM or RAID), hot-plugging drives (e.g. external USB or
+Firewire drives), etc. In the majority of cases this change is
+unnoticed by the users. However, it influences 'tar' incremental
+backups: the device number is stored in tar snapshot files (*note
+Snapshot Files::) and is used to determine whether the file has changed
+since the last backup. If the device numbers change for some reason, by
+default the next backup you run will be a full backup.
+
+ To minimize the impact in these cases, GNU 'tar' comes with the
+'tar-snapshot-edit' utility for inspecting and updating device numbers
+in snapshot files. (The utility, written by Dustin J. Mitchell, is also
+available from the GNU 'tar' home page
+(http://www.gnu.org/software/tar/utils/tar-snapshot-edit.html).)
+
+ To obtain a summary of the device numbers found in the snapshot file,
+run
+
+ $ tar-snapshot-edit SNAPFILE
+
+where SNAPFILE is the name of the snapshot file (you can supply as many
+files as you wish in a single command line). You can then compare the
+numbers across snapshot files, or against those currently in use on the
+live filesystem (using 'ls -l' or 'stat').
+
+ Assuming the device numbers have indeed changed, it's often possible
+to simply tell GNU 'tar' to ignore the device number when processing the
+incremental snapshot files for these backups, using the
+'--no-check-device' option (*note device numbers::).
+
+ Alternatively, you can use the 'tar-edit-snapshot' script's '-r'
+option to update all occurrences of the given device number in the
+snapshot file(s). It takes a single argument of the form
+'OLDDEV-NEWDEV', where OLDDEV is the device number used in the snapshot
+file, and NEWDEV is the corresponding new device number. Both numbers
+may be specified in hex (e.g., '0xfe01'), decimal (e.g., '65025'), or as
+a major:minor number pair (e.g., '254:1'). To change several device
+numbers at once, specify them in a single comma-separated list, as in
+'-r 0x3060-0x4500,0x307-0x4600'.
+
+ Before updating the snapshot file, it is a good idea to create a
+backup copy of it. This is accomplished by '-b' option. The name of
+the backup file is obtained by appending '~' to the original file name.
+
+ An example session:
+ $ tar-snapshot-edit root_snap.0 boot_snap.0
+ File: root_snap.0
+ Detected snapshot file version: 2
+
+ Device 0x0000 occurs 1 times.
+ Device 0x0003 occurs 1 times.
+ Device 0x0005 occurs 1 times.
+ Device 0x0013 occurs 1 times.
+ Device 0x6801 occurs 1 times.
+ Device 0x6803 occurs 6626 times.
+ Device 0xfb00 occurs 1 times.
+
+ File: boot_snap.0
+ Detected snapshot file version: 2
+
+ Device 0x6801 occurs 3 times.
+ $ tar-snapshot-edit -b -r 0x6801-0x6901,0x6803-0x6903 root_snap.0 boot_snap.0
+ File: root_snap.0
+ Detected snapshot file version: 2
+
+ Updated 6627 records.
+
+ File: boot_snap.0
+ Detected snapshot file version: 2
+
+ Updated 3 records.
+
+
+File: tar.info, Node: Tar Internals, Next: Genfile, Prev: Fixing Snapshot Files, Up: Top
+
+Appendix D Tar Internals
+************************
+
+* Menu:
+
+* Standard:: Basic Tar Format
+* Extensions:: GNU Extensions to the Archive Format
+* Sparse Formats:: Storing Sparse Files
+* Snapshot Files::
+* Dumpdir::
+
+
+File: tar.info, Node: Standard, Next: Extensions, Up: Tar Internals
+
+Basic Tar Format
+================
+
+ _(This message will disappear, once this node revised.)_
+
+ 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 'tar' utility or Tar mode in 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 "archive member"), and consists of a file header and the
+contents of the file. File headers contain file names and statistics,
+checksum information which '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 *note update::.
+
+ In addition to entries describing archive members, an archive may
+contain entries which 'tar' itself uses to store information. *Note
+label::, for an example of such an archive entry.
+
+ A 'tar' archive file contains a series of blocks. Each block
+contains '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 GNU 'tar' always issues a warning if it does not encounter
+it.
+
+ The blocks may be "blocked" for physical I/O operations. Each record
+of N blocks (where N is set by the '--blocking-factor=512-SIZE' ('-b
+512-SIZE') option to 'tar') is written with a single '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 GNU 'tar'
+distribution, this is part of file 'src/tar.h':
+
+
+ /* tar Header Block, from POSIX 1003.1-1990. */
+
+ /* POSIX header. */
+
+ struct posix_header
+ { /* byte offset */
+ char name[100]; /* 0 */
+ char mode[8]; /* 100 */
+ char uid[8]; /* 108 */
+ char gid[8]; /* 116 */
+ char size[12]; /* 124 */
+ char mtime[12]; /* 136 */
+ char chksum[8]; /* 148 */
+ char typeflag; /* 156 */
+ char linkname[100]; /* 157 */
+ char magic[6]; /* 257 */
+ char version[2]; /* 263 */
+ char uname[32]; /* 265 */
+ char gname[32]; /* 297 */
+ char devmajor[8]; /* 329 */
+ char devminor[8]; /* 337 */
+ char prefix[155]; /* 345 */
+ /* 500 */
+ };
+
+ #define TMAGIC "ustar" /* ustar and a null */
+ #define TMAGLEN 6
+ #define TVERSION "00" /* 00 and no null */
+ #define TVERSLEN 2
+
+ /* Values used in typeflag field. */
+ #define REGTYPE '0' /* regular file */
+ #define AREGTYPE '\0' /* regular file */
+ #define LNKTYPE '1' /* link */
+ #define SYMTYPE '2' /* reserved */
+ #define CHRTYPE '3' /* character special */
+ #define BLKTYPE '4' /* block special */
+ #define DIRTYPE '5' /* directory */
+ #define FIFOTYPE '6' /* FIFO special */
+ #define CONTTYPE '7' /* reserved */
+
+ #define XHDTYPE 'x' /* Extended header referring to the
+ next file in the archive */
+ #define XGLTYPE 'g' /* Global extended header */
+
+ /* Bits used in the mode field, values in octal. */
+ #define TSUID 04000 /* set UID on execution */
+ #define TSGID 02000 /* set GID on execution */
+ #define TSVTX 01000 /* reserved */
+ /* file permissions */
+ #define TUREAD 00400 /* read by owner */
+ #define TUWRITE 00200 /* write by owner */
+ #define TUEXEC 00100 /* execute/search by owner */
+ #define TGREAD 00040 /* read by group */
+ #define TGWRITE 00020 /* write by group */
+ #define TGEXEC 00010 /* execute/search by group */
+ #define TOREAD 00004 /* read by other */
+ #define TOWRITE 00002 /* write by other */
+ #define TOEXEC 00001 /* execute/search by other */
+
+ /* tar Header Block, GNU extensions. */
+
+ /* In GNU tar, SYMTYPE is for to symbolic links, and CONTTYPE is for
+ contiguous files, so maybe disobeying the "reserved" comment in POSIX
+ header description. I suspect these were meant to be used this way, and
+ should not have really been "reserved" in the published standards. */
+
+ /* *BEWARE* *BEWARE* *BEWARE* that the following information is still
+ boiling, and may change. Even if the OLDGNU format description should be
+ accurate, the so-called GNU format is not yet fully decided. It is
+ surely meant to use only extensions allowed by POSIX, but the sketch
+ below repeats some ugliness from the OLDGNU format, which should rather
+ go away. Sparse files should be saved in such a way that they do *not*
+ require two passes at archive creation time. Huge files get some POSIX
+ fields to overflow, alternate solutions have to be sought for this. */
+
+ /* Descriptor for a single file hole. */
+
+ struct sparse
+ { /* byte offset */
+ char offset[12]; /* 0 */
+ char numbytes[12]; /* 12 */
+ /* 24 */
+ };
+
+ /* Sparse files are not supported in POSIX ustar format. For sparse files
+ with a POSIX header, a GNU extra header is provided which holds overall
+ sparse information and a few sparse descriptors. When an old GNU header
+ replaces both the POSIX header and the GNU extra header, it holds some
+ sparse descriptors too. Whether POSIX or not, if more sparse descriptors
+ are still needed, they are put into as many successive sparse headers as
+ necessary. The following constants tell how many sparse descriptors fit
+ in each kind of header able to hold them. */
+
+ #define SPARSES_IN_EXTRA_HEADER 16
+ #define SPARSES_IN_OLDGNU_HEADER 4
+ #define SPARSES_IN_SPARSE_HEADER 21
+
+ /* Extension header for sparse files, used immediately after the GNU extra
+ header, and used only if all sparse information cannot fit into that
+ extra header. There might even be many such extension headers, one after
+ the other, until all sparse information has been recorded. */
+
+ struct sparse_header
+ { /* byte offset */
+ struct sparse sp[SPARSES_IN_SPARSE_HEADER];
+ /* 0 */
+ char isextended; /* 504 */
+ /* 505 */
+ };
+
+ /* The old GNU format header conflicts with POSIX format in such a way that
+ POSIX archives may fool old GNU tar's, and POSIX tar's might well be
+ fooled by old GNU tar archives. An old GNU format header uses the space
+ used by the prefix field in a POSIX header, and cumulates information
+ normally found in a GNU extra header. With an old GNU tar header, we
+ never see any POSIX header nor GNU extra header. Supplementary sparse
+ headers are allowed, however. */
+
+ struct oldgnu_header
+ { /* byte offset */
+ char unused_pad1[345]; /* 0 */
+ char atime[12]; /* 345 Incr. archive: atime of the file */
+ char ctime[12]; /* 357 Incr. archive: ctime of the file */
+ char offset[12]; /* 369 Multivolume archive: the offset of
+ the start of this volume */
+ char longnames[4]; /* 381 Not used */
+ char unused_pad2; /* 385 */
+ struct sparse sp[SPARSES_IN_OLDGNU_HEADER];
+ /* 386 */
+ char isextended; /* 482 Sparse file: Extension sparse header
+ follows */
+ char realsize[12]; /* 483 Sparse file: Real size*/
+ /* 495 */
+ };
+
+ /* OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
+ Found in an archive, it indicates an old GNU header format, which will be
+ hopefully become obsolescent. With OLDGNU_MAGIC, uname and gname are
+ valid, though the header is not truly POSIX conforming. */
+ #define OLDGNU_MAGIC "ustar " /* 7 chars and a null */
+
+ /* The standards committee allows only capital A through capital Z for
+ user-defined expansion. Other letters in use include:
+
+ 'A' Solaris Access Control List
+ 'E' Solaris Extended Attribute File
+ 'I' Inode only, as in 'star'
+ 'N' Obsolete GNU tar, for file names that do not fit into the main header.
+ 'X' POSIX 1003.1-2001 eXtended (VU version) */
+
+ /* This is a dir entry that contains the names of files that were in the
+ dir at the time the dump was made. */
+ #define GNUTYPE_DUMPDIR 'D'
+
+ /* Identifies the *next* file on the tape as having a long linkname. */
+ #define GNUTYPE_LONGLINK 'K'
+
+ /* Identifies the *next* file on the tape as having a long name. */
+ #define GNUTYPE_LONGNAME 'L'
+
+ /* This is the continuation of a file that began on another volume. */
+ #define GNUTYPE_MULTIVOL 'M'
+
+ /* This is for sparse files. */
+ #define GNUTYPE_SPARSE 'S'
+
+ /* This file is a tape/volume header. Ignore it on extraction. */
+ #define GNUTYPE_VOLHDR 'V'
+
+ /* Solaris extended header */
+ #define SOLARIS_XHDTYPE 'X'
+
+ /* Jo"rg Schilling star header */
+
+ struct star_header
+ { /* byte offset */
+ char name[100]; /* 0 */
+ char mode[8]; /* 100 */
+ char uid[8]; /* 108 */
+ char gid[8]; /* 116 */
+ char size[12]; /* 124 */
+ char mtime[12]; /* 136 */
+ char chksum[8]; /* 148 */
+ char typeflag; /* 156 */
+ char linkname[100]; /* 157 */
+ char magic[6]; /* 257 */
+ char version[2]; /* 263 */
+ char uname[32]; /* 265 */
+ char gname[32]; /* 297 */
+ char devmajor[8]; /* 329 */
+ char devminor[8]; /* 337 */
+ char prefix[131]; /* 345 */
+ char atime[12]; /* 476 */
+ char ctime[12]; /* 488 */
+ /* 500 */
+ };
+
+ #define SPARSES_IN_STAR_HEADER 4
+ #define SPARSES_IN_STAR_EXT_HEADER 21
+
+ struct star_in_header
+ {
+ char fill[345]; /* 0 Everything that is before t_prefix */
+ char prefix[1]; /* 345 t_name prefix */
+ char fill2; /* 346 */
+ char fill3[8]; /* 347 */
+ char isextended; /* 355 */
+ struct sparse sp[SPARSES_IN_STAR_HEADER]; /* 356 */
+ char realsize[12]; /* 452 Actual size of the file */
+ char offset[12]; /* 464 Offset of multivolume contents */
+ char atime[12]; /* 476 */
+ char ctime[12]; /* 488 */
+ char mfill[8]; /* 500 */
+ char xmagic[4]; /* 508 "tar" */
+ };
+
+ struct star_ext_header
+ {
+ struct sparse sp[SPARSES_IN_STAR_EXT_HEADER];
+ char isextended;
+ };
+
+
+ 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 'tar' format does not
+distinguish text files from binary files, and no translation of file
+contents is performed.
+
+ The 'name', 'linkname', 'magic', 'uname', and 'gname' are
+null-terminated character strings. All other fields are zero-filled
+octal numbers in ASCII. Each numeric field of width W contains W minus 1
+digits, and a null.
+
+ The 'name' field is the file name of the file, with directory names
+(if any) preceding the file name, separated by slashes.
+
+ The 'mode' field provides nine bits specifying file permissions and
+three bits to specify the Set UID, Set GID, and Save Text ("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 _other_ permission.
+
+ The 'uid' and '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 'size' field is the size of the file in bytes; linked files are
+archived with this field specified as zero.
+
+ The '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 '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 'chksum' field is treated as if it were
+all blanks.
+
+ The '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, 'tar' issues a warning to the standard error.
+
+ The 'atime' and 'ctime' fields are used in making incremental
+backups; they store, respectively, the particular file's access and
+status change times.
+
+ The 'offset' is used by the '--multi-volume' ('-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
+"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 '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 '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 '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 '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 'sp' is an array of 'struct sparse'. Each '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 'struct sparse' at the moment; if
+more are needed, they are not stored in the header.
+
+ The 'isextended' flag is set when an '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 '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 'isextended' gets set and
+the next block is an 'extended_header'.
+
+ Each 'extended_header' structure contains an array of 21 sparse
+structures, along with a similar 'isextended' flag that the header had.
+There can be an indeterminate number of such 'extended_header's to
+describe a sparse file.
+
+'REGTYPE'
+'AREGTYPE'
+ These flags represent a regular file. In order to be compatible
+ with older versions of 'tar', a 'typeflag' value of 'AREGTYPE'
+ should be silently recognized as a regular file. New archives
+ should be created using 'REGTYPE'. Also, for backward
+ compatibility, 'tar' treats a regular file whose name ends with a
+ slash as a directory.
+
+'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 'linkname' field with a trailing null.
+
+'SYMTYPE'
+ This represents a symbolic link to another file. The linked-to
+ name is specified in the 'linkname' field with a trailing null.
+
+'CHRTYPE'
+'BLKTYPE'
+ These represent character special files and block special files
+ respectively. In this case the 'devmajor' and '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.
+
+'DIRTYPE'
+ This flag specifies a directory or sub-directory. The directory
+ name in the 'name' field should end with a slash. On systems where
+ disk allocation is performed on a directory basis, the '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 'size' field of zero indicates no such limiting. Systems
+ which do not support limiting in this manner should ignore the
+ 'size' field.
+
+'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.
+
+'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.
+
+'A' ... 'Z'
+ These are reserved for custom implementations. Some of these are
+ used in the GNU modified format, as described below.
+
+ Other values are reserved for specification in future revisions of
+the P1003 standard, and should not be used by any 'tar' program.
+
+ The 'magic' field indicates that this archive was output in the P1003
+archive format. If this field contains 'TMAGIC', the 'uname' and
+'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 'uid' and 'gid' fields.
+
+ For references, see ISO/IEC 9945-1:1990 or IEEE Std 1003.1-1990,
+pages 169-173 (section 10.1) for '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 'pax - Portable archive interchange'.
+
+
+File: tar.info, Node: Extensions, Next: Sparse Formats, Prev: Standard, Up: Tar Internals
+
+GNU Extensions to the Archive Format
+====================================
+
+ _(This message will disappear, once this node revised.)_
+
+ The GNU format uses additional file types to describe new types of
+files in an archive. These are listed below.
+
+'GNUTYPE_DUMPDIR'
+''D''
+ This represents a directory and a list of files created by the
+ '--incremental' ('-G') option. The 'size' field gives the total
+ size of the associated list of files. Each file name is preceded
+ by either a 'Y' (the file should be in this archive) or an '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.
+
+'GNUTYPE_MULTIVOL'
+''M''
+ This represents a file continued from another volume of a
+ multi-volume archive created with the '--multi-volume' ('-M')
+ option. The original type of the file is not given here. The
+ '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 'offset' field gives the offset from the beginning of the file
+ where this part of the file begins. Thus 'size' plus 'offset'
+ should equal the original size of the file.
+
+'GNUTYPE_SPARSE'
+''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.
+
+'GNUTYPE_VOLHDR'
+''V''
+ This file type is used to mark the volume header that was given
+ with the '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') option when
+ the archive was created. The 'name' field contains the 'name'
+ given after the '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL')
+ option. The 'size' field is zero. Only the first file in each
+ volume of an archive should have this type.
+
+ You may have trouble reading a GNU format archive on a non-GNU system
+if the options '--incremental' ('-G'), '--multi-volume' ('-M'),
+'--sparse' ('-S'), or '--label=ARCHIVE-LABEL' ('-V ARCHIVE-LABEL') were
+used when writing the archive. In general, if 'tar' does not use the
+GNU-added fields of the header, other versions of 'tar' should be able
+to read the archive. Otherwise, the 'tar' program will give an error,
+the most likely one being a checksum error.
+
+
+File: tar.info, Node: Sparse Formats, Next: Snapshot Files, Prev: Extensions, Up: Tar Internals
+
+Storing Sparse Files
+====================
+
+The notion of sparse file, and the ways of handling it from the point of
+view of GNU 'tar' user have been described in detail in *note sparse::.
+This chapter describes the internal format GNU 'tar' uses to store such
+files.
+
+ The support for sparse files in GNU 'tar' has a long history. The
+earliest version featuring this support that I was able to find was
+1.09, released in November, 1990. The format introduced back then is
+called "old GNU" sparse format and in spite of the fact that its design
+contained many flaws, it was the only format GNU 'tar' supported until
+version 1.14 (May, 2004), which introduced initial support for sparse
+archives in PAX archives (*note posix::). This format was not free from
+design flaws, either and it was subsequently improved in versions 1.15.2
+(November, 2005) and 1.15.92 (June, 2006).
+
+ In addition to GNU sparse format, GNU 'tar' is able to read and
+extract sparse files archived by 'star'.
+
+ The following subsections describe each format in detail.
+
+* Menu:
+
+* Old GNU Format::
+* PAX 0:: PAX Format, Versions 0.0 and 0.1
+* PAX 1:: PAX Format, Version 1.0
+
+
+File: tar.info, Node: Old GNU Format, Next: PAX 0, Up: Sparse Formats
+
+Old GNU Format
+--------------
+
+The format introduced in November 1990 (v. 1.09) was designed on top of
+standard 'ustar' headers in such an unfortunate way that some of its
+fields overwrote fields required by POSIX.
+
+ An old GNU sparse header is designated by type 'S' ('GNUTYPE_SPARSE')
+and has the following layout:
+
+Offset Size Name Data type Contents
+----------------------------------------------------------------------------
+0 345 N/A Not used.
+345 12 atime Number 'atime' of the file.
+357 12 ctime Number 'ctime' of the file .
+369 12 offset Number For multivolume archives:
+ the offset of the start of
+ this volume.
+381 4 N/A Not used.
+385 1 N/A Not used.
+386 96 sp 'sparse_header'(4 entries) File map.
+482 1 isextended Bool '1' if an extension sparse
+ header follows, '0'
+ otherwise.
+483 12 realsize Number Real size of the file.
+
+ Each of 'sparse_header' object at offset 386 describes a single data
+chunk. It has the following structure:
+
+Offset Size Data type Contents
+---------------------------------------------------------------------------
+0 12 Number Offset of the beginning of the chunk.
+12 12 Number Size of the chunk.
+
+ If the member contains more than four chunks, the 'isextended' field
+of the header has the value '1' and the main header is followed by one
+or more "extension headers". Each such header has the following
+structure:
+
+Offset Size Name Data type Contents
+----------------------------------------------------------------------------
+0 21 sp 'sparse_header'(21 entries) File map.
+504 1 isextended Bool '1' if an extension sparse
+ header follows, or '0'
+ otherwise.
+
+ A header with 'isextended=0' ends the map.
+
+
+File: tar.info, Node: PAX 0, Next: PAX 1, Prev: Old GNU Format, Up: Sparse Formats
+
+PAX Format, Versions 0.0 and 0.1
+--------------------------------
+
+There are two formats available in this branch. The version '0.0' is
+the initial version of sparse format used by 'tar' versions 1.14-1.15.1.
+The sparse file map is kept in extended ('x') PAX header variables:
+
+'GNU.sparse.size'
+ Real size of the stored file;
+
+'GNU.sparse.numblocks'
+ Number of blocks in the sparse map;
+
+'GNU.sparse.offset'
+ Offset of the data block;
+
+'GNU.sparse.numbytes'
+ Size of the data block.
+
+ The latter two variables repeat for each data block, so the overall
+structure is like this:
+
+ GNU.sparse.size=SIZE
+ GNU.sparse.numblocks=NUMBLOCKS
+ repeat NUMBLOCKS times
+ GNU.sparse.offset=OFFSET
+ GNU.sparse.numbytes=NUMBYTES
+ end repeat
+
+ This format presented the following two problems:
+
+ 1. Whereas the POSIX specification allows a variable to appear
+ multiple times in a header, it requires that only the last
+ occurrence be meaningful. Thus, multiple occurrences of
+ 'GNU.sparse.offset' and 'GNU.sparse.numbytes' are conflicting with
+ the POSIX specs.
+
+ 2. Attempting to extract such archives using a third-party's 'tar'
+ results in extraction of sparse files in _condensed form_. If the
+ 'tar' implementation in question does not support POSIX format, it
+ will also extract a file containing extension header attributes.
+ This file can be used to expand the file to its original state.
+ However, posix-aware 'tar's will usually ignore the unknown
+ variables, which makes restoring the file more difficult. *Note
+ Extraction of sparse members in v.0.0 format: extracting sparse
+ v.0.x, for the detailed description of how to restore such members
+ using non-GNU 'tar's.
+
+ GNU 'tar' 1.15.2 introduced sparse format version '0.1', which
+attempted to solve these problems. As its predecessor, this format
+stores sparse map in the extended POSIX header. It retains
+'GNU.sparse.size' and 'GNU.sparse.numblocks' variables, but instead of
+'GNU.sparse.offset'/'GNU.sparse.numbytes' pairs it uses a single
+variable:
+
+'GNU.sparse.map'
+ Map of non-null data chunks. It is a string consisting of
+ comma-separated values "OFFSET,SIZE[,OFFSET-1,SIZE-1...]"
+
+ To address the 2nd problem, the 'name' field in 'ustar' is replaced
+with a special name, constructed using the following pattern:
+
+ %d/GNUSparseFile.%p/%f
+
+ The real name of the sparse file is stored in the variable
+'GNU.sparse.name'. Thus, those 'tar' implementations that are not aware
+of GNU extensions will at least extract the files into separate
+directories, giving the user a possibility to expand it afterwards.
+*Note Extraction of sparse members in v.0.1 format: extracting sparse
+v.0.x, for the detailed description of how to restore such members using
+non-GNU 'tar's.
+
+ The resulting 'GNU.sparse.map' string can be _very_ long. Although
+POSIX does not impose any limit on the length of a 'x' header variable,
+this possibly can confuse some 'tar's.
+
+
+File: tar.info, Node: PAX 1, Prev: PAX 0, Up: Sparse Formats
+
+PAX Format, Version 1.0
+-----------------------
+
+The version '1.0' of sparse format was introduced with GNU 'tar'
+1.15.92. Its main objective was to make the resulting file extractable
+with little effort even by non-posix aware 'tar' implementations.
+Starting from this version, the extended header preceding a sparse
+member always contains the following variables that identify the format
+being used:
+
+'GNU.sparse.major'
+ Major version
+
+'GNU.sparse.minor'
+ Minor version
+
+ The 'name' field in 'ustar' header contains a special name,
+constructed using the following pattern:
+
+ %d/GNUSparseFile.%p/%f
+
+ The real name of the sparse file is stored in the variable
+'GNU.sparse.name'. The real size of the file is stored in the variable
+'GNU.sparse.realsize'.
+
+ The sparse map itself is stored in the file data block, preceding the
+actual file data. It consists of a series of octal numbers of arbitrary
+length, delimited by newlines. The map is padded with nulls to the
+nearest block boundary.
+
+ The first number gives the number of entries in the map. Following
+are map entries, each one consisting of two numbers giving the offset
+and size of the data block it describes.
+
+ The format is designed in such a way that non-posix aware 'tar's and
+'tar's not supporting 'GNU.sparse.*' keywords will extract each sparse
+file in its condensed form with the file map prepended and will place it
+into a separate directory. Then, using a simple program it would be
+possible to expand the file to its original form even without GNU 'tar'.
+*Note Sparse Recovery::, for the detailed information on how to extract
+sparse members without GNU 'tar'.
+
+
+File: tar.info, Node: Snapshot Files, Next: Dumpdir, Prev: Sparse Formats, Up: Tar Internals
+
+Format of the Incremental Snapshot Files
+========================================
+
+A "snapshot file" (or "directory file") is created during incremental
+backups (*note Incremental Dumps::). It contains the status of the file
+system at the time of the dump and is used to determine which files were
+modified since the last backup.
+
+ GNU 'tar' version 1.29 supports three snapshot file formats. The
+first format, called "format 0", is the one used by GNU 'tar' versions
+up to and including 1.15.1. The second format, called "format 1" is an
+extended version of this format, that contains more metadata and allows
+for further extensions. It was used by alpha release version 1.15.90.
+For alpha version 1.15.91 and stable releases version 1.16 up through
+1.29, the "format 2" is used.
+
+ GNU 'tar' is able to read all three formats, but will create
+snapshots only in format 2.
+
+ This appendix describes all three formats in detail.
+
+ 0. 'Format 0' snapshot file begins with a line containing a decimal
+ number that represents a UNIX timestamp of the beginning of the
+ last archivation. This line is followed by directory metadata
+ descriptions, one per line. Each description has the following
+ format:
+
+ [NFS]DEV INODE NAME
+
+ where:
+
+ NFS
+ A single plus character ('+'), if this directory is located on
+ an NFS-mounted partition, otherwise empty.
+
+ (That is, for non-NFS directories, the first character on the
+ description line contains the start of the DEV field.)
+
+ DEV
+ Device number of the directory;
+
+ INODE
+ I-node number of the directory;
+
+ NAME
+ Name of the directory. Any special characters (white-space,
+ backslashes, etc.) are quoted.
+
+ 1. 'Format 1' snapshot file begins with a line specifying the format
+ of the file. This line has the following structure:
+
+ 'GNU tar-'TAR-VERSION'-'INCR-FORMAT-VERSION
+
+ where TAR-VERSION is the version number of GNU 'tar' implementation
+ that created this snapshot, and INCR-FORMAT-VERSION is the version
+ number of the snapshot format (in this case '1').
+
+ Next line contains two decimal numbers, representing the time of
+ the last backup. First number is the number of seconds, the second
+ one is the number of nanoseconds, since the beginning of the epoch.
+
+ Lines that follow contain directory metadata, one line per
+ directory. Each line is formatted as follows:
+
+ [NFS]MTIME-SEC MTIME-NSEC DEV INODE NAME
+
+ where MTIME-SEC and MTIME-NSEC represent last modification time of
+ this directory with nanosecond precision; NFS, DEV, INODE and NAME
+ have the same meaning as with 'format 0'.
+
+ 2. 'Format 2' snapshot file begins with a format identifier, as
+ described for version 1, e.g.:
+
+ GNU tar-1.29-2
+
+ This line is followed by newline. Rest of file consists of
+ records, separated by null (ASCII 0) characters. Thus, in contrast
+ to the previous formats, format 2 snapshot is a binary file.
+
+ First two records are decimal integers, representing the time of
+ the last backup. First number is the number of seconds, the second
+ one is the number of nanoseconds, since the beginning of the epoch.
+ These are followed by arbitrary number of directory records.
+
+ Each "directory record" contains a set of metadata describing a
+ particular directory. Parts of a directory record are delimited
+ with ASCII 0 characters. The following table describes each part.
+ The "Number" type in this table stands for a decimal integer in
+ ASCII notation. (Negative values are preceded with a "-"
+ character, while positive values have no leading punctuation.)
+
+ Field Type Description
+ ---------------------------------------------------------------------------
+ nfs Character '1' if the directory is located on an
+ NFS-mounted partition, or '0' otherwise;
+ timestamp_sec Number Modification time, seconds;
+ timestamp_nsec Number Modification time, nanoseconds;
+ dev Number Device number;
+ ino Number I-node number;
+ name String Directory name; in contrast to the
+ previous versions it is not quoted;
+ contents Dumpdir Contents of the directory;
+ *Note Dumpdir::, for a description of its
+ format.
+
+ Dumpdirs stored in snapshot files contain only records of types
+ 'Y', 'N' and 'D'.
+
+ The specific range of values allowed in each of the "Number" fields
+ depends on the underlying C datatypes as determined when 'tar' is
+ compiled. To see the specific ranges allowed for a particular
+ 'tar' binary, you can use the '--show-snapshot-field-ranges'
+ option:
+
+ $ tar --show-shapshot-field-ranges
+ This tar's snapshot file field ranges are
+ (field name => [ min, max ]):
+
+ nfs => [ 0, 1 ],
+ timestamp_sec => [ -9223372036854775808, 9223372036854775807 ],
+ timestamp_nsec => [ 0, 999999999 ],
+ dev => [ 0, 18446744073709551615 ],
+ ino => [ 0, 18446744073709551615 ],
+
+ (This example is from a GNU/Linux x86_64 system.)
+
+
+File: tar.info, Node: Dumpdir, Prev: Snapshot Files, Up: Tar Internals
+
+Dumpdir
+=======
+
+Incremental archives keep information about contents of each dumped
+directory in special data blocks called "dumpdirs".
+
+ Dumpdir is a sequence of entries of the following form:
+
+ C FILENAME \0
+
+where C is one of the "control codes" described below, FILENAME is the
+name of the file C operates upon, and '\0' represents a nul character
+(ASCII 0). The white space characters were added for readability, real
+dumpdirs do not contain them.
+
+ Each dumpdir ends with a single nul character.
+
+ The following table describes control codes and their meanings:
+
+'Y'
+ FILENAME is contained in the archive.
+
+'N'
+ FILENAME was present in the directory at the time the archive was
+ made, yet it was not dumped to the archive, because it had not
+ changed since the last backup.
+
+'D'
+ FILENAME is a directory.
+
+'R'
+ This code requests renaming of the FILENAME to the name specified
+ with the 'T' command, that immediately follows it.
+
+'T'
+ Specify target file name for 'R' command (see below).
+
+'X'
+ Specify "temporary directory" name for a rename operation (see
+ below).
+
+ Codes 'Y', 'N' and 'D' require FILENAME argument to be a relative
+file name to the directory this dumpdir describes, whereas codes 'R',
+'T' and 'X' require their argument to be an absolute file name.
+
+ The three codes 'R', 'T' and 'X' specify a "renaming operation". In
+the simplest case it is:
+
+ Rsource\0Tdest\0
+
+which means "rename file 'source' to file 'dest'".
+
+ However, there are cases that require using a "temporary directory".
+For example, consider the following scenario:
+
+ 1. Previous run dumped a directory 'foo' which contained the following
+ three directories:
+
+ a
+ b
+ c
+
+ 2. They were renamed _cyclically_, so that:
+
+ a became b
+ b became c
+ c became a
+
+ 3. New incremental dump was made.
+
+ This case cannot be handled by three successive renames, since
+renaming 'a' to 'b' will destroy the existing directory. To correctly
+process it, GNU 'tar' needs a temporary directory, so it creates the
+following dumpdir (newlines have been added for readability):
+
+ Xfoo\0
+ Rfoo/a\0T\0
+ Rfoo/b\0Tfoo/c\0
+ Rfoo/c\0Tfoo/a\0
+ R\0Tfoo/a\0
+
+ The first command, 'Xfoo\0', instructs the extractor to create a
+temporary directory in the directory 'foo'. Second command,
+'Rfoo/aT\0', says "rename file 'foo/a' to the temporary directory that
+has just been created" (empty file name after a command means use
+temporary directory). Third and fourth commands work as usual, and,
+finally, the last command, 'R\0Tfoo/a\0' tells tar to rename the
+temporary directory to 'foo/a'.
+
+ The exact placement of a dumpdir in the archive depends on the
+archive format (*note Formats::):
+
+ * PAX archives
+
+ In PAX archives, dumpdir is stored in the extended header of the
+ corresponding directory, in variable 'GNU.dumpdir'.
+
+ * GNU and old GNU archives
+
+ These formats implement special header type 'D', which is similar
+ to ustar header '5' (directory), except that it precedes a data
+ block containing the dumpdir.
+
+
+File: tar.info, Node: Genfile, Next: Free Software Needs Free Documentation, Prev: Tar Internals, Up: Top
+
+Appendix E Genfile
+******************
+
+This appendix describes 'genfile', an auxiliary program used in the GNU
+tar testsuite. If you are not interested in developing GNU tar, skip
+this appendix.
+
+ Initially, 'genfile' was used to generate data files for the
+testsuite, hence its name. However, new operation modes were being
+implemented as the testsuite grew more sophisticated, and now 'genfile'
+is a multi-purpose instrument.
+
+ There are three basic operation modes:
+
+File Generation
+ This is the default mode. In this mode, 'genfile' generates data
+ files.
+
+File Status
+ In this mode 'genfile' displays status of specified files.
+
+Synchronous Execution.
+ In this mode 'genfile' executes the given program with
+ '--checkpoint' option and executes a set of actions when specified
+ checkpoints are reached.
+
+* Menu:
+
+* Generate Mode:: File Generation Mode.
+* Status Mode:: File Status Mode.
+* Exec Mode:: Synchronous Execution mode.
+
+
+File: tar.info, Node: Generate Mode, Next: Status Mode, Up: Genfile
+
+E.1 Generate Mode
+=================
+
+In this mode 'genfile' creates a data file for the test suite. The size
+of the file is given with the '--length' ('-l') option. By default the
+file contents is written to the standard output, this can be changed
+using '--file' ('-f') command line option. Thus, the following two
+commands are equivalent:
+
+ genfile --length 100 > outfile
+ genfile --length 100 --file outfile
+
+ If '--length' is not given, 'genfile' will generate an empty
+(zero-length) file.
+
+ The command line option '--seek=N' istructs 'genfile' to skip the
+given number of bytes (N) in the output file before writing to it. It
+is similar to the 'seek=N' of the 'dd' utility.
+
+ You can instruct 'genfile' to create several files at one go, by
+giving it '--files-from' ('-T') option followed by a name of file
+containing a list of file names. Using dash ('-') instead of the file
+name causes 'genfile' to read file list from the standard input. For
+example:
+
+ # Read file names from file file.list
+ genfile --files-from file.list
+ # Read file names from standard input
+ genfile --files-from -
+
+ The list file is supposed to contain one file name per line. To use
+file lists separated by ASCII NUL character, use '--null' ('-0') command
+line option:
+
+ genfile --null --files-from file.list
+
+ The default data pattern for filling the generated file consists of
+first 256 letters of ASCII code, repeated enough times to fill the
+entire file. This behavior can be changed with '--pattern' option.
+This option takes a mandatory argument, specifying pattern name to use.
+Currently two patterns are implemented:
+
+'--pattern=default'
+ The default pattern as described above.
+
+'--pattern=zero'
+ Fills the file with zeroes.
+
+ If no file name was given, the program exits with the code '0'.
+Otherwise, it exits with '0' only if it was able to create a file of the
+specified length.
+
+ Special option '--sparse' ('-s') instructs 'genfile' to create a
+sparse file. Sparse files consist of "data fragments", separated by
+"holes" or blocks of zeros. On many operating systems, actual disk
+storage is not allocated for holes, but they are counted in the length
+of the file. To create a sparse file, 'genfile' should know where to
+put data fragments, and what data to use to fill them. So, when
+'--sparse' is given the rest of the command line specifies a so-called
+"file map".
+
+ The file map consists of any number of "fragment descriptors". Each
+descriptor is composed of two values: a number, specifying fragment
+offset from the end of the previous fragment or, for the very first
+fragment, from the beginning of the file, and "contents string", that
+specifies the pattern to fill the fragment with. File offset can be
+suffixed with the following quantifiers:
+
+'k'
+'K'
+ The number is expressed in kilobytes.
+'m'
+'M'
+ The number is expressed in megabytes.
+'g'
+'G'
+ The number is expressed in gigabytes.
+
+ Contents string can be either a fragment size or a pattern. Fragment
+size is a decimal number, prefixed with an equals sign. It can be
+suffixed with a quantifier, as discussed above. If fragment size is
+given, the fragment of that size will be filled with the currently
+selected pattern (*note -pattern: Generate Mode.) and written to the
+file.
+
+ A pattern is a string of arbitrary ASCII characters. For each of
+them, 'genfile' will generate a "block" of data, filled with that
+character and will write it to the fragment. The size of block is given
+by '--block-size' option. It defaults to 512. Thus, if pattern
+consists of N characters, the resulting file fragment will contain
+'N*BLOCK-SIZE' bytes of data.
+
+ The last fragment descriptor can have only file offset part. In this
+case 'genfile' will create a hole at the end of the file up to the given
+offset.
+
+ A dash appearing as a fragment descriptor instructs 'genfile' to read
+file map from the standard input. Each line of input should consist of
+fragment offset and contents string, separated by any amount of
+whitespace.
+
+ For example, consider the following invocation:
+
+ genfile --sparse --file sparsefile 0 ABCD 1M EFGHI 2000K
+
+It will create 3101184-bytes long file of the following structure:
+
+Offset Length Contents
+0 4*512=2048 Four 512-byte blocks, filled
+ with letters 'A', 'B', 'C' and
+ 'D'.
+2048 1046528 Zero bytes
+1050624 5*512=2560 Five blocks, filled with
+ letters 'E', 'F', 'G', 'H',
+ 'I'.
+1053184 2048000 Zero bytes
+
+ The exit code of 'genfile --sparse' command is '0' only if created
+file is actually sparse. If it is not, the appropriate error message is
+displayed and the command exists with code '1'. The '--quite' ('-q')
+option suppresses this behavior. If '--quite' is given, 'genfile
+--sparse' exits with code '0' if it was able to create the file, whether
+the resulting file is sparse or not.
+
+
+File: tar.info, Node: Status Mode, Next: Exec Mode, Prev: Generate Mode, Up: Genfile
+
+E.2 Status Mode
+===============
+
+In status mode, 'genfile' prints file system status for each file
+specified in the command line. This mode is toggled by '--stat' ('-S')
+command line option. An optional argument to this option specifies
+output "format": a comma-separated list of 'struct stat' fields to be
+displayed. This list can contain following identifiers:
+
+name
+ The file name.
+
+dev
+st_dev
+ Device number in decimal.
+
+ino
+st_ino
+ Inode number.
+
+mode[.NUMBER]
+st_mode[.NUMBER]
+
+ File mode in octal. Optional NUMBER specifies octal mask to be
+ applied to the mode before outputting. For example, '--stat
+ mode.777' will preserve lower nine bits of it. Notice, that you
+ can use any punctuation character in place of '.'.
+
+nlink
+st_nlink
+ Number of hard links.
+
+uid
+st_uid
+ User ID of owner.
+
+gid
+st_gid
+ Group ID of owner.
+
+size
+st_size
+ File size in decimal.
+
+blksize
+st_blksize
+ The size in bytes of each file block.
+
+blocks
+st_blocks
+ Number of blocks allocated.
+
+atime
+st_atime
+ Time of last access.
+
+mtime
+st_mtime
+ Time of last modification
+
+ctime
+st_ctime
+ Time of last status change
+
+sparse
+ A boolean value indicating whether the file is 'sparse'.
+
+ Modification times are displayed in UTC as UNIX timestamps, unless
+suffixed with 'H' (for "human-readable"), as in 'ctimeH', in which case
+usual 'tar tv' output format is used.
+
+ The default output format is: 'name,dev,ino,mode,
+nlink,uid,gid,size,blksize,blocks,atime,mtime,ctime'.
+
+ For example, the following command will display file names and
+corresponding times of last access for each file in the current working
+directory:
+
+ genfile --stat=name,atime *
+
+
+File: tar.info, Node: Exec Mode, Prev: Status Mode, Up: Genfile
+
+E.3 Exec Mode
+=============
+
+This mode is designed for testing the behavior of 'paxutils' commands
+when some of the files change during archiving. It is an experimental
+mode.
+
+ The 'Exec Mode' is toggled by '--run' command line option (or its
+alias '-r'). The non-optional arguments to 'getopt' give the command
+line to be executed. Normally, it should contain at least the
+'--checkpoint' option.
+
+ A set of options is provided for defining checkpoint values and
+actions to be executed upon reaching them. Checkpoint values are
+introduced with the '--checkpoint' command line option. Argument to
+this option is the number of checkpoint in decimal.
+
+ Any number of "actions" may be specified after a checkpoint.
+Available actions are
+
+'--cut FILE'
+'--truncate FILE'
+ Truncate FILE to the size specified by previous '--length' option
+ (or 0, if it is not given).
+
+'--append FILE'
+ Append data to FILE. The size of data and its pattern are given by
+ previous '--length' and 'pattern' options.
+
+'--touch FILE'
+ Update the access and modification times of FILE. These timestamps
+ are changed to the current time, unless '--date' option was given,
+ in which case they are changed to the specified time. Argument to
+ '--date' option is a date specification in an almost arbitrary
+ format (*note Date input formats::).
+
+'--exec COMMAND'
+ Execute given shell command.
+
+'--unlink FILE'
+ Unlink the FILE.
+
+ Option '--verbose' instructs 'genfile' to print on standard output
+notifications about checkpoints being executed and to verbosely describe
+exit status of the command.
+
+ While the command is being executed its standard output remains
+connected to descriptor 1. All messages it prints to file descriptor 2,
+except checkpoint notifications, are forwarded to standard error.
+
+ 'Genfile' exits with the exit status of the executed command.
+
+ For compatibility with previous 'genfile' versions, the '--run'
+option takes an optional argument. If used this way, its argument
+supplies the command line to be executed. There should be no
+non-optional arguments in the 'genfile' command line.
+
+ The actual command line is constructed by inserting the
+'--checkpoint' option between the command name and its first argument
+(if any). Due to this, the argument to '--run' may not use traditional
+'tar' option syntax, i.e., the following is wrong:
+
+ # Wrong!
+ genfile --run='tar cf foo bar'
+
+ Use the following syntax instead:
+
+ genfile --run='tar -cf foo bar' ACTIONS...
+
+ The above command line is equivalent to
+
+ genfile ACTIONS... -- tar -cf foo bar
+
+ Notice, that the use of compatibility mode is deprecated.
+
+
+File: tar.info, Node: Free Software Needs Free Documentation, Next: GNU Free Documentation License, Prev: Genfile, Up: Top
+
+Appendix F Free Software Needs Free Documentation
+*************************************************
+
+The biggest deficiency in the free software community today is not in
+the software--it is the lack of good free documentation that we can
+include with the free software. Many of our most important programs do
+not come with free reference manuals and free introductory texts.
+Documentation is an essential part of any software package; when an
+important free software package does not come with a free manual and a
+free tutorial, that is a major gap. We have many such gaps today.
+
+ Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms--no
+copying, no modification, source files not available--which exclude them
+from the free software world.
+
+ That wasn't the first time this sort of thing happened, and it was
+far from the last. Many times we have heard a GNU user eagerly describe
+a manual that he is writing, his intended contribution to the community,
+only to learn that he had ruined everything by signing a publication
+contract to make it non-free.
+
+ Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies--that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The problem
+is the restrictions on the use of the manual. Free manuals are
+available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+ The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of commercial
+redistribution) must be permitted, so that the manual can accompany
+every copy of the program, both on-line and on paper.
+
+ Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too--so they can provide
+accurate and clear documentation for the modified program. A manual
+that leaves you no choice but to write a new manual to document a
+changed version of the program is not really available to our community.
+
+ Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original author's
+copyright notice, the distribution terms, or the list of authors, are
+ok. It is also no problem to require modified versions to include
+notice that they were modified. Even entire sections that may not be
+deleted or changed are acceptable, as long as they deal with
+nontechnical topics (like this one). These kinds of restrictions are
+acceptable because they don't obstruct the community's normal use of the
+manual.
+
+ However, it must be possible to modify all the _technical_ content of
+the manual, and then distribute the result in all the usual media,
+through all the usual channels. Otherwise, the restrictions obstruct
+the use of the manual, it is not free, and we need another manual to
+replace it.
+
+ Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that free
+software needs free reference manuals and free tutorials, perhaps the
+next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to the
+free software community.
+
+ If you are writing documentation, please insist on publishing it
+under the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval--you don't
+have to let the publisher decide. Some commercial publishers will use a
+free license if you insist, but they will not propose the option; it is
+up to you to raise the issue and say firmly that this is what you want.
+If the publisher you are dealing with refuses, please try other
+publishers. If you're not sure whether a proposed license is free,
+write to <licensing@gnu.org>.
+
+ You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying copies
+from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation at
+all. Check the distribution terms of a manual before you buy it, and
+insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try reward the publishers that have
+paid or pay the authors to work on it.
+
+ The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+<http://www.fsf.org/doc/other-free-books.html>.
+
+
+File: tar.info, Node: GNU Free Documentation License, Next: Index of Command Line Options, Prev: Free Software Needs Free Documentation, Up: Top
+
+Appendix G GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000-2002, 2007-2008, 2014, 2016 Free Software
+ Foundation, Inc.
+ <http://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled "History" in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ "History" section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version's
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <http://www.gnu.org/copyleft/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: tar.info, Node: Index of Command Line Options, Next: Index, Prev: GNU Free Documentation License, Up: Top
+
+Appendix H Index of Command Line Options
+****************************************
+
+This appendix contains an index of all GNU 'tar' long command line
+options. The options are listed without the preceding double-dash. For
+a cross-reference of short command line options, see *note Short Option
+Summary::.
+
+
+* Menu:
+
+* absolute-names: absolute. (line 10)
+* absolute-names, summary: Option Summary. (line 6)
+* acls, summary: Option Summary. (line 14)
+* add-file: files. (line 79)
+* after-date: after. (line 24)
+* after-date, summary: Option Summary. (line 17)
+* anchored: controlling pattern-matching.
+ (line 78)
+* anchored, summary: Option Summary. (line 21)
+* append: append. (line 6)
+* append <1>: appending files. (line 6)
+* append, summary: Operation Summary. (line 6)
+* atime-preserve: Attributes. (line 10)
+* atime-preserve, summary: Option Summary. (line 25)
+* auto-compress: gzip. (line 150)
+* auto-compress, summary: Option Summary. (line 71)
+* backup: backup. (line 41)
+* backup, summary: Option Summary. (line 78)
+* block-number: verbose. (line 112)
+* block-number, summary: Option Summary. (line 84)
+* blocking-factor: Blocking Factor. (line 8)
+* blocking-factor, summary: Option Summary. (line 91)
+* bzip2, summary: Option Summary. (line 97)
+* catenate: concatenate. (line 6)
+* catenate, summary: Operation Summary. (line 11)
+* check-device, described: Incremental Dumps. (line 107)
+* check-device, summary: Option Summary. (line 103)
+* check-links, described: hard links. (line 31)
+* check-links, summary: Option Summary. (line 155)
+* checkpoint: checkpoints. (line 6)
+* checkpoint, defined: checkpoints. (line 13)
+* checkpoint, summary: Option Summary. (line 108)
+* checkpoint-action: checkpoints. (line 6)
+* checkpoint-action, defined: checkpoints. (line 22)
+* checkpoint-action, summary: Option Summary. (line 117)
+* clamp-mtime, summary: Option Summary. (line 172)
+* compare: compare. (line 6)
+* compare, summary: Operation Summary. (line 16)
+* compress: gzip. (line 113)
+* compress, summary: Option Summary. (line 164)
+* concatenate: concatenate. (line 6)
+* concatenate, summary: Operation Summary. (line 23)
+* confirmation, summary: Option Summary. (line 176)
+* create, additional options: create options. (line 6)
+* create, complementary notes: Basic tar. (line 11)
+* create, introduced: Creating the archive.
+ (line 6)
+* create, summary: Operation Summary. (line 29)
+* create, using with '--verbose': create verbose. (line 6)
+* create, using with '--verify': verify. (line 24)
+* delay-directory-restore: Directory Modification Times and Permissions.
+ (line 62)
+* delay-directory-restore, summary: Option Summary. (line 180)
+* delete: delete. (line 6)
+* delete, summary: Operation Summary. (line 34)
+* delete, using before -append: append. (line 47)
+* dereference: dereference. (line 6)
+* dereference, summary: Option Summary. (line 186)
+* diff, summary: Operation Summary. (line 39)
+* directory: directory. (line 11)
+* directory, summary: Option Summary. (line 193)
+* exclude: exclude. (line 6)
+* exclude <1>: exclude. (line 9)
+* exclude, potential problems with: problems with exclude.
+ (line 6)
+* exclude, summary: Option Summary. (line 201)
+* exclude-backups: exclude. (line 114)
+* exclude-backups, summary: Option Summary. (line 206)
+* exclude-caches: exclude. (line 134)
+* exclude-caches, summary: Option Summary. (line 215)
+* exclude-caches-all: exclude. (line 142)
+* exclude-caches-all, summary: Option Summary. (line 230)
+* exclude-caches-under: exclude. (line 138)
+* exclude-caches-under, summary: Option Summary. (line 223)
+* exclude-from: exclude. (line 6)
+* exclude-from <1>: exclude. (line 20)
+* exclude-from, summary: Option Summary. (line 209)
+* exclude-ignore: exclude. (line 76)
+* exclude-ignore, summary: Option Summary. (line 235)
+* exclude-ignore-recursive: exclude. (line 81)
+* exclude-ignore-recursive, summary: Option Summary. (line 240)
+* exclude-tag: exclude. (line 151)
+* exclude-tag, summary: Option Summary. (line 245)
+* exclude-tag-all: exclude. (line 159)
+* exclude-tag-all, summary: Option Summary. (line 257)
+* exclude-tag-under: exclude. (line 155)
+* exclude-tag-under, summary: Option Summary. (line 251)
+* exclude-vcs: exclude. (line 85)
+* exclude-vcs, summary: Option Summary. (line 262)
+* exclude-vcs-ignores: exclude. (line 42)
+* exclude-vcs-ignores, summary: Option Summary. (line 269)
+* extract: extract. (line 6)
+* extract, additional options: extract options. (line 6)
+* extract, complementary notes: Basic tar. (line 49)
+* extract, summary: Operation Summary. (line 44)
+* extract, using with '--listed-incremental': Incremental Dumps.
+ (line 120)
+* file: file. (line 6)
+* file, short description: file. (line 15)
+* file, summary: Option Summary. (line 277)
+* file, tutorial: file tutorial. (line 6)
+* files-from: files. (line 14)
+* files-from, summary: Option Summary. (line 284)
+* force-local, short description: Device. (line 70)
+* force-local, summary: Option Summary. (line 291)
+* format, summary: Option Summary. (line 297)
+* full-time, summary: Option Summary. (line 322)
+* get, summary: Operation Summary. (line 50)
+* group: override. (line 99)
+* group, summary: Option Summary. (line 340)
+* group-map, summary: Option Summary. (line 350)
+* gunzip, summary: Option Summary. (line 360)
+* gzip: gzip. (line 91)
+* gzip, summary: Option Summary. (line 360)
+* hard-dereference, described: hard links. (line 59)
+* hard-dereference, summary: Option Summary. (line 369)
+* help: help tutorial. (line 6)
+* help, introduction: help. (line 26)
+* help, summary: Option Summary. (line 375)
+* hole-detection: sparse. (line 66)
+* hole-detection, summary: Option Summary. (line 381)
+* ignore-case: controlling pattern-matching.
+ (line 85)
+* ignore-case, summary: Option Summary. (line 386)
+* ignore-command-error: Writing to an External Program.
+ (line 111)
+* ignore-command-error, summary: Option Summary. (line 390)
+* ignore-failed-read: Ignore Failed Read. (line 7)
+* ignore-failed-read, summary: Option Summary. (line 394)
+* ignore-zeros: Ignore Zeros. (line 6)
+* ignore-zeros, short description: Blocking Factor. (line 152)
+* ignore-zeros, summary: Option Summary. (line 399)
+* incremental, summary: Option Summary. (line 405)
+* incremental, using with '--list': Incremental Dumps. (line 185)
+* index-file, summary: Option Summary. (line 413)
+* info-script: Multi-Volume Archives.
+ (line 83)
+* info-script, short description: Device. (line 121)
+* info-script, summary: Option Summary. (line 417)
+* interactive: interactive. (line 14)
+* interactive, summary: Option Summary. (line 426)
+* keep-directory-symlink, summary: Option Summary. (line 434)
+* keep-newer-files: Keep Newer Files. (line 6)
+* keep-newer-files, summary: Option Summary. (line 448)
+* keep-old-files: Keep Old Files. (line 9)
+* keep-old-files, introduced: Dealing with Old Files.
+ (line 16)
+* keep-old-files, summary: Option Summary. (line 453)
+* label: Tape Files. (line 6)
+* label <1>: label. (line 6)
+* label, summary: Option Summary. (line 462)
+* level, described: Incremental Dumps. (line 75)
+* level, summary: Option Summary. (line 470)
+* list: list. (line 6)
+* list, summary: Operation Summary. (line 55)
+* list, using with '--incremental': Incremental Dumps. (line 185)
+* list, using with '--listed-incremental': Incremental Dumps.
+ (line 185)
+* list, using with '--verbose': list. (line 34)
+* list, using with file name arguments: list. (line 25)
+* listed-incremental, described: Incremental Dumps. (line 14)
+* listed-incremental, summary: Option Summary. (line 480)
+* listed-incremental, using with '--extract': Incremental Dumps.
+ (line 120)
+* listed-incremental, using with '--list': Incremental Dumps.
+ (line 185)
+* lzip: gzip. (line 104)
+* lzip, summary: Option Summary. (line 489)
+* lzma: gzip. (line 107)
+* lzma, summary: Option Summary. (line 494)
+* lzop: gzip. (line 110)
+* mode: override. (line 14)
+* mode, summary: Option Summary. (line 504)
+* mtime: override. (line 30)
+* mtime, summary: Option Summary. (line 511)
+* multi-volume: Multi-Volume Archives.
+ (line 6)
+* multi-volume, short description: Device. (line 88)
+* multi-volume, summary: Option Summary. (line 526)
+* new-volume-script: Multi-Volume Archives.
+ (line 83)
+* new-volume-script, short description: Device. (line 121)
+* new-volume-script, summary: Option Summary. (line 417)
+* new-volume-script, summary <1>: Option Summary. (line 532)
+* newer: after. (line 24)
+* newer, summary: Option Summary. (line 536)
+* newer-mtime: after. (line 35)
+* newer-mtime, summary: Option Summary. (line 545)
+* no-acls, summary: Option Summary. (line 551)
+* no-anchored: controlling pattern-matching.
+ (line 78)
+* no-anchored, summary: Option Summary. (line 555)
+* no-auto-compress, summary: Option Summary. (line 559)
+* no-check-device, described: Incremental Dumps. (line 103)
+* no-check-device, summary: Option Summary. (line 564)
+* no-delay-directory-restore: Directory Modification Times and Permissions.
+ (line 68)
+* no-delay-directory-restore, summary: Option Summary. (line 569)
+* no-ignore-case: controlling pattern-matching.
+ (line 85)
+* no-ignore-case, summary: Option Summary. (line 575)
+* no-ignore-command-error: Writing to an External Program.
+ (line 116)
+* no-ignore-command-error, summary: Option Summary. (line 578)
+* no-null, described: nul. (line 15)
+* no-null, summary: Option Summary. (line 582)
+* no-overwrite-dir, summary: Option Summary. (line 588)
+* no-quote-chars, summary: Option Summary. (line 593)
+* no-recursion: recurse. (line 11)
+* no-recursion, summary: Option Summary. (line 598)
+* no-same-owner: Attributes. (line 63)
+* no-same-owner, summary: Option Summary. (line 603)
+* no-same-permissions, summary: Option Summary. (line 610)
+* no-seek, summary: Option Summary. (line 616)
+* no-selinux, summary: Option Summary. (line 622)
+* no-unquote: Selecting Archive Members.
+ (line 42)
+* no-unquote, summary: Option Summary. (line 626)
+* no-verbatim-files-from: files. (line 75)
+* no-verbatim-files-from, summary: Option Summary. (line 630)
+* no-wildcards: controlling pattern-matching.
+ (line 41)
+* no-wildcards, summary: Option Summary. (line 644)
+* no-wildcards-match-slash: controlling pattern-matching.
+ (line 91)
+* no-wildcards-match-slash, summary: Option Summary. (line 647)
+* no-xattrs, summary: Option Summary. (line 650)
+* null, described: nul. (line 11)
+* null, summary: Option Summary. (line 654)
+* numeric-owner: Attributes. (line 69)
+* numeric-owner, summary: Option Summary. (line 667)
+* occurrence, described: append. (line 34)
+* occurrence, summary: Option Summary. (line 685)
+* old-archive, summary: Option Summary. (line 700)
+* one-file-system: one. (line 14)
+* one-file-system, summary: Option Summary. (line 703)
+* one-top-level, summary: Option Summary. (line 708)
+* overwrite: Overwrite Old Files.
+ (line 6)
+* overwrite, introduced: Dealing with Old Files.
+ (line 32)
+* overwrite, summary: Option Summary. (line 719)
+* overwrite-dir: Overwrite Old Files.
+ (line 28)
+* overwrite-dir, introduced: Dealing with Old Files.
+ (line 6)
+* overwrite-dir, summary: Option Summary. (line 724)
+* owner: override. (line 67)
+* owner, summary: Option Summary. (line 729)
+* owner-map, summary: Option Summary. (line 739)
+* pax-option: PAX keywords. (line 6)
+* pax-option, summary: Option Summary. (line 749)
+* portability, summary: Option Summary. (line 755)
+* posix, summary: Option Summary. (line 759)
+* preserve-order: Same Order. (line 6)
+* preserve-order, summary: Option Summary. (line 762)
+* preserve-permissions: Setting Access Permissions.
+ (line 10)
+* preserve-permissions, short description: Attributes. (line 109)
+* preserve-permissions, summary: Option Summary. (line 766)
+* quote-chars, summary: Option Summary. (line 777)
+* quoting-style: quoting styles. (line 38)
+* quoting-style, summary: Option Summary. (line 781)
+* read-full-records: Reading. (line 6)
+* read-full-records <1>: read full records. (line 6)
+* read-full-records, short description: Blocking Factor. (line 168)
+* read-full-records, summary: Option Summary. (line 788)
+* record-size, summary: Option Summary. (line 794)
+* recursion: recurse. (line 22)
+* recursion, summary: Option Summary. (line 802)
+* recursive-unlink: Recursive Unlink. (line 6)
+* recursive-unlink, summary: Option Summary. (line 807)
+* remove-files: remove files. (line 6)
+* remove-files, summary: Option Summary. (line 812)
+* restrict, summary: Option Summary. (line 817)
+* rmt-command, summary: Option Summary. (line 823)
+* rsh-command: Device. (line 73)
+* rsh-command, summary: Option Summary. (line 828)
+* same-order: Same Order. (line 6)
+* same-order, summary: Option Summary. (line 833)
+* same-owner: Attributes. (line 44)
+* same-owner, summary: Option Summary. (line 842)
+* same-permissions: Setting Access Permissions.
+ (line 10)
+* same-permissions, short description: Attributes. (line 109)
+* same-permissions, summary: Option Summary. (line 766)
+* same-permissions, summary <1>: Option Summary. (line 849)
+* seek, summary: Option Summary. (line 853)
+* selinux, summary: Option Summary. (line 863)
+* show-defaults: defaults. (line 6)
+* show-defaults, summary: Option Summary. (line 867)
+* show-omitted-dirs: verbose. (line 105)
+* show-omitted-dirs, summary: Option Summary. (line 880)
+* show-snapshot-field-ranges: Snapshot Files. (line 111)
+* show-snapshot-field-ranges, summary: Option Summary. (line 885)
+* show-stored-names: list. (line 68)
+* show-stored-names, summary: Option Summary. (line 891)
+* show-transformed-names: transform. (line 45)
+* show-transformed-names, summary: Option Summary. (line 891)
+* skip-old-files, introduced: Dealing with Old Files.
+ (line 28)
+* skip-old-files, summary: Option Summary. (line 900)
+* sort, summary: Option Summary. (line 913)
+* sparse: sparse. (line 24)
+* sparse, summary: Option Summary. (line 930)
+* sparse-version: sparse. (line 59)
+* sparse-version, summary: Option Summary. (line 936)
+* starting-file: Starting File. (line 6)
+* starting-file, summary: Option Summary. (line 942)
+* strip-components: transform. (line 25)
+* strip-components, summary: Option Summary. (line 949)
+* suffix: backup. (line 67)
+* suffix, summary: Option Summary. (line 960)
+* tape-length: Multi-Volume Archives.
+ (line 33)
+* tape-length, short description: Device. (line 96)
+* tape-length, summary: Option Summary. (line 965)
+* test-label: label. (line 35)
+* test-label, summary: Option Summary. (line 976)
+* to-command: Writing to an External Program.
+ (line 9)
+* to-command, summary: Option Summary. (line 981)
+* to-stdout: Writing to Standard Output.
+ (line 14)
+* to-stdout, summary: Option Summary. (line 986)
+* totals: verbose. (line 45)
+* totals, summary: Option Summary. (line 992)
+* touch: Data Modification Times.
+ (line 15)
+* touch <1>: Attributes. (line 33)
+* touch, summary: Option Summary. (line 998)
+* transform: transform. (line 74)
+* transform, summary: Option Summary. (line 1005)
+* uncompress: gzip. (line 113)
+* uncompress, summary: Option Summary. (line 164)
+* uncompress, summary <1>: Option Summary. (line 1019)
+* ungzip: gzip. (line 91)
+* ungzip, summary: Option Summary. (line 360)
+* ungzip, summary <1>: Option Summary. (line 1023)
+* unlink-first: Unlink First. (line 6)
+* unlink-first, introduced: Dealing with Old Files.
+ (line 51)
+* unlink-first, summary: Option Summary. (line 1027)
+* unquote: Selecting Archive Members.
+ (line 39)
+* unquote, summary: Option Summary. (line 1033)
+* update: update. (line 6)
+* update <1>: how to update. (line 6)
+* update, summary: Operation Summary. (line 60)
+* usage: help. (line 53)
+* use-compress-program: gzip. (line 172)
+* use-compress-program, summary: Option Summary. (line 1037)
+* utc, summary: Option Summary. (line 1043)
+* verbatim-files-from: files. (line 70)
+* verbatim-files-from, summary: Option Summary. (line 1048)
+* verbose: verbose. (line 18)
+* verbose, introduced: verbose tutorial. (line 6)
+* verbose, summary: Option Summary. (line 1070)
+* verbose, using with '--create': create verbose. (line 6)
+* verbose, using with '--list': list. (line 34)
+* verify, short description: verify. (line 8)
+* verify, summary: Option Summary. (line 1078)
+* verify, using with '--create': verify. (line 24)
+* version: help. (line 6)
+* version, summary: Option Summary. (line 1084)
+* volno-file: Multi-Volume Archives.
+ (line 74)
+* volno-file, summary: Option Summary. (line 1090)
+* warning, explained: warnings. (line 12)
+* warning, summary: Option Summary. (line 1096)
+* wildcards: controlling pattern-matching.
+ (line 38)
+* wildcards, summary: Option Summary. (line 1102)
+* wildcards-match-slash: controlling pattern-matching.
+ (line 91)
+* wildcards-match-slash, summary: Option Summary. (line 1106)
+* xattrs, summary: Option Summary. (line 1109)
+* xattrs-exclude, summary: Option Summary. (line 1113)
+* xattrs-include, summary: Option Summary. (line 1117)
+* xform: transform. (line 74)
+* xform, summary: Option Summary. (line 1005)
+* xz: gzip. (line 96)
+* xz, summary: Option Summary. (line 1123)
+
+
+File: tar.info, Node: Index, Prev: Index of Command Line Options, Up: Top
+
+Appendix I Index
+****************
+
+
+* Menu:
+
+* '%s: Directory has been renamed from %s', warning message: warnings.
+ (line 96)
+* '%s: Directory has been renamed', warning message: warnings.
+ (line 96)
+* '%s: Directory is new', warning message: warnings. (line 98)
+* '%s: directory is on a different device: not purging', warning message: warnings.
+ (line 100)
+* '%s: skipping existing file', warning message: warnings. (line 62)
+* -after-date and -update compared: after. (line 19)
+* -newer-mtime and -update compared: after. (line 19)
+* -quite, option: Generate Mode. (line 120)
+* .bzrignore: exclude. (line 63)
+* .cvsignore: exclude. (line 50)
+* .gitignore: exclude. (line 55)
+* .hgignore: exclude. (line 70)
+* 'A lone zero block at', warning message: warnings. (line 33)
+* abbreviations for months: Calendar date items. (line 38)
+* absolute file names: absolute. (line 6)
+* absolute file names <1>: Remote Tape Server. (line 17)
+* Adding archives to an archive: concatenate. (line 6)
+* Adding files to an Archive: appending files. (line 6)
+* ADMINISTRATOR: General-Purpose Variables.
+ (line 6)
+* Age, excluding files by: after. (line 6)
+* ago in date strings: Relative items in date strings.
+ (line 23)
+* all: warnings. (line 28)
+* alone-zero-block: warnings. (line 33)
+* alternative decompression programs: gzip. (line 54)
+* am in date strings: Time of day items. (line 21)
+* Appending files to an Archive: appending files. (line 6)
+* appending files to existing archive: append. (line 6)
+* Arch, excluding files: exclude. (line 85)
+* archive: Definitions. (line 6)
+* Archive creation: file. (line 34)
+* archive member: Definitions. (line 15)
+* Archive Name: file. (line 6)
+* Archive, creation of: create. (line 6)
+* Archives, Appending files to: appending files. (line 6)
+* archives, binary equivalent: PAX keywords. (line 136)
+* Archiving Directories: create dir. (line 6)
+* archiving files: Top. (line 23)
+* ARGP_HELP_FMT, environment variable: Configuring Help Summary.
+ (line 21)
+* arguments to long options: Long Options. (line 31)
+* arguments to old options: Old Options. (line 26)
+* arguments to short options: Short Options. (line 13)
+* 'Attempting extraction of symbolic links as hard links', warning message: warnings.
+ (line 68)
+* attributes, files: Attributes. (line 6)
+* authors of 'parse_datetime': Authors of parse_datetime.
+ (line 6)
+* Avoiding recursion in directories: recurse. (line 6)
+* backup options: backup. (line 6)
+* backup suffix: backup. (line 67)
+* backups: backup. (line 41)
+* backups <1>: Backups. (line 6)
+* BACKUP_DIRS: General-Purpose Variables.
+ (line 30)
+* BACKUP_FILES: General-Purpose Variables.
+ (line 58)
+* BACKUP_HOUR: General-Purpose Variables.
+ (line 10)
+* bad-dumpdir: warnings. (line 102)
+* basic operations: Operations. (line 6)
+* Bazaar, excluding files: exclude. (line 85)
+* Bazaar, ignore files: exclude. (line 37)
+* beginning of time, for POSIX: Seconds since the Epoch.
+ (line 13)
+* 'bell', checkpoint action: checkpoints. (line 106)
+* Bellovin, Steven M.: Authors of parse_datetime.
+ (line 6)
+* Berets, Jim: Authors of parse_datetime.
+ (line 6)
+* Berry, K.: Authors of parse_datetime.
+ (line 19)
+* binary equivalent archives, creating: PAX keywords. (line 136)
+* block: Blocking. (line 6)
+* Block number where error occurred: verbose. (line 112)
+* BLOCKING: General-Purpose Variables.
+ (line 25)
+* Blocking Factor: Blocking Factor. (line 6)
+* blocking factor: Blocking Factor. (line 189)
+* Blocks per record: Blocking Factor. (line 6)
+* bug reports: Reports. (line 6)
+* Bytes per record: Blocking Factor. (line 6)
+* bzip2: gzip. (line 6)
+* cachedir: warnings. (line 40)
+* calendar date item: Calendar date items. (line 6)
+* case, ignored in dates: General date syntax. (line 60)
+* 'cat' vs 'concatenate': concatenate. (line 63)
+* Changing directory mid-stream: directory. (line 6)
+* Character class, excluding characters from: wildcards. (line 34)
+* checkpoints, defined: checkpoints. (line 6)
+* Choosing an archive file: file. (line 6)
+* combined date and time of day item: Combined date and time of day items.
+ (line 6)
+* comments, in dates: General date syntax. (line 60)
+* compress: gzip. (line 6)
+* Compressed archives: gzip. (line 6)
+* 'concatenate' vs 'cat': concatenate. (line 63)
+* Concatenating Archives: concatenate. (line 6)
+* 'contains a cache directory tag', warning message: warnings.
+ (line 40)
+* contiguous-cast: warnings. (line 66)
+* corrupted archives: Full Dumps. (line 8)
+* corrupted archives <1>: gzip. (line 140)
+* Creation of the archive: create. (line 6)
+* 'Current %s is newer or same age', warning message: warnings.
+ (line 72)
+* CVS, excluding files: exclude. (line 85)
+* CVS, ignore files: exclude. (line 37)
+* Darcs, excluding files: exclude. (line 85)
+* DAT blocking: Blocking Factor. (line 199)
+* Data Modification time, excluding files by: after. (line 6)
+* Data modification times of extracted files: Data Modification Times.
+ (line 6)
+* date and time of day format, ISO 8601: Combined date and time of day items.
+ (line 6)
+* date format, ISO 8601: Calendar date items. (line 30)
+* date input formats: Date input formats. (line 6)
+* day in date strings: Relative items in date strings.
+ (line 15)
+* day in date strings <1>: Relative items in date strings.
+ (line 29)
+* day of week item: Day of week items. (line 6)
+* decompress-program: warnings. (line 76)
+* Deleting files from an archive: delete. (line 6)
+* Deleting from tape archives: delete. (line 17)
+* dereferencing hard links: hard links. (line 6)
+* Descending directories, avoiding: recurse. (line 6)
+* Device numbers, changing: Fixing Snapshot Files.
+ (line 6)
+* Device numbers, using in incremental backups: Incremental Dumps.
+ (line 89)
+* Directories, Archiving: create dir. (line 6)
+* Directories, avoiding recursion: recurse. (line 6)
+* Directory, changing mid-stream: directory. (line 6)
+* DIRLIST: General-Purpose Variables.
+ (line 53)
+* displacement of dates: Relative items in date strings.
+ (line 6)
+* doc-opt-col: Configuring Help Summary.
+ (line 95)
+* 'door ignored', warning message: warnings. (line 45)
+* 'dot', checkpoint action: checkpoints. (line 130)
+* Double-checking a write operation: verify. (line 6)
+* dumps, full: Full Dumps. (line 8)
+* DUMP_BEGIN: User Hooks. (line 31)
+* DUMP_END: User Hooks. (line 35)
+* DUMP_REMIND_SCRIPT: General-Purpose Variables.
+ (line 112)
+* dup-args: Configuring Help Summary.
+ (line 52)
+* dup-args-note: Configuring Help Summary.
+ (line 69)
+* 'echo', checkpoint action: checkpoints. (line 25)
+* Eggert, Paul: Authors of parse_datetime.
+ (line 6)
+* End-of-archive blocks, ignoring: Ignore Zeros. (line 6)
+* End-of-archive info script: Multi-Volume Archives.
+ (line 83)
+* entry: Naming tar Archives. (line 11)
+* epoch, for POSIX: Seconds since the Epoch.
+ (line 13)
+* Error message, block number of: verbose. (line 122)
+* Exabyte blocking: Blocking Factor. (line 199)
+* exclude: exclude. (line 12)
+* exclude-caches: exclude. (line 122)
+* exclude-from: exclude. (line 25)
+* exclude-tag: exclude. (line 145)
+* Excluding characters from a character class: wildcards. (line 34)
+* Excluding file by age: after. (line 6)
+* Excluding files by file system: exclude. (line 6)
+* Excluding files by name and pattern: exclude. (line 6)
+* Exec Mode, 'genfile': Exec Mode. (line 6)
+* 'exec', checkpoint action: checkpoints. (line 151)
+* existing backup method: backup. (line 59)
+* existing-file: warnings. (line 62)
+* exit status: Synopsis. (line 67)
+* 'Extracting contiguous files as regular files', warning message: warnings.
+ (line 66)
+* extracting Nth copy of the file: append. (line 34)
+* extraction: Definitions. (line 22)
+* Extraction: extract. (line 6)
+* file archival: Top. (line 23)
+* file attributes: Attributes. (line 6)
+* 'file changed as we read it', warning message: warnings. (line 55)
+* 'file is on a different filesystem', warning message: warnings.
+ (line 43)
+* 'file is the archive; not dumped', warning message: warnings.
+ (line 51)
+* 'file is the archive; not dumped', warning message <1>: warnings.
+ (line 51)
+* 'file is unchanged; not dumped', warning message: warnings. (line 49)
+* File lists separated by NUL characters: Generate Mode. (line 33)
+* file name: Definitions. (line 15)
+* File Name arguments, alternatives: files. (line 6)
+* File name arguments, using '--list' with: list. (line 25)
+* 'file name read contains nul character', warning message: warnings.
+ (line 31)
+* file names, absolute: absolute. (line 6)
+* File names, excluding files by: exclude. (line 6)
+* File names, terminated by 'NUL': nul. (line 6)
+* File names, using hard links: hard links. (line 6)
+* File names, using symbolic links: dereference. (line 6)
+* 'File removed before we read it', warning message: warnings.
+ (line 53)
+* 'File shrank by %s bytes', warning message: warnings. (line 41)
+* File system boundaries, not crossing: one. (line 6)
+* file-changed: warnings. (line 55)
+* file-ignored: warnings. (line 45)
+* file-removed: warnings. (line 53)
+* file-shrank: warnings. (line 41)
+* file-unchanged: warnings. (line 49)
+* FILELIST: General-Purpose Variables.
+ (line 69)
+* filename-with-nuls: warnings. (line 31)
+* 'find', using with 'tar': files. (line 6)
+* 'find', using with 'tar' <1>: recurse. (line 11)
+* first in date strings: General date syntax. (line 22)
+* format 0, snapshot file: Snapshot Files. (line 24)
+* format 1, snapshot file: Snapshot Files. (line 51)
+* format 2, snapshot file: Snapshot Files. (line 73)
+* Format Options: Format Variations. (line 6)
+* Format Parameters: Format Variations. (line 6)
+* Format, old style: old. (line 6)
+* fortnight in date strings: Relative items in date strings.
+ (line 15)
+* free documentation: Free Software Needs Free Documentation.
+ (line 6)
+* full dumps: Full Dumps. (line 8)
+* future time stamps: Large or Negative Values.
+ (line 6)
+* general date syntax: General date syntax. (line 6)
+* Generate Mode, 'genfile': Generate Mode. (line 6)
+* genfile: Genfile. (line 6)
+* 'genfile', create file: Generate Mode. (line 6)
+* 'genfile', creating sparse files: Generate Mode. (line 55)
+* 'genfile', generate mode: Generate Mode. (line 6)
+* 'genfile', reading a list of file names: Generate Mode. (line 22)
+* 'genfile', seeking to a given offset: Generate Mode. (line 18)
+* Getting program version number: help. (line 6)
+* git, excluding files: exclude. (line 85)
+* Git, ignore files: exclude. (line 37)
+* GNU archive format: gnu. (line 6)
+* GNU.sparse.major, extended header variable: PAX 1. (line 14)
+* GNU.sparse.map, extended header variable: PAX 0. (line 59)
+* GNU.sparse.minor, extended header variable: PAX 1. (line 17)
+* GNU.sparse.name, extended header variable: PAX 0. (line 67)
+* GNU.sparse.name, extended header variable, in v.1.0: PAX 1. (line 24)
+* GNU.sparse.numblocks, extended header variable: PAX 0. (line 14)
+* GNU.sparse.numbytes, extended header variable: PAX 0. (line 20)
+* GNU.sparse.offset, extended header variable: PAX 0. (line 17)
+* GNU.sparse.realsize, extended header variable: PAX 1. (line 24)
+* GNU.sparse.size, extended header variable: PAX 0. (line 10)
+* gnupg, using with tar: gzip. (line 196)
+* gpg, using with tar: gzip. (line 196)
+* gzip: gzip. (line 6)
+* hard links, dereferencing: hard links. (line 6)
+* header-col: Configuring Help Summary.
+ (line 141)
+* hole detection: sparse. (line 66)
+* hook: User Hooks. (line 12)
+* hour in date strings: Relative items in date strings.
+ (line 15)
+* ignore-archive: warnings. (line 51)
+* ignore-archive <1>: warnings. (line 51)
+* ignore-newer: warnings. (line 72)
+* Ignoring end-of-archive blocks: Ignore Zeros. (line 6)
+* 'Ignoring unknown extended header keyword '%s'', warning message: warnings.
+ (line 74)
+* 'implausibly old time stamp %s', warning message: warnings. (line 63)
+* Info script: Multi-Volume Archives.
+ (line 83)
+* Interactive operation: interactive. (line 6)
+* ISO 8601 date and time of day format: Combined date and time of day items.
+ (line 6)
+* ISO 8601 date format: Calendar date items. (line 30)
+* items in date strings: General date syntax. (line 6)
+* Labeling an archive: label. (line 6)
+* labeling archives: Tape Files. (line 6)
+* Labeling multi-volume archives: label. (line 6)
+* Labels on the archive media: label. (line 6)
+* language, in dates: General date syntax. (line 36)
+* language, in dates <1>: General date syntax. (line 40)
+* Large lists of file names on small machines: Same Order. (line 6)
+* large values: Large or Negative Values.
+ (line 6)
+* last DAY: Day of week items. (line 15)
+* last in date strings: General date syntax. (line 22)
+* Laszlo Ersek: lbzip2. (line 6)
+* lbzip2: lbzip2. (line 6)
+* leap seconds: General date syntax. (line 65)
+* leap seconds <1>: Time of day items. (line 14)
+* leap seconds <2>: Seconds since the Epoch.
+ (line 26)
+* Listing all 'tar' options: help. (line 26)
+* listing member and file names: list. (line 45)
+* Listing volume label: label. (line 27)
+* Lists of file names: files. (line 6)
+* Local and remote archives: file. (line 70)
+* long options: Long Options. (line 6)
+* long options with mandatory arguments: Long Options. (line 31)
+* long options with optional arguments: Long Options. (line 39)
+* long-opt-col: Configuring Help Summary.
+ (line 87)
+* lzip: gzip. (line 6)
+* lzma: gzip. (line 6)
+* lzop: gzip. (line 6)
+* MacKenzie, David: Authors of parse_datetime.
+ (line 6)
+* 'Malformed dumpdir: 'X' never used', warning message: warnings.
+ (line 102)
+* member: Definitions. (line 15)
+* member name: Definitions. (line 15)
+* members, multiple: multiple. (line 6)
+* Members, replacing with other members: append. (line 47)
+* Mercurial, excluding files: exclude. (line 85)
+* Mercurial, ignore files: exclude. (line 37)
+* Meyering, Jim: Authors of parse_datetime.
+ (line 6)
+* Middle of the archive, starting in the: Starting File. (line 11)
+* midnight in date strings: Time of day items. (line 21)
+* minute in date strings: Relative items in date strings.
+ (line 15)
+* minutes, time zone correction by: Time of day items. (line 29)
+* Modes of extracted files: Setting Access Permissions.
+ (line 6)
+* Modification time, excluding files by: after. (line 6)
+* Modification times of extracted files: Data Modification Times.
+ (line 6)
+* month in date strings: Relative items in date strings.
+ (line 15)
+* month names in date strings: Calendar date items. (line 38)
+* months, written-out: General date syntax. (line 32)
+* MT: General-Purpose Variables.
+ (line 74)
+* MT_BEGIN: Magnetic Tape Control.
+ (line 10)
+* MT_OFFLINE: Magnetic Tape Control.
+ (line 30)
+* MT_REWIND: Magnetic Tape Control.
+ (line 20)
+* MT_STATUS: Magnetic Tape Control.
+ (line 40)
+* Multi-volume archives: Multi-Volume Archives.
+ (line 6)
+* Multi-volume archives in PAX format, extracting using non-GNU tars: Split Recovery.
+ (line 17)
+* Multi-volume archives, extracting using non-GNU tars: Split Recovery.
+ (line 6)
+* multiple members: multiple. (line 6)
+* Naming an archive: file. (line 6)
+* negative time stamps: Large or Negative Values.
+ (line 6)
+* new-directory: warnings. (line 98)
+* next DAY: Day of week items. (line 15)
+* next in date strings: General date syntax. (line 22)
+* none: warnings. (line 29)
+* noon in date strings: Time of day items. (line 21)
+* now in date strings: Relative items in date strings.
+ (line 33)
+* ntape device: Many. (line 6)
+* 'NUL'-terminated file names: nul. (line 6)
+* Number of blocks per record: Blocking Factor. (line 6)
+* Number of bytes per record: Blocking Factor. (line 6)
+* numbered backup method: backup. (line 55)
+* numbers, written-out: General date syntax. (line 22)
+* Obtaining help: help. (line 26)
+* Obtaining total status information: verbose. (line 45)
+* Old GNU archive format: gnu. (line 6)
+* Old GNU sparse format: Old GNU Format. (line 6)
+* old option style: Old Options. (line 6)
+* old options with mandatory arguments: Old Options. (line 26)
+* Old style archives: old. (line 6)
+* Old style format: old. (line 6)
+* opt-doc-col: Configuring Help Summary.
+ (line 127)
+* option syntax, traditional: Old Options. (line 6)
+* optional arguments to long options: Long Options. (line 39)
+* optional arguments to short options: Short Options. (line 22)
+* options for use with '--extract': extract options. (line 6)
+* Options when reading archives: Reading. (line 6)
+* Options, archive format specifying: Format Variations. (line 6)
+* Options, format specifying: Format Variations. (line 6)
+* options, GNU style: Long Options. (line 6)
+* options, long style: Long Options. (line 6)
+* options, mixing different styles: Mixing. (line 6)
+* options, mnemonic names: Long Options. (line 6)
+* options, old style: Old Options. (line 6)
+* options, short style: Short Options. (line 6)
+* options, traditional: Short Options. (line 6)
+* ordinal numbers: General date syntax. (line 22)
+* Overwriting old files, prevention: Dealing with Old Files.
+ (line 16)
+* parse_datetime: Date input formats. (line 6)
+* pattern, 'genfile': Generate Mode. (line 39)
+* PAX archive format: posix. (line 6)
+* Permissions of extracted files: Setting Access Permissions.
+ (line 6)
+* Pinard, F.: Authors of parse_datetime.
+ (line 19)
+* pm in date strings: Time of day items. (line 21)
+* POSIX archive format: posix. (line 6)
+* Progress information: verbose. (line 82)
+* Protecting old files: Dealing with Old Files.
+ (line 36)
+* pure numbers in date strings: Pure numbers in date strings.
+ (line 6)
+* RCS, excluding files: exclude. (line 85)
+* Reading file names from a file: files. (line 6)
+* Reading incomplete records: Reading. (line 6)
+* record: Blocking. (line 6)
+* Record Size: Blocking Factor. (line 6)
+* 'Record size = %lu blocks', warning message: warnings. (line 89)
+* record-size: warnings. (line 89)
+* Records, incomplete: Reading. (line 6)
+* Recursion in directories, avoiding: recurse. (line 6)
+* relative items in date strings: Relative items in date strings.
+ (line 6)
+* Remote devices: file. (line 60)
+* remote tape drive: Remote Tape Server. (line 6)
+* Removing files from an archive: delete. (line 6)
+* rename-directory: warnings. (line 96)
+* Replacing members with other members: append. (line 47)
+* reporting bugs: Reports. (line 6)
+* RESTORE_BEGIN: User Hooks. (line 38)
+* RESTORE_END: User Hooks. (line 41)
+* Resurrecting files from an archive: extract. (line 6)
+* Retrieving files from an archive: extract. (line 6)
+* return status: Synopsis. (line 67)
+* rmargin: Configuring Help Summary.
+ (line 159)
+* rmt: Remote Tape Server. (line 6)
+* RSH: General-Purpose Variables.
+ (line 78)
+* RSH_COMMAND: General-Purpose Variables.
+ (line 83)
+* Running out of space: Scarce. (line 8)
+* Salz, Rich: Authors of parse_datetime.
+ (line 6)
+* SCCS, excluding files: exclude. (line 85)
+* short options: Short Options. (line 6)
+* short options with mandatory arguments: Short Options. (line 13)
+* short options with optional arguments: Short Options. (line 22)
+* short-opt-col: Configuring Help Summary.
+ (line 79)
+* simple backup method: backup. (line 64)
+* SIMPLE_BACKUP_SUFFIX: backup. (line 67)
+* 'sleep', checkpoint action: checkpoints. (line 145)
+* SLEEP_MESSAGE: General-Purpose Variables.
+ (line 121)
+* SLEEP_TIME: General-Purpose Variables.
+ (line 106)
+* Small memory: Scarce. (line 8)
+* snapshot file field ranges: Snapshot Files. (line 111)
+* snapshot file, format 0: Snapshot Files. (line 24)
+* snapshot file, format 1: Snapshot Files. (line 51)
+* snapshot file, format 2: Snapshot Files. (line 73)
+* snapshot files, editing: Fixing Snapshot Files.
+ (line 6)
+* snapshot files, fixing device numbers: Fixing Snapshot Files.
+ (line 6)
+* 'socket ignored', warning message: warnings. (line 45)
+* Sparse Files: sparse. (line 6)
+* sparse files v.0.0, extracting with non-GNU tars: Sparse Recovery.
+ (line 92)
+* sparse files v.0.1, extracting with non-GNU tars: Sparse Recovery.
+ (line 92)
+* sparse files v.1.0, extracting with non-GNU tars: Sparse Recovery.
+ (line 17)
+* Sparse files, creating using 'genfile': Generate Mode. (line 55)
+* sparse files, extracting with non-GNU tars: Sparse Recovery.
+ (line 6)
+* sparse formats: Sparse Formats. (line 6)
+* sparse formats, defined: sparse. (line 52)
+* sparse formats, Old GNU: Old GNU Format. (line 6)
+* sparse formats, v.0.0: PAX 0. (line 6)
+* sparse formats, v.0.1: PAX 0. (line 51)
+* sparse formats, v.1.0: PAX 1. (line 6)
+* sparse versions: Sparse Formats. (line 6)
+* Specifying archive members: Selecting Archive Members.
+ (line 6)
+* Specifying files to act on: Selecting Archive Members.
+ (line 6)
+* Standard input and output: file. (line 39)
+* Standard output, writing extracted files to: Writing to Standard Output.
+ (line 6)
+* Storing archives in compressed format: gzip. (line 6)
+* SVN, excluding files: exclude. (line 85)
+* Symbolic link as file name: dereference. (line 6)
+* symlink-cast: warnings. (line 68)
+* TAPE: file tutorial. (line 14)
+* tape blocking: Blocking Factor. (line 189)
+* tape marks: Many. (line 43)
+* tape positioning: Many. (line 26)
+* Tapes, using '--delete' and: delete. (line 17)
+* TAPE_FILE: General-Purpose Variables.
+ (line 18)
+* tar: What tar Does. (line 6)
+* TAR: General-Purpose Variables.
+ (line 126)
+* tar archive: Definitions. (line 6)
+* Tar archive formats: Formats. (line 6)
+* tar entry: Naming tar Archives. (line 11)
+* tar file: Naming tar Archives. (line 11)
+* tar to a remote device: file. (line 60)
+* tar to standard input and output: file. (line 39)
+* tar-snapshot-edit: Fixing Snapshot Files.
+ (line 17)
+* tarcat: Tarcat. (line 6)
+* TAR_ARCHIVE, checkpoint script environment: checkpoints. (line 167)
+* TAR_ARCHIVE, info script environment variable: Multi-Volume Archives.
+ (line 105)
+* TAR_ARCHIVE, to-command environment: Writing to an External Program.
+ (line 79)
+* TAR_ATIME, to-command environment: Writing to an External Program.
+ (line 52)
+* TAR_BLOCKING_FACTOR, checkpoint script environment: checkpoints.
+ (line 170)
+* TAR_BLOCKING_FACTOR, info script environment variable: Multi-Volume Archives.
+ (line 108)
+* TAR_BLOCKING_FACTOR, to-command environment: Writing to an External Program.
+ (line 82)
+* TAR_CHECKPOINT, checkpoint script environment: checkpoints. (line 173)
+* TAR_CTIME, to-command environment: Writing to an External Program.
+ (line 61)
+* TAR_FD, info script environment variable: Multi-Volume Archives.
+ (line 122)
+* TAR_FILENAME, to-command environment: Writing to an External Program.
+ (line 40)
+* TAR_FILETYPE, to-command environment: Writing to an External Program.
+ (line 24)
+* TAR_FORMAT, checkpoint script environment: checkpoints. (line 180)
+* TAR_FORMAT, info script environment variable: Multi-Volume Archives.
+ (line 118)
+* TAR_FORMAT, to-command environment: Writing to an External Program.
+ (line 88)
+* TAR_GID, to-command environment: Writing to an External Program.
+ (line 70)
+* TAR_GNAME, to-command environment: Writing to an External Program.
+ (line 49)
+* TAR_MODE, to-command environment: Writing to an External Program.
+ (line 37)
+* TAR_MTIME, to-command environment: Writing to an External Program.
+ (line 58)
+* TAR_OPTIONS, environment variable: using tar options. (line 30)
+* TAR_REALNAME, to-command environment: Writing to an External Program.
+ (line 43)
+* TAR_SIZE, to-command environment: Writing to an External Program.
+ (line 64)
+* TAR_SUBCOMMAND, checkpoint script environment: checkpoints. (line 176)
+* TAR_SUBCOMMAND, info script environment variable: Multi-Volume Archives.
+ (line 114)
+* TAR_UID, to-command environment: Writing to an External Program.
+ (line 67)
+* TAR_UNAME, to-command environment: Writing to an External Program.
+ (line 46)
+* TAR_VERSION, checkpoint script environment: checkpoints. (line 164)
+* TAR_VERSION, info script environment variable: Multi-Volume Archives.
+ (line 102)
+* TAR_VERSION, to-command environment: Writing to an External Program.
+ (line 76)
+* TAR_VOLUME, info script environment variable: Multi-Volume Archives.
+ (line 111)
+* TAR_VOLUME, to-command environment: Writing to an External Program.
+ (line 85)
+* this in date strings: Relative items in date strings.
+ (line 33)
+* time of day item: Time of day items. (line 6)
+* 'time stamp %s is %s s in the future', warning message: warnings.
+ (line 63)
+* time zone correction: Time of day items. (line 29)
+* time zone item: General date syntax. (line 40)
+* time zone item <1>: Time zone items. (line 6)
+* timestamp: warnings. (line 63)
+* today in date strings: Relative items in date strings.
+ (line 33)
+* tomorrow in date strings: Relative items in date strings.
+ (line 29)
+* 'totals', checkpoint action: checkpoints. (line 140)
+* 'ttyout', checkpoint action: checkpoints. (line 111)
+* TZ: Specifying time zone rules.
+ (line 6)
+* Ultrix 3.1 and write failure: Remote Tape Server. (line 40)
+* 'Unknown file type '%c', extracted as normal file', warning message: warnings.
+ (line 70)
+* 'Unknown file type; file ignored', warning message: warnings.
+ (line 45)
+* unknown-cast: warnings. (line 70)
+* unknown-keyword: warnings. (line 74)
+* unpacking: Definitions. (line 22)
+* Updating an archive: update. (line 6)
+* usage-indent: Configuring Help Summary.
+ (line 155)
+* Using encrypted archives: gzip. (line 196)
+* ustar archive format: ustar. (line 6)
+* uuencode: Applications. (line 8)
+* v7 archive format: old. (line 6)
+* VCS, excluding files: exclude. (line 85)
+* VCS, excluding patterns from ignore files: exclude. (line 37)
+* VCS, ignore files: exclude. (line 37)
+* Verbose operation: verbose. (line 18)
+* Verifying a write operation: verify. (line 6)
+* Verifying the currency of an archive: compare. (line 6)
+* version control system, excluding files: exclude. (line 85)
+* Version of the 'tar' program: help. (line 6)
+* version-control Emacs variable: backup. (line 49)
+* VERSION_CONTROL: backup. (line 41)
+* volno file: Multi-Volume Archives.
+ (line 74)
+* VOLNO_FILE: General-Purpose Variables.
+ (line 89)
+* Volume label, listing: label. (line 27)
+* Volume number file: Multi-Volume Archives.
+ (line 74)
+* week in date strings: Relative items in date strings.
+ (line 15)
+* Where is the archive?: file. (line 6)
+* Working directory, specifying: directory. (line 6)
+* Writing extracted files to standard output: Writing to Standard Output.
+ (line 6)
+* Writing new archives: file. (line 34)
+* xdev: warnings. (line 43)
+* xdev <1>: warnings. (line 100)
+* XLIST: General-Purpose Variables.
+ (line 95)
+* xsparse: Sparse Recovery. (line 13)
+* year in date strings: Relative items in date strings.
+ (line 15)
+* yesterday in date strings: Relative items in date strings.
+ (line 29)
+
diff --git a/doc/tar.texi b/doc/tar.texi
new file mode 100644
index 0000000..a8969e0
--- /dev/null
+++ b/doc/tar.texi
@@ -0,0 +1,13252 @@
+\input texinfo @c -*-texinfo-*-
+@comment %**start of header
+@setfilename tar.info
+@include version.texi
+@settitle GNU tar @value{VERSION}
+@setchapternewpage odd
+
+@finalout
+
+@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 2.1. Run 'make check-options' to make sure all options are properly
+@c documented;
+@c 2.2. Run 'make master-menu' (see comment before the master menu).
+
+@include rendition.texi
+@include value.texi
+
+@defcodeindex op
+@defcodeindex kw
+
+@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
+@syncodeindex kw cp
+
+@copying
+
+This manual is for @acronym{GNU} @command{tar} (version
+@value{VERSION}, @value{UPDATED}), which creates and extracts files
+from archives.
+
+Copyright @copyright{} 1992, 1994--1997, 1999--2001, 2003--2016 Free
+Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'', with the
+Front-Cover Texts being ``A GNU Manual'', and with the Back-Cover Texts
+as in (a) below. A copy of the license is included in the section
+entitled ``GNU Free Documentation License''.
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to
+copy and modify this GNU manual.''
+@end quotation
+@end copying
+
+@dircategory Archiving
+@direntry
+* Tar: (tar). Making tape (or disk) archives.
+@end direntry
+
+@dircategory Individual utilities
+@direntry
+* tar: (tar)tar invocation. Invoking @GNUTAR{}.
+@end direntry
+
+@shorttitlepage @acronym{GNU} @command{tar}
+
+@titlepage
+@title @acronym{GNU} tar: an archiver tool
+@subtitle @value{RENDITION} @value{VERSION}, @value{UPDATED}
+@author John Gilmore, Jay Fenlason et al.
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@ifnottex
+@node Top
+@top @acronym{GNU} tar: an archiver tool
+
+@insertcopying
+
+@cindex file archival
+@cindex archiving files
+
+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 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::
+* Tutorial::
+* tar invocation::
+* operations::
+* Backups::
+* Choosing::
+* Date input formats::
+* Formats::
+* Media::
+* Reliability and security::
+
+Appendices
+
+* Changes::
+* Configuring Help Summary::
+* Fixing Snapshot Files::
+* Tar Internals::
+* Genfile::
+* Free Software Needs Free Documentation::
+* GNU Free Documentation License::
+* Index of Command Line Options::
+* Index::
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Introduction
+
+* Book Contents:: What this Book Contains
+* Definitions:: Some Definitions
+* What tar Does:: What @command{tar} Does
+* Naming tar Archives:: How @command{tar} Archives are Named
+* Authors:: @GNUTAR{} Authors
+* Reports:: Reporting bugs or suggestions
+
+Tutorial Introduction to @command{tar}
+
+* assumptions::
+* stylistic conventions::
+* basic tar options:: Basic @command{tar} Operations and Options
+* frequent operations::
+* Two Frequent Options::
+* create:: How to Create Archives
+* list:: How to List Archives
+* extract:: How to Extract Members from an Archive
+* going further::
+
+Two Frequently Used Options
+
+* file tutorial::
+* verbose tutorial::
+* help tutorial::
+
+How to Create Archives
+
+* prepare for examples::
+* Creating the archive::
+* create verbose::
+* short create::
+* create dir::
+
+How to List Archives
+
+* list dir::
+
+How to Extract Members from an Archive
+
+* extracting archives::
+* extracting files::
+* extract dir::
+* extracting untrusted archives::
+* failing commands::
+
+Invoking @GNUTAR{}
+
+* Synopsis::
+* using tar options::
+* Styles::
+* All Options::
+* help::
+* defaults::
+* verbose::
+* checkpoints::
+* warnings::
+* interactive::
+
+The Three Option Styles
+
+* Long Options:: Long Option Style
+* Short Options:: Short Option Style
+* Old Options:: Old Option Style
+* Mixing:: Mixing Option Styles
+
+All @command{tar} Options
+
+* Operation Summary::
+* Option Summary::
+* Short Option Summary::
+* Position-Sensitive Options::
+
+@GNUTAR{} Operations
+
+* Basic tar::
+* Advanced tar::
+* create options::
+* extract options::
+* backup::
+* Applications::
+* looking ahead::
+
+Advanced @GNUTAR{} Operations
+
+* Operations::
+* append::
+* update::
+* concatenate::
+* delete::
+* compare::
+
+How to Add Files to Existing Archives: @option{--append}
+
+* appending files:: Appending Files to an Archive
+* multiple::
+
+Updating an Archive
+
+* how to update::
+
+Options Used by @option{--create}
+
+* override:: Overriding File Metadata.
+* Extended File Attributes::
+* Ignore Failed Read::
+
+Options Used by @option{--extract}
+
+* Reading:: Options to Help Read Archives
+* Writing:: Changing How @command{tar} Writes Files
+* Scarce:: Coping with Scarce Resources
+
+Options to Help Read Archives
+
+* read full records::
+* Ignore Zeros::
+
+Changing How @command{tar} Writes Files
+
+* Dealing with Old Files::
+* Overwrite Old Files::
+* Keep Old Files::
+* Keep Newer Files::
+* Unlink First::
+* 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
+
+* Starting File::
+* Same Order::
+
+Performing Backups and Restoring Files
+
+* Full Dumps:: Using @command{tar} to Perform Full Dumps
+* Incremental Dumps:: Using @command{tar} to Perform Incremental Dumps
+* Backup Levels:: Levels of Backups
+* Backup Parameters:: Setting Parameters for Backups and Restoration
+* Scripted Backups:: Using the Backup Scripts
+* Scripted Restoration:: Using the Restore Script
+
+Setting Parameters for Backups and Restoration
+
+* General-Purpose Variables::
+* Magnetic Tape Control::
+* User Hooks::
+* backup-specs example:: An Example Text of @file{Backup-specs}
+
+Choosing Files and Names for @command{tar}
+
+* file:: Choosing the Archive's Name
+* Selecting Archive Members::
+* files:: Reading Names from a File
+* exclude:: Excluding Some Files
+* 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
+
+Reading Names from a File
+
+* nul::
+
+Excluding Some Files
+
+* problems with exclude::
+
+Wildcards Patterns and Matching
+
+* controlling pattern-matching::
+
+Crossing File System Boundaries
+
+* directory:: Changing Directory
+* absolute:: Absolute File Names
+
+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}.
+* 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 parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
+
+Controlling the Archive Format
+
+* Compression:: Using Less Space through Compression
+* Attributes:: Handling File Attributes
+* Portability:: Making @command{tar} Archives More Portable
+* cpio:: Comparison of @command{tar} and @command{cpio}
+
+Using Less Space through Compression
+
+* gzip:: Creating and Reading Compressed Archives
+* sparse:: Archiving Sparse Files
+
+Creating and Reading Compressed Archives
+
+* lbzip2:: Using lbzip2 with @GNUTAR{}.
+
+Making @command{tar} Archives More Portable
+
+* Portable Names:: Portable Names
+* dereference:: Symbolic Links
+* hard links:: Hard 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
+
+Tapes and Other Archive Media
+
+* Device:: Device selection and switching
+* Remote Tape Server::
+* Common Problems and Solutions::
+* Blocking:: Blocking
+* Many:: Many archives on one tape
+* Using Multiple Tapes:: Using Multiple Tapes
+* label:: Including a Label in the Archive
+* verify::
+* Write Protection::
+
+Blocking
+
+* Format Variations:: Format Variations
+* Blocking Factor:: The Blocking Factor of an Archive
+
+Many Archives on One Tape
+
+* Tape Positioning:: Tape Positions and Tape Marks
+* mt:: The @command{mt} Utility
+
+Using Multiple Tapes
+
+* Multi-Volume Archives:: Archives Longer than One Tape or Disk
+* Tape Files:: Tape Files
+* Tarcat:: Concatenate Volumes into a Single Archive
+
+
+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
+
+* GNU Free Documentation License:: License for copying this manual
+
+@end detailmenu
+@end menu
+
+@node Introduction
+@chapter Introduction
+
+@GNUTAR{} creates
+and manipulates @dfn{archives} which are actually collections of
+many other files; the program provides users with an organized and
+systematic method for controlling a large amount of data.
+The name ``tar'' originally came from the phrase ``Tape ARchive'', but
+archives need not (and these days, typically do not) reside on tapes.
+
+@menu
+* Book Contents:: What this Book Contains
+* Definitions:: Some Definitions
+* What tar Does:: What @command{tar} Does
+* Naming tar Archives:: How @command{tar} Archives are Named
+* Authors:: @GNUTAR{} Authors
+* Reports:: Reporting bugs or suggestions
+@end menu
+
+@node Book Contents
+@section What this Book Contains
+
+The first part of this chapter introduces you to various terms that will
+recur throughout the book. It also tells you who has worked on @GNUTAR{}
+and its documentation, and where you should send bug reports
+or comments.
+
+The second chapter is a tutorial (@pxref{Tutorial}) which provides a
+gentle introduction for people who are new to using @command{tar}. It is
+meant to be self-contained, not requiring any reading from subsequent
+chapters to make sense. It moves from topic to topic in a logical,
+progressive order, building on information already explained.
+
+Although the tutorial is paced and structured to allow beginners to
+learn how to use @command{tar}, it is not intended solely for beginners.
+The tutorial explains how to use the three most frequently used
+operations (@samp{create}, @samp{list}, and @samp{extract}) as well as
+two frequently used options (@samp{file} and @samp{verbose}). The other
+chapters do not refer to the tutorial frequently; however, if a section
+discusses something which is a complex variant of a basic concept, there
+may be a cross-reference to that basic concept. (The entire book,
+including the tutorial, assumes that the reader understands some basic
+concepts of using a Unix-type operating system; @pxref{Tutorial}.)
+
+The third chapter presents the remaining five operations, and
+information about using @command{tar} options and option syntax.
+
+The other chapters are meant to be used as a reference. Each chapter
+presents everything that needs to be said about a specific topic.
+
+One of the chapters (@pxref{Date input formats}) exists in its
+entirety in other @acronym{GNU} manuals, and is mostly self-contained.
+In addition, one section of this manual (@pxref{Standard}) contains a
+big quote which is taken directly from @command{tar} sources.
+
+In general, we give both long and short (abbreviated) option names
+at least once in each section where the relevant option is covered, so
+that novice readers will become familiar with both styles. (A few
+options have no short versions, and the relevant sections will
+indicate this.)
+
+@node Definitions
+@section Some Definitions
+
+@cindex archive
+@cindex tar archive
+The @command{tar} program is used to create and manipulate @command{tar}
+archives. An @dfn{archive} is a single file which contains the contents
+of many files, while still identifying the names of the files, their
+owner(s), and so forth. (In addition, archives record access
+permissions, user and group, size in bytes, and data modification time.
+Some archives also record the file names in each archived directory, as
+well as other file and directory information.) You can use @command{tar}
+to @dfn{create} a new archive in a specified directory.
+
+@cindex member
+@cindex archive member
+@cindex file name
+@cindex member name
+The files inside an archive are called @dfn{members}. Within this
+manual, we use the term @dfn{file} to refer only to files accessible in
+the normal ways (by @command{ls}, @command{cat}, and so forth), and the term
+@dfn{member} to refer only to the members of an archive. Similarly, a
+@dfn{file name} is the name of a file, as it resides in the file system,
+and a @dfn{member name} is the name of an archive member within the
+archive.
+
+@cindex extraction
+@cindex unpacking
+The term @dfn{extraction} refers to the process of copying an archive
+member (or multiple members) into a file in the file system. Extracting
+all the members of an archive is often called @dfn{extracting the
+archive}. The term @dfn{unpack} can also be used to refer to the
+extraction of many or all the members of an archive. Extracting an
+archive does not destroy the archive's structure, just as creating an
+archive does not destroy the copies of the files that exist outside of
+the archive. You may also @dfn{list} the members in a given archive
+(this is often thought of as ``printing'' them to the standard output,
+or the command line), or @dfn{append} members to a pre-existing archive.
+All of these operations can be performed using @command{tar}.
+
+@node What tar Does
+@section What @command{tar} Does
+
+@cindex tar
+The @command{tar} program provides the ability to create @command{tar}
+archives, as well as various other kinds of manipulation. For example,
+you can use @command{tar} on previously created archives to extract files,
+to store additional files, or to update or list files which were already
+stored.
+
+Initially, @command{tar} archives were used to store files conveniently on
+magnetic tape. The name @command{tar} comes from this use; it stands for
+@code{t}ape @code{ar}chiver. Despite the utility's name, @command{tar} can
+direct its output to available devices, files, or other programs (using
+pipes). @command{tar} may even access remote devices or files (as archives).
+
+You can use @command{tar} archives in many ways. We want to stress a few
+of them: storage, backup, and transportation.
+
+@FIXME{the following table entries need a bit of work.}
+@table @asis
+@item Storage
+Often, @command{tar} archives are used to store related files for
+convenient file transfer over a network. For example, the
+@acronym{GNU} Project distributes its software bundled into
+@command{tar} archives, so that all the files relating to a particular
+program (or set of related programs) can be transferred as a single
+unit.
+
+A magnetic tape can store several files in sequence. However, the tape
+has no names for these files; it only knows their relative position on
+the tape. One way to store several files on one tape and retain their
+names is by creating a @command{tar} archive. Even when the basic transfer
+mechanism can keep track of names, as FTP can, the nuisance of handling
+multiple files, directories, and multiple links makes @command{tar}
+archives useful.
+
+Archive files are also used for long-term storage. You can think of
+this as transportation from the present into the future. (It is a
+science-fiction idiom that you can move through time as well as in
+space; the idea here is that @command{tar} can be used to move archives in
+all dimensions, even time!)
+
+@item Backup
+Because the archive created by @command{tar} is capable of preserving
+file information and directory structure, @command{tar} is commonly
+used for performing full and incremental backups of disks. A backup
+puts a collection of files (possibly pertaining to many users and
+projects) together on a disk or a tape. This guards against
+accidental destruction of the information in those files.
+@GNUTAR{} has special features that allow it to be
+used to make incremental and full dumps of all the files in a
+file system.
+
+@item Transportation
+You can create an archive on one system, transfer it to another system,
+and extract the contents there. This allows you to transport a group of
+files from one system to another.
+@end table
+
+@node Naming tar Archives
+@section How @command{tar} Archives are Named
+
+Conventionally, @command{tar} archives are given names ending with
+@samp{.tar}. This is not necessary for @command{tar} to operate properly,
+but this manual follows that convention in order to accustom readers to
+it and to make examples more clear.
+
+@cindex tar file
+@cindex entry
+@cindex tar entry
+Often, people refer to @command{tar} archives as ``@command{tar} files,'' and
+archive members as ``files'' or ``entries''. For people familiar with
+the operation of @command{tar}, this causes no difficulty. However, in
+this manual, we consistently refer to ``archives'' and ``archive
+members'' to make learning to use @command{tar} easier for novice users.
+
+@node Authors
+@section @GNUTAR{} Authors
+
+@GNUTAR{} was originally written by John Gilmore,
+and modified by many people. The @acronym{GNU} enhancements were
+written by Jay Fenlason, then Joy Kendall, and the whole package has
+been further maintained by Thomas Bushnell, n/BSG, Fran@,{c}ois
+Pinard, Paul Eggert, and finally Sergey Poznyakoff with the help of
+numerous and kind users.
+
+We wish to stress that @command{tar} is a collective work, and owes much to
+all those people who reported problems, offered solutions and other
+insights, or shared their thoughts and suggestions. An impressive, yet
+partial list of those contributors can be found in the @file{THANKS}
+file from the @GNUTAR{} distribution.
+
+@FIXME{i want all of these names mentioned, Absolutely. BUT, i'm not
+sure i want to spell out the history in this detail, at least not for
+the printed book. i'm just not sure it needs to be said this way.
+i'll think about it.}
+
+@FIXME{History is more important, and surely more interesting, than
+actual names. Quoting names without history would be meaningless. FP}
+
+Jay Fenlason put together a draft of a @GNUTAR{}
+manual, borrowing notes from the original man page from John Gilmore.
+This was withdrawn in version 1.11. Thomas Bushnell, n/BSG and Amy
+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. 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}.
+
+In July, 2003 @GNUTAR{} was put on CVS at savannah.gnu.org
+(see @url{http://savannah.gnu.org/projects/tar}), and
+active development and maintenance work has started
+again. Currently @GNUTAR{} is being maintained by Paul Eggert, Sergey
+Poznyakoff and Jeff Bailey.
+
+Support for @acronym{POSIX} archives was added by Sergey Poznyakoff.
+
+@node Reports
+@section Reporting bugs or suggestions
+
+@cindex bug reports
+@cindex reporting bugs
+If you find problems or have suggestions about this program or manual,
+please report them to @file{bug-tar@@gnu.org}.
+
+When reporting a bug, please be sure to include as much detail as
+possible, in order to reproduce it.
+@FIXME{Be more specific, I'd like to make this node as detailed as
+'Bug reporting' node in Emacs manual.}
+
+@node Tutorial
+@chapter Tutorial Introduction to @command{tar}
+
+This chapter guides you through some basic examples of three @command{tar}
+operations: @option{--create}, @option{--list}, and @option{--extract}. If
+you already know how to use some other version of @command{tar}, then you
+may not need to read this chapter. This chapter omits most complicated
+details about how @command{tar} works.
+
+@menu
+* assumptions::
+* stylistic conventions::
+* basic tar options:: Basic @command{tar} Operations and Options
+* frequent operations::
+* Two Frequent Options::
+* create:: How to Create Archives
+* list:: How to List Archives
+* extract:: How to Extract Members from an Archive
+* going further::
+@end menu
+
+@node assumptions
+@section Assumptions this Tutorial Makes
+
+This chapter is paced to allow beginners to learn about @command{tar}
+slowly. At the same time, we will try to cover all the basic aspects of
+these three operations. In order to accomplish both of these tasks, we
+have made certain assumptions about your knowledge before reading this
+manual, and the hardware you will be using:
+
+@itemize @bullet
+@item
+Before you start to work through this tutorial, you should understand
+what the terms ``archive'' and ``archive member'' mean
+(@pxref{Definitions}). In addition, you should understand something
+about how Unix-type operating systems work, and you should know how to
+use some basic utilities. For example, you should know how to create,
+list, copy, rename, edit, and delete files and directories; how to
+change between directories; and how to figure out where you are in the
+file system. You should have some basic understanding of directory
+structure and how files are named according to which directory they are
+in. You should understand concepts such as standard output and standard
+input, what various definitions of the term @samp{argument} mean, and the
+differences between relative and absolute file names.
+@FIXME{and what else?}
+
+@item
+This manual assumes that you are working from your own home directory
+(unless we state otherwise). In this tutorial, you will create a
+directory to practice @command{tar} commands in. When we show file names,
+we will assume that those names are relative to your home directory.
+For example, my home directory is @file{/home/fsf/melissa}. All of
+my examples are in a subdirectory of the directory named by that file
+name; the subdirectory is called @file{practice}.
+
+@item
+In general, we show examples of archives which exist on (or can be
+written to, or worked with from) a directory on a hard disk. In most
+cases, you could write those archives to, or work with them on any other
+device, such as a tape drive. However, some of the later examples in
+the tutorial and next chapter will not work on tape drives.
+Additionally, working with tapes is much more complicated than working
+with hard disks. For these reasons, the tutorial does not cover working
+with tape drives. @xref{Media}, for complete information on using
+@command{tar} archives with tape drives.
+
+@FIXME{this is a cop out. need to add some simple tape drive info.}
+@end itemize
+
+@node stylistic conventions
+@section Stylistic Conventions
+
+In the examples, @samp{$} represents a typical shell prompt. It
+precedes lines you should type; to make this more clear, those lines are
+shown in @kbd{this font}, as opposed to lines which represent the
+computer's response; those lines are shown in @code{this font}, or
+sometimes @samp{like this}.
+
+@c When we have lines which are too long to be
+@c displayed in any other way, we will show them like this:
+
+@node basic tar options
+@section Basic @command{tar} Operations and Options
+
+@command{tar} can take a wide variety of arguments which specify and define
+the actions it will have on the particular set of files or the archive.
+The main types of arguments to @command{tar} fall into one of two classes:
+operations, and options.
+
+Some arguments fall into a class called @dfn{operations}; exactly one of
+these is both allowed and required for any instance of using @command{tar};
+you may @emph{not} specify more than one. People sometimes speak of
+@dfn{operating modes}. You are in a particular operating mode when you
+have specified the operation which specifies it; there are eight
+operations in total, and thus there are eight operating modes.
+
+The other arguments fall into the class known as @dfn{options}. You are
+not required to specify any options, and you are allowed to specify more
+than one at a time (depending on the way you are using @command{tar} at
+that time). Some options are used so frequently, and are so useful for
+helping you type commands more carefully that they are effectively
+``required''. We will discuss them in this chapter.
+
+You can write most of the @command{tar} operations and options in any
+of three forms: long (mnemonic) form, short form, and old style. Some
+of the operations and options have no short or ``old'' forms; however,
+the operations and options which we will cover in this tutorial have
+corresponding abbreviations. We will indicate those abbreviations
+appropriately to get 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{Long Options}, and
+@pxref{Short Options}).
+
+In the examples and in the text of this tutorial, we usually use the
+long forms of operations and options; but the ``short'' forms produce
+the same result and can make typing long @command{tar} commands easier.
+For example, instead of typing
+
+@smallexample
+@kbd{tar --create --verbose --file=afiles.tar apple angst aspic}
+@end smallexample
+
+@noindent
+you can type
+@smallexample
+@kbd{tar -c -v -f afiles.tar apple angst aspic}
+@end smallexample
+
+@noindent
+or even
+@smallexample
+@kbd{tar -cvf afiles.tar apple angst aspic}
+@end smallexample
+
+@noindent
+For more information on option syntax, see @ref{Advanced tar}. In
+discussions in the text, when we name an option by its long form, we
+also give the corresponding short option in parentheses.
+
+The term, ``option'', can be confusing at times, since ``operations''
+are often lumped in with the actual, @emph{optional} ``options'' in certain
+general class statements. For example, we just talked about ``short and
+long forms of options and operations''. However, experienced @command{tar}
+users often refer to these by shorthand terms such as, ``short and long
+options''. This term assumes that the ``operations'' are included, also.
+Context will help you determine which definition of ``options'' to use.
+
+Similarly, the term ``command'' can be confusing, as it is often used in
+two different ways. People sometimes refer to @command{tar} ``commands''.
+A @command{tar} @dfn{command} is the entire command line of user input
+which tells @command{tar} what to do --- including the operation, options,
+and any arguments (file names, pipes, other commands, etc.). However,
+you will also sometimes hear the term ``the @command{tar} command''. When
+the word ``command'' is used specifically like this, a person is usually
+referring to the @command{tar} @emph{operation}, not the whole line.
+Again, use context to figure out which of the meanings the speaker
+intends.
+
+@node frequent operations
+@section The Three Most Frequently Used Operations
+
+Here are the three most frequently used operations (both short and long
+forms), as well as a brief description of their meanings. The rest of
+this chapter will cover how to use these operations in detail. We will
+present the rest of the operations in the next chapter.
+
+@table @option
+@item --create
+@itemx -c
+Create a new @command{tar} archive.
+@item --list
+@itemx -t
+List the contents of an archive.
+@item --extract
+@itemx -x
+Extract one or more members from an archive.
+@end table
+
+@node Two Frequent Options
+@section Two Frequently Used Options
+
+To understand how to run @command{tar} in the three operating modes listed
+previously, you also need to understand how to use two of the options to
+@command{tar}: @option{--file} (which takes an archive file as an argument)
+and @option{--verbose}. (You are usually not @emph{required} to specify
+either of these options when you run @command{tar}, but they can be very
+useful in making things more clear and helping you avoid errors.)
+
+@menu
+* file tutorial::
+* verbose tutorial::
+* help tutorial::
+@end menu
+
+@node file tutorial
+@unnumberedsubsec The @option{--file} Option
+
+@table @option
+@xopindex{file, tutorial}
+@item --file=@var{archive-name}
+@itemx -f @var{archive-name}
+Specify the name of an archive file.
+@end table
+
+You can specify an argument for the @option{--file=@var{archive-name}} (@option{-f @var{archive-name}}) option whenever you
+use @command{tar}; this option determines the name of the archive file
+that @command{tar} will work on.
+
+@vrindex TAPE
+If you don't specify this argument, then @command{tar} will examine
+the environment variable @env{TAPE}. If it is set, its value will be
+used as the archive name. Otherwise, @command{tar} will use the
+default archive, determined at compile time. Usually it is
+standard output or some physical tape drive attached to your machine
+(you can verify what the default is by running @kbd{tar
+--show-defaults}, @pxref{defaults}). If there is no tape drive
+attached, or the default is not meaningful, then @command{tar} will
+print an error message. The error message might look roughly like one
+of the following:
+
+@smallexample
+tar: can't open /dev/rmt8 : No such device or address
+tar: can't open /dev/rsmt0 : I/O error
+@end smallexample
+
+@noindent
+To avoid confusion, we recommend that you always specify an archive file
+name by using @option{--file=@var{archive-name}} (@option{-f @var{archive-name}}) when writing your @command{tar} commands.
+For more information on using the @option{--file=@var{archive-name}} (@option{-f @var{archive-name}}) option, see
+@ref{file}.
+
+@node verbose tutorial
+@unnumberedsubsec The @option{--verbose} Option
+
+@table @option
+@xopindex{verbose, introduced}
+@item --verbose
+@itemx -v
+Show the files being worked on as @command{tar} is running.
+@end table
+
+@option{--verbose} (@option{-v}) shows details about the results of running
+@command{tar}. This can be especially useful when the results might not be
+obvious. For example, if you want to see the progress of @command{tar} as
+it writes files into the archive, you can use the @option{--verbose}
+option. In the beginning, you may find it useful to use
+@option{--verbose} at all times; when you are more accustomed to
+@command{tar}, you will likely want to use it at certain times but not at
+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.
+
+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}
+apple
+angst
+aspic
+@end smallexample
+
+@noindent
+Creating the same archive with the verbosity level 2 could give:
+
+@smallexample
+$ @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
+This works equally well using short or long forms of options. Using
+long forms, you would simply write out the mnemonic form of the option
+twice, like this:
+
+@smallexample
+$ @kbd{tar --create --verbose --verbose @dots{}}
+@end smallexample
+
+@noindent
+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 @acronym{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 multi-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 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
+
+@table @option
+@opindex help
+@item --help
+
+The @option{--help} option to @command{tar} prints out a very brief list of
+all operations and option available for the current version of
+@command{tar} available on your system.
+@end table
+
+@node create
+@section How to Create Archives
+
+@cindex Creation of the archive
+@cindex Archive, creation of
+One of the basic operations of @command{tar} is @option{--create} (@option{-c}), which
+you use to create a @command{tar} archive. We will explain
+@option{--create} first because, in order to learn about the other
+operations, you will find it useful to have an archive available to
+practice on.
+
+To make this easier, in this section you will first create a directory
+containing three files. Then, we will show you how to create an
+@emph{archive} (inside the new directory). Both the directory, and
+the archive are specifically for you to practice on. The rest of this
+chapter and the next chapter will show many examples using this
+directory and the files you will create: some of those files may be
+other directories and other archives.
+
+The three files you will archive in this example are called
+@file{blues}, @file{folk}, and @file{jazz}. The archive is called
+@file{collection.tar}.
+
+This section will proceed slowly, detailing how to use @option{--create}
+in @code{verbose} mode, and showing examples using both short and long
+forms. In the rest of the tutorial, and in the examples in the next
+chapter, we will proceed at a slightly quicker pace. This section
+moves more slowly to allow beginning users to understand how
+@command{tar} works.
+
+@menu
+* prepare for examples::
+* Creating the archive::
+* create verbose::
+* short create::
+* create dir::
+@end menu
+
+@node prepare for examples
+@subsection Preparing a Practice Directory for Examples
+
+To follow along with this and future examples, create a new directory
+called @file{practice} containing files called @file{blues}, @file{folk}
+and @file{jazz}. The files can contain any information you like:
+ideally, they should contain information which relates to their names,
+and be of different lengths. Our examples assume that @file{practice}
+is a subdirectory of your home directory.
+
+Now @command{cd} to the directory named @file{practice}; @file{practice}
+is now your @dfn{working directory}. (@emph{Please note}: Although
+the full file name of this directory is
+@file{/@var{homedir}/practice}, in our examples we will refer to
+this directory as @file{practice}; the @var{homedir} is presumed.)
+
+In general, you should check that the files to be archived exist where
+you think they do (in the working directory) by running @command{ls}.
+Because you just created the directory and the files and have changed to
+that directory, you probably don't need to do that this time.
+
+It is very important to make sure there isn't already a file in the
+working directory with the archive name you intend to use (in this case,
+@samp{collection.tar}), or that you don't care about its contents.
+Whenever you use @samp{create}, @command{tar} will erase the current
+contents of the file named by @option{--file=@var{archive-name}} (@option{-f @var{archive-name}}) if it exists. @command{tar}
+will not tell you if you are about to overwrite an archive unless you
+specify an option which does this (@pxref{backup}, for the
+information on how to do so). To add files to an existing archive,
+you need to use a different option, such as @option{--append} (@option{-r}); see
+@ref{append} for information on how to do this.
+
+@node Creating the archive
+@subsection Creating the Archive
+
+@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:
+
+@smallexample
+$ @kbd{tar --create --file=collection.tar blues folk jazz}
+@end smallexample
+
+The order of the arguments is not very important, @emph{when using long
+option forms}, however you should always remember to use option as the
+first argument to tar. For example, the following is wrong:
+
+@smallexample
+$ @kbd{tar blues -c folk -f collection.tar jazz}
+tar: -c: Invalid blocking factor
+Try 'tar --help' or 'tar --usage' for more information.
+@end smallexample
+
+The error message is produced because @command{tar} always treats its
+first argument as an option (or cluster of options), even if it does
+not start with dash. This is @dfn{traditional} or @dfn{old option}
+style, called so because all implementations of @command{tar} have
+used it since the very inception of the tar archiver in 1970s. This
+option style will be explained later (@pxref{Old Options}), for now
+just remember to always place option as the first argument.
+
+That being said, you could issue the following command:
+
+@smallexample
+$ @kbd{tar --create folk blues --file=collection.tar jazz}
+@end smallexample
+
+@noindent
+However, you can see that this order is harder to understand; this is
+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 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.
+
+The order of the options becomes more important when you begin to use
+short forms. With short forms, if you type commands in the wrong order
+(even if you type them correctly in all other ways), you may end up with
+results you don't expect. For this reason, it is a good idea to get
+into the habit of typing options in the order that makes inherent sense.
+@xref{short create}, for more information on this.
+
+In this example, you type the command as shown above: @option{--create}
+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.
+@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}).
+
+When you create an archive, you @emph{must} specify which files you
+want placed in the archive. If you do not specify any archive
+members, @GNUTAR{} will complain.
+
+If you now list the contents of the working directory (@command{ls}), you will
+find the archive file listed as well as the files you saw previously:
+
+@smallexample
+blues folk jazz collection.tar
+@end smallexample
+
+@noindent
+Creating the archive @samp{collection.tar} did not destroy the copies of
+the files in the directory.
+
+Keep in mind that if you don't indicate an operation, @command{tar} will not
+run and will prompt you for one. If you don't name any files, @command{tar}
+will complain. You must have write access to the working directory,
+or else you will not be able to create an archive in that directory.
+
+@emph{Caution}: Do not attempt to use @option{--create} (@option{-c}) to add files to
+an existing archive; it will delete the archive and write a new one.
+Use @option{--append} (@option{-r}) instead. @xref{append}.
+
+@node create verbose
+@subsection Running @option{--create} with @option{--verbose}
+
+@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:
+
+@smallexample
+$ @kbd{tar --create --verbose --file=collection.tar blues folk jazz}
+blues
+folk
+jazz
+@end smallexample
+
+This example is just like the example we showed which did not use
+@option{--verbose}, except that @command{tar} generated the remaining
+@iftex
+lines (note the different font styles).
+@end iftex
+@ifinfo
+lines.
+@end ifinfo
+
+In the rest of the examples in this chapter, we will frequently use
+@code{verbose} mode so we can show actions or @command{tar} responses that
+you would otherwise not see, and which are important for you to
+understand.
+
+@node short create
+@subsection Short Forms with @samp{create}
+
+As we said before, the @option{--create} (@option{-c}) operation is one of the most
+basic uses of @command{tar}, and you will use it countless times.
+Eventually, you will probably want to use abbreviated (or ``short'')
+forms of options. A full discussion of the three different forms that
+options can take appears in @ref{Styles}; for now, here is what the
+previous example (including the @option{--verbose} (@option{-v}) option) looks like
+using short option forms:
+
+@smallexample
+$ @kbd{tar -cvf collection.tar blues folk jazz}
+blues
+folk
+jazz
+@end smallexample
+
+@noindent
+As you can see, the system responds the same no matter whether you use
+long or short option forms.
+
+@FIXME{i don't like how this is worded:} One difference between using
+short and long option forms is that, although the exact placement of
+arguments following options is no more specific when using short forms,
+it is easier to become confused and make a mistake when using short
+forms. For example, suppose you attempted the above example in the
+following way:
+
+@smallexample
+$ @kbd{tar -cfv collection.tar blues folk jazz}
+@end smallexample
+
+@noindent
+In this case, @command{tar} will make an archive file called @file{v},
+containing the files @file{blues}, @file{folk}, and @file{jazz}, because
+the @samp{v} is the closest ``file name'' to the @option{-f} option, and
+is thus taken to be the chosen archive file name. @command{tar} will try
+to add a file called @file{collection.tar} to the @file{v} archive file;
+if the file @file{collection.tar} did not already exist, @command{tar} will
+report an error indicating that this file does not exist. If the file
+@file{collection.tar} does already exist (e.g., from a previous command
+you may have run), then @command{tar} will add this file to the archive.
+Because the @option{-v} option did not get registered, @command{tar} will not
+run under @samp{verbose} mode, and will not report its progress.
+
+The end result is that you may be quite confused about what happened,
+and possibly overwrite a file. To illustrate this further, we will show
+you how an example we showed previously would look using short forms.
+
+This example,
+
+@smallexample
+$ @kbd{tar --create folk blues --file=collection.tar jazz}
+@end smallexample
+
+@noindent
+is confusing as it is. It becomes even more so when using short forms:
+
+@smallexample
+$ @kbd{tar -c folk blues -f collection.tar jazz}
+@end smallexample
+
+@noindent
+It would be very easy to put the wrong string of characters
+immediately following the @option{-f}, but doing that could sacrifice
+valuable data.
+
+For this reason, we recommend that you pay very careful attention to
+the order of options and placement of file and archive names,
+especially when using short option forms. Not having the option name
+written out mnemonically can affect how well you remember which option
+does what, and therefore where different names have to be placed.
+
+@node create dir
+@subsection Archiving Directories
+
+@cindex Archiving Directories
+@cindex Directories, Archiving
+You can archive a directory by specifying its directory name as a
+file name argument to @command{tar}. The files in the directory will be
+archived relative to the working directory, and the directory will be
+re-created along with its contents when the archive is extracted.
+
+To archive a directory, first move to its superior directory. If you
+have followed the previous instructions in this tutorial, you should
+type:
+
+@smallexample
+$ @kbd{cd ..}
+$
+@end smallexample
+
+@noindent
+This will put you into the directory which contains @file{practice},
+i.e., your home directory. Once in the superior directory, you can
+specify the subdirectory, @file{practice}, as a file name argument. To
+store @file{practice} in the new archive file @file{music.tar}, type:
+
+@smallexample
+$ @kbd{tar --create --verbose --file=music.tar practice}
+@end smallexample
+
+@noindent
+@command{tar} should output:
+
+@smallexample
+practice/
+practice/blues
+practice/folk
+practice/jazz
+practice/collection.tar
+@end smallexample
+
+Note that the archive thus created is not in the subdirectory
+@file{practice}, but rather in the current working directory---the
+directory from which @command{tar} was invoked. Before trying to archive a
+directory from its superior directory, you should make sure you have
+write access to the superior directory itself, not only the directory
+you are trying archive with @command{tar}. For example, you will probably
+not be able to store your home directory in an archive by invoking
+@command{tar} from the root directory; @xref{absolute}. (Note
+also that @file{collection.tar}, the original archive file, has itself
+been archived. @command{tar} will accept any file as a file to be
+archived, regardless of its content. When @file{music.tar} is
+extracted, the archive file @file{collection.tar} will be re-written
+into the file system).
+
+If you give @command{tar} a command such as
+
+@smallexample
+$ @kbd{tar --create --file=foo.tar .}
+@end smallexample
+
+@noindent
+@command{tar} will report @samp{tar: ./foo.tar is the archive; not
+dumped}. This happens because @command{tar} creates the archive
+@file{foo.tar} in the current directory before putting any files into
+it. Then, when @command{tar} attempts to add all the files in the
+directory @file{.} to the archive, it notices that the file
+@file{./foo.tar} is the same as the archive @file{foo.tar}, and skips
+it. (It makes no sense to put an archive into itself.) @GNUTAR{}
+will continue in this case, and create the archive
+normally, except for the exclusion of that one file. (@emph{Please
+note:} Other implementations of @command{tar} may not be so clever;
+they will enter an infinite loop when this happens, so you should not
+depend on this behavior unless you are certain you are running
+@GNUTAR{}. In general, it is wise to always place the archive outside
+of the directory being dumped.)
+
+@node list
+@section How to List Archives
+
+@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, assuming @file{practice} is
+your working directory, 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}
+@end smallexample
+
+@noindent
+The output of @command{tar} would then be:
+
+@smallexample
+blues
+folk
+jazz
+@end smallexample
+
+@noindent
+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.
+
+@cindex File name arguments, using @option{--list} with
+@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=collection.tar folk}} would only print @file{folk}:
+
+@smallexample
+$ @kbd{tar --list --file=collection.tar folk}
+folk
+@end smallexample
+
+@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. 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:
+
+@smallexample
+$ @kbd{tar --list --verbose --file=collection.tar folk}
+-rw-r--r-- myself/user 62 1990-05-23 10:55 folk
+@end smallexample
+
+@cindex listing member and file names
+@anchor{listing member and file names}
+It is important to notice that the output of @kbd{tar --list
+--verbose} does not necessarily match that produced by @kbd{tar
+--create --verbose} while creating the archive. It is because
+@GNUTAR{}, unless told explicitly not to do so, removes some directory
+prefixes from file names before storing them in the archive
+(@xref{absolute}, for more information). In other
+words, in verbose mode @GNUTAR{} shows @dfn{file names} when creating
+an archive and @dfn{member names} when listing it. Consider this
+example, run from your home directory:
+
+@smallexample
+@group
+$ @kbd{tar --create --verbose --file practice.tar ~/practice}
+tar: Removing leading '/' from member names
+/home/myself/practice/
+/home/myself/practice/blues
+/home/myself/practice/folk
+/home/myself/practice/jazz
+/home/myself/practice/collection.tar
+$ @kbd{tar --test --file practice.tar}
+home/myself/practice/
+home/myself/practice/blues
+home/myself/practice/folk
+home/myself/practice/jazz
+home/myself/practice/collection.tar
+@end group
+@end smallexample
+
+@opindex show-stored-names
+ This default behavior can sometimes be inconvenient. You can force
+@GNUTAR{} show member names when creating archive by supplying
+@option{--show-stored-names} option.
+
+@table @option
+@item --show-stored-names
+Print member (as opposed to @emph{file}) names when creating the archive.
+@end table
+
+With this option, both commands produce the same output:
+
+@smallexample
+@group
+$ @kbd{tar --create --verbose --show-stored-names \
+ --file practice.tar ~/practice}
+tar: Removing leading '/' from member names
+home/myself/practice/
+home/myself/practice/blues
+home/myself/practice/folk
+home/myself/practice/jazz
+home/myself/practice/collection.tar
+$ @kbd{tar --test --file practice.tar}
+home/myself/practice/
+home/myself/practice/blues
+home/myself/practice/folk
+home/myself/practice/jazz
+home/myself/practice/collection.tar
+@end group
+@end smallexample
+
+Since @command{tar} preserves file names, those you wish to list must be
+specified as they appear in the archive (i.e., relative to the
+directory from which the archive was created). Continuing the example
+above:
+
+@smallexample
+@group
+$ @kbd{tar --list --file=practice.tar folk}
+tar: folk: Not found in archive
+tar: Exiting with failure status due to previous errors
+@end group
+@end smallexample
+
+the error message is produced because there is no member named
+@file{folk}, only one named @file{home/myself/folk}.
+
+If you are not sure of the exact file name, use @dfn{globbing
+patterns}, for example:
+
+@smallexample
+$ @kbd{tar --list --file=practice.tar --wildcards '*/folk'}
+home/myself/practice/folk
+@end smallexample
+
+@noindent
+@xref{wildcards}, for a detailed discussion of globbing patterns and related
+@command{tar} command line options.
+
+@menu
+* list dir::
+@end menu
+
+@node list dir
+@unnumberedsubsec Listing the Contents of a Stored Directory
+
+To get information about the contents of an archived directory,
+use the directory name as a file name argument in conjunction with
+@option{--list} (@option{-t}). To find out file attributes, include the
+@option{--verbose} (@option{-v}) option.
+
+For example, to find out about files in the directory @file{practice}, in
+the archive file @file{music.tar}, type:
+
+@smallexample
+$ @kbd{tar --list --verbose --file=music.tar practice}
+@end smallexample
+
+@command{tar} responds:
+
+@smallexample
+drwxrwxrwx myself/user 0 1990-05-31 21:49 practice/
+-rw-r--r-- myself/user 42 1990-05-21 13:29 practice/blues
+-rw-r--r-- myself/user 62 1990-05-23 10:55 practice/folk
+-rw-r--r-- myself/user 40 1990-05-21 13:30 practice/jazz
+-rw-r--r-- myself/user 10240 1990-05-31 21:49 practice/collection.tar
+@end smallexample
+
+When you use a directory name as a file name argument, @command{tar} acts on
+all the files (including sub-directories) in that directory.
+
+@node extract
+@section How to Extract Members from an Archive
+@cindex Extraction
+@cindex Retrieving files from an archive
+@cindex Resurrecting files from an archive
+
+@opindex extract
+Creating an archive is only half the job---there is no point in storing
+files in an archive if you can't retrieve them. The act of retrieving
+members from an archive so they can be used and manipulated as
+unarchived files again is called @dfn{extraction}. To extract files
+from an archive, use the @option{--extract} (@option{--get} or
+@option{-x}) operation. As with @option{--create}, specify the name
+of the archive with @option{--file} (@option{-f}) option. Extracting
+an archive does not modify the archive in any way; you can extract it
+multiple times if you want or need to.
+
+Using @option{--extract}, you can extract an entire archive, or specific
+files. The files can be directories containing other files, or not. As
+with @option{--create} (@option{-c}) and @option{--list} (@option{-t}), you may use the short or the
+long form of the operation without affecting the performance.
+
+@menu
+* extracting archives::
+* extracting files::
+* extract dir::
+* extracting untrusted archives::
+* failing commands::
+@end menu
+
+@node extracting archives
+@subsection Extracting an Entire Archive
+
+To extract an entire archive, specify the archive file name only, with
+no individual file names as arguments. For example,
+
+@smallexample
+$ @kbd{tar -xvf collection.tar}
+@end smallexample
+
+@noindent
+produces this:
+
+@smallexample
+-rw-r--r-- myself/user 28 1996-10-18 16:31 jazz
+-rw-r--r-- myself/user 21 1996-09-23 16:44 blues
+-rw-r--r-- myself/user 20 1996-09-23 16:44 folk
+@end smallexample
+
+@node extracting files
+@subsection Extracting Specific Files
+
+To extract specific archive members, give their exact member names as
+arguments, as printed by @option{--list} (@option{-t}). If you had
+mistakenly deleted one of the files you had placed in the archive
+@file{collection.tar} earlier (say, @file{blues}), you can extract it
+from the archive without changing the archive's structure. Its
+contents will be identical to the original file @file{blues} that you
+deleted.
+
+First, make sure you are in the @file{practice} directory, and list the
+files in the directory. Now, delete the file, @samp{blues}, and list
+the files in the directory again.
+
+You can now extract the member @file{blues} from the archive file
+@file{collection.tar} like this:
+
+@smallexample
+$ @kbd{tar --extract --file=collection.tar blues}
+@end smallexample
+
+@noindent
+If you list the files in the directory again, you will see that the file
+@file{blues} has been restored, with its original permissions, data
+modification times, and owner.@footnote{This is only accidentally
+true, but not in general. Whereas modification times are always
+restored, in most cases, one has to be root for restoring the owner,
+and use a special option for restoring permissions. Here, it just
+happens that the restoring user is also the owner of the archived
+members, and that the current @code{umask} is compatible with original
+permissions.} (These parameters will be identical to those which
+the file had when you originally placed it in the archive; any changes
+you may have made before deleting the file from the file system,
+however, will @emph{not} have been made to the archive member.) The
+archive file, @samp{collection.tar}, is the same as it was before you
+extracted @samp{blues}. You can confirm this by running @command{tar} with
+@option{--list} (@option{-t}).
+
+Remember that as with other operations, specifying the exact member
+name is important (@xref{failing commands}, for more examples).
+
+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
+Output}).
+
+If you give the @option{--verbose} option, then @option{--extract}
+will print the names of the archive members as it extracts them.
+
+@node extract dir
+@subsection Extracting Files that are Directories
+
+Extracting directories which are members of an archive is similar to
+extracting other files. The main difference to be aware of is that if
+the extracted directory has the same name as any directory already in
+the working directory, then files in the extracted directory will be
+placed into the directory of the same name. Likewise, if there are
+files in the pre-existing directory with the same names as the members
+which you extract, the files from the extracted archive will replace
+the files already in the working directory (and possible
+subdirectories). This will happen regardless of whether or not the
+files in the working directory were more recent than those extracted
+(there exist, however, special options that alter this behavior
+@pxref{Writing}).
+
+However, if a file was stored with a directory name as part of its file
+name, and that directory does not exist under the working directory when
+the file is extracted, @command{tar} will create the directory.
+
+We can demonstrate how to use @option{--extract} to extract a directory
+file with an example. Change to the @file{practice} directory if you
+weren't there, and remove the files @file{folk} and @file{jazz}. Then,
+go back to the parent directory and extract the archive
+@file{music.tar}. You may either extract the entire archive, or you may
+extract only the files you just deleted. To extract the entire archive,
+don't give any file names as arguments after the archive name
+@file{music.tar}. To extract only the files you deleted, use the
+following command:
+
+@smallexample
+$ @kbd{tar -xvf music.tar practice/folk practice/jazz}
+practice/folk
+practice/jazz
+@end smallexample
+
+@noindent
+If you were to specify two @option{--verbose} (@option{-v}) options, @command{tar}
+would have displayed more detail about the extracted files, as shown
+in the example below:
+
+@smallexample
+$ @kbd{tar -xvvf music.tar practice/folk practice/jazz}
+-rw-r--r-- me/user 28 1996-10-18 16:31 practice/jazz
+-rw-r--r-- me/user 20 1996-09-23 16:44 practice/folk
+@end smallexample
+
+@noindent
+Because you created the directory with @file{practice} as part of the
+file names of each of the files by archiving the @file{practice}
+directory as @file{practice}, you must give @file{practice} as part
+of the file names when you extract those files from the archive.
+
+@node extracting untrusted archives
+@subsection Extracting Archives from Untrusted Sources
+
+Extracting files from archives can overwrite files that already exist.
+If you receive an archive from an untrusted source, you should make a
+new directory and extract into that directory, so that you don't have
+to worry about the extraction overwriting one of your existing files.
+For example, if @file{untrusted.tar} came from somewhere else on the
+Internet, and you don't necessarily trust its contents, you can
+extract it as follows:
+
+@smallexample
+$ @kbd{mkdir newdir}
+$ @kbd{cd newdir}
+$ @kbd{tar -xvf ../untrusted.tar}
+@end smallexample
+
+It is also a good practice to examine contents of the archive
+before extracting it, using @option{--list} (@option{-t}) option, possibly combined
+with @option{--verbose} (@option{-v}).
+
+@node failing commands
+@subsection Commands That Will Fail
+
+Here are some sample commands you might try which will not work, and why
+they won't work.
+
+If you try to use this command,
+
+@smallexample
+$ @kbd{tar -xvf music.tar folk jazz}
+@end smallexample
+
+@noindent
+you will get the following response:
+
+@smallexample
+tar: folk: Not found in archive
+tar: jazz: Not found in archive
+@end smallexample
+
+@noindent
+This is because these files were not originally @emph{in} the parent
+directory @file{..}, where the archive is located; they were in the
+@file{practice} directory, and their file names reflect this:
+
+@smallexample
+$ @kbd{tar -tvf music.tar}
+practice/blues
+practice/folk
+practice/jazz
+@end smallexample
+
+@noindent
+Likewise, if you try to use this command,
+
+@smallexample
+$ @kbd{tar -tvf music.tar folk jazz}
+@end smallexample
+
+@noindent
+you would get a similar response. Members with those names are not in the
+archive. You must use the correct member names, or wildcards, in order
+to extract the files from the archive.
+
+If you have forgotten the correct names of the files in the archive,
+use @w{@kbd{tar --list --verbose}} to list them correctly.
+
+To extract the member named @file{practice/folk}, you must specify
+
+@smallexample
+$ @kbd{tar --extract --file=music.tar practice/folk}
+@end smallexample
+
+@noindent
+Notice also, that as explained above, the @file{practice} directory
+will be created, if it didn't already exist. There are options that
+allow you to strip away a certain number of leading directory
+components (@pxref{transform}). For example,
+
+@smallexample
+$ @kbd{tar --extract --file=music.tar --strip-components=1 folk}
+@end smallexample
+
+@noindent
+will extract the file @file{folk} into the current working directory.
+
+@node going further
+@section Going Further Ahead in this Manual
+@UNREVISED
+
+@FIXME{need to write up a node here about the things that are going to
+be in the rest of the manual.}
+
+@node tar invocation
+@chapter Invoking @GNUTAR{}
+
+This chapter is about how one invokes the @GNUTAR{}
+command, from the command synopsis (@pxref{Synopsis}). There are
+numerous options, and many styles for writing them. One mandatory
+option specifies the operation @command{tar} should perform
+(@pxref{Operation Summary}), other options are meant to detail how
+this operation should be performed (@pxref{Option Summary}).
+Non-option arguments are not always interpreted the same way,
+depending on what the operation is.
+
+You will find in this chapter everything about option styles and rules for
+writing them (@pxref{Styles}). On the other hand, operations and options
+are fully described elsewhere, in other chapters. Here, you will find
+only synthetic descriptions for operations and options, together with
+pointers to other parts of the @command{tar} manual.
+
+Some options are so special they are fully described right in this
+chapter. They have the effect of inhibiting the normal operation of
+@command{tar} or else, they globally alter the amount of feedback the user
+receives about what is going on. These are the @option{--help} and
+@option{--version} (@pxref{help}), @option{--verbose} (@pxref{verbose})
+and @option{--interactive} options (@pxref{interactive}).
+
+@menu
+* Synopsis::
+* using tar options::
+* Styles::
+* All Options:: All @command{tar} Options.
+* help:: Where to Get Help.
+* defaults:: What are the Default Values.
+* verbose:: Checking @command{tar} progress.
+* checkpoints:: Checkpoints.
+* warnings:: Controlling Warning Messages.
+* interactive:: Asking for Confirmation During Operations.
+* external:: Running External Commands.
+@end menu
+
+@node Synopsis
+@section General Synopsis of @command{tar}
+
+The @GNUTAR{} program is invoked as either one of:
+
+@smallexample
+@kbd{tar @var{option}@dots{} [@var{name}]@dots{}}
+@kbd{tar @var{letter}@dots{} [@var{argument}]@dots{} [@var{option}]@dots{} [@var{name}]@dots{}}
+@end smallexample
+
+The second form is for when old options are being used.
+
+You can use @command{tar} to store files in an archive, to extract them from
+an archive, and to do other types of archive manipulation. The primary
+argument to @command{tar}, which is called the @dfn{operation}, specifies
+which action to take. The other arguments to @command{tar} are either
+@dfn{options}, which change the way @command{tar} performs an operation,
+or file names or archive members, which specify the files or members
+@command{tar} is to act on.
+
+You can actually type in arguments in any order, even if in this manual
+the options always precede the other arguments, to make examples easier
+to understand. Further, the option stating the main operation mode
+(the @command{tar} main command) is usually given first.
+
+Each @var{name} in the synopsis above is interpreted as an archive member
+name when the main command is one of @option{--compare}
+(@option{--diff}, @option{-d}), @option{--delete}, @option{--extract}
+(@option{--get}, @option{-x}), @option{--list} (@option{-t}) or
+@option{--update} (@option{-u}). When naming archive members, you
+must give the exact name of the member in the archive, as it is
+printed by @option{--list}. For @option{--append} (@option{-r}) and
+@option{--create} (@option{-c}), these @var{name} arguments specify
+the names of either files or directory hierarchies to place in the archive.
+These files or hierarchies should already exist in the file system,
+prior to the execution of the @command{tar} command.
+
+@command{tar} interprets relative file names as being relative to the
+working directory. @command{tar} will make all file names relative
+(by removing leading slashes when archiving or restoring files),
+unless you specify otherwise (using the @option{--absolute-names}
+option). @xref{absolute}, for more information about
+@option{--absolute-names}.
+
+If you give the name of a directory as either a file name or a member
+name, then @command{tar} acts recursively on all the files and directories
+beneath that directory. For example, the name @file{/} identifies all
+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.
+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
+being interpreted by the shell first. Using a backslash before @samp{*}
+or @samp{?}, or putting the whole argument between quotes, is usually
+sufficient for this.
+
+Even if @var{name}s are often specified on the command line, they
+can also be read from a text file in the file system, using the
+@option{--files-from=@var{file-of-names}} (@option{-T @var{file-of-names}}) option.
+
+If you don't use any file name arguments, @option{--append} (@option{-r}),
+@option{--delete} and @option{--concatenate} (@option{--catenate},
+@option{-A}) will do nothing, while @option{--create} (@option{-c})
+will usually yield a diagnostic and inhibit @command{tar} execution.
+The other operations of @command{tar} (@option{--list},
+@option{--extract}, @option{--compare}, and @option{--update})
+will act on the entire contents of the archive.
+
+@anchor{exit status}
+@cindex exit status
+@cindex return status
+Besides successful exits, @GNUTAR{} may fail for
+many reasons. Some reasons correspond to bad usage, that is, when the
+@command{tar} command line is improperly written. Errors may be
+encountered later, while processing the archive or the files. Some
+errors are recoverable, in which case the failure is delayed until
+@command{tar} has completed all its work. Some errors are such that
+it would be not meaningful, or at least risky, to continue processing:
+@command{tar} then aborts processing immediately. All abnormal exits,
+whether immediate or delayed, should always be clearly diagnosed on
+@code{stderr}, after a line stating the nature of the error.
+
+Possible exit codes of @GNUTAR{} are summarized in the following
+table:
+
+@table @asis
+@item 0
+@samp{Successful termination}.
+
+@item 1
+@samp{Some files differ}. If tar was invoked with @option{--compare}
+(@option{--diff}, @option{-d}) command line option, this means that
+some files in the archive differ from their disk counterparts
+(@pxref{compare}). If tar was given @option{--create},
+@option{--append} or @option{--update} option, this exit code means
+that some files were changed while being archived and so the resulting
+archive does not contain the exact copy of the file set.
+
+@item 2
+@samp{Fatal error}. This means that some fatal, unrecoverable error
+occurred.
+@end table
+
+If @command{tar} has invoked a subprocess and that subprocess exited with a
+nonzero exit code, @command{tar} exits with that code as well.
+This can happen, for example, if @command{tar} was given some
+compression option (@pxref{gzip}) and the external compressor program
+failed. Another example is @command{rmt} failure during backup to the
+remote device (@pxref{Remote Tape Server}).
+
+@node using tar options
+@section Using @command{tar} Options
+
+@GNUTAR{} has a total of eight operating modes which
+allow you to perform a variety of tasks. You are required to choose
+one operating mode each time you employ the @command{tar} program by
+specifying one, and only one operation as an argument to the
+@command{tar} command (the corresponding options may be found
+at @ref{frequent operations} and @ref{Operations}). Depending on
+circumstances, you may also wish to customize how the chosen operating
+mode behaves. For example, you may wish to change the way the output
+looks, or the format of the files that you wish to archive may require
+you to do something special in order to make the archive look right.
+
+You can customize and control @command{tar}'s performance by running
+@command{tar} with one or more options (such as @option{--verbose}
+(@option{-v}), which we used in the tutorial). As we said in the
+tutorial, @dfn{options} are arguments to @command{tar} which are (as
+their name suggests) optional. Depending on the operating mode, you
+may specify one or more options. Different options will have different
+effects, but in general they all change details of the operation, such
+as archive format, archive name, or level of user interaction. Some
+options make sense with all operating modes, while others are
+meaningful only with particular modes. You will likely use some
+options frequently, while you will only use others infrequently, or
+not at all. (A full list of options is available in @pxref{All Options}.)
+
+@vrindex TAR_OPTIONS, environment variable
+@anchor{TAR_OPTIONS}
+The @env{TAR_OPTIONS} environment variable specifies default options to
+be placed in front of any explicit options. For example, if
+@code{TAR_OPTIONS} is @samp{-v --unlink-first}, @command{tar} behaves as
+if the two options @option{-v} and @option{--unlink-first} had been
+specified before any explicit options. Option specifications are
+separated by whitespace. A backslash escapes the next character, so it
+can be used to specify an option containing whitespace or a backslash.
+
+Note that @command{tar} options are case sensitive. For example, the
+options @option{-T} and @option{-t} are different; the first requires an
+argument for stating the name of a file providing a list of @var{name}s,
+while the second does not require an argument and is another way to
+write @option{--list} (@option{-t}).
+
+In addition to the eight operations, there are many options to
+@command{tar}, and three different styles for writing both: long (mnemonic)
+form, short form, and old style. These styles are discussed below.
+Both the options and the operations can be written in any of these three
+styles.
+
+@FIXME{menu at end of this node. need to think of an actual outline
+for this chapter; probably do that after stuff from chapter 4 is
+incorporated.}
+
+@node Styles
+@section The Three Option Styles
+
+There are three styles for writing operations and options to the command
+line invoking @command{tar}. The different styles were developed at
+different times during the history of @command{tar}. These styles will be
+presented below, from the most recent to the oldest.
+
+Some options must take an argument@footnote{For example, @option{--file}
+(@option{-f}) takes the name of an archive file as an argument. If
+you do not supply an archive file name, @command{tar} will use a
+default, but this can be confusing; thus, we recommend that you always
+supply a specific archive file name.}. Where you @emph{place} the
+arguments generally depends on which style of options you choose. We
+will detail specific information relevant to each option style in the
+sections on the different option styles, below. The differences are
+subtle, yet can often be very important; incorrect option placement
+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. 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
+* Long Options:: Long Option Style
+* Short Options:: Short Option Style
+* Old Options:: Old Option Style
+* Mixing:: Mixing Option Styles
+@end menu
+
+@node Long Options
+@subsection Long Option Style
+
+@cindex long options
+@cindex options, long style
+@cindex options, GNU style
+@cindex options, mnemonic names
+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 long option has many 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 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
+abbreviation won't work. You may also choose to run @samp{tar --help}
+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.)
+
+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:
+
+@smallexample
+$ @kbd{tar --create --verbose --blocking-factor=20 --file=/dev/rmt0}
+@end smallexample
+
+@noindent
+gives a fairly good set of hints about what the command does, even
+for those not fully acquainted with @command{tar}.
+
+@cindex arguments to long options
+@cindex long options with mandatory 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
+white space characters. For example, the @option{--file} option (which
+tells the name of the @command{tar} archive) is given a file such as
+@file{archive.tar} as argument by using any of the following notations:
+@option{--file=archive.tar} or @option{--file archive.tar}.
+
+@cindex optional arguments to long options
+@cindex long options with optional arguments
+In contrast, optional arguments must always be introduced using
+an equal sign. For example, the @option{--backup} option takes
+an optional argument specifying backup type. It must be used
+as @option{--backup=@var{backup-type}}.
+
+@node Short Options
+@subsection Short Option Style
+
+@cindex short options
+@cindex options, short style
+@cindex options, traditional
+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.
+
+The short option names are faster to type than long option names.
+
+@cindex arguments to short options
+@cindex short options with mandatory arguments
+Short options which require arguments take their arguments immediately
+following the option, usually separated by white space. It is also
+possible to stick the argument right after the short option name, using
+no intervening space. For example, you might write @w{@option{-f
+archive.tar}} or @option{-farchive.tar} instead of using
+@option{--file=archive.tar}. Both @option{--file=@var{archive-name}} and
+@w{@option{-f @var{archive-name}}} denote the option which indicates a
+specific archive, here named @file{archive.tar}.
+
+@cindex optional arguments to short options
+@cindex short options with optional arguments
+Short options which take optional arguments take their arguments
+immediately following the option letter, @emph{without any intervening
+white space characters}.
+
+Short options' letters may be clumped together, but you are not
+required to do this (as compared to old options; see below). When
+short options are clumped as a set, use one (single) dash for them
+all, e.g., @w{@samp{@command{tar} -cvf}}. Only the last option in
+such a set is allowed to have an argument@footnote{Clustering many
+options, the last of which has an argument, is a rather opaque way to
+write options. Some wonder if @acronym{GNU} @code{getopt} should not
+even be made helpful enough for considering such usages as invalid.}.
+
+When the options are separated, the argument for each option which requires
+an argument directly follows that option, as is usual for Unix programs.
+For example:
+
+@smallexample
+$ @kbd{tar -c -v -b 20 -f /dev/rmt0}
+@end smallexample
+
+If you reorder short options' locations, be sure to move any arguments
+that belong to them. If you do not move the arguments properly, you may
+end up overwriting files.
+
+@node Old Options
+@subsection Old Option Style
+@cindex options, old style
+@cindex old option style
+@cindex option syntax, traditional
+
+As far as we know, all @command{tar} programs, @acronym{GNU} and
+non-@acronym{GNU}, support @dfn{old options}: that is, if the first
+argument does not start with @samp{-}, it is assumed to specify option
+letters. @GNUTAR{} supports old options not only for historical
+reasons, but also because many people are used to them. If the first
+argument does not start with a dash, you are announcing the old option
+style instead of the short option style; old options are decoded
+differently.
+
+Like short options, 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. This set
+of letters must be the first to appear on the command line, after the
+@command{tar} program name and some white space; old options cannot appear
+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
+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}.
+
+@cindex arguments to old options
+@cindex old options with mandatory arguments
+When options that need arguments are given together with the command,
+all the associated arguments follow, in the same order as the options.
+Thus, the example given previously could also be written in the old
+style as follows:
+
+@smallexample
+$ @kbd{tar cvbf 20 /dev/rmt0}
+@end smallexample
+
+@noindent
+Here, @samp{20} is the argument of @option{-b} and @samp{/dev/rmt0} is
+the argument of @option{-f}.
+
+The old style syntax can make it difficult to match
+option letters with their corresponding arguments, and is often
+confusing. In the command @w{@samp{tar cvbf 20 /dev/rmt0}}, for example,
+@samp{20} is the argument for @option{-b}, @samp{/dev/rmt0} is the
+argument for @option{-f}, and @option{-v} does not have a corresponding
+argument. Even using short options like in @w{@samp{tar -c -v -b 20 -f
+/dev/rmt0}} is clearer, putting all arguments next to the option they
+pertain to.
+
+If you want to reorder the letters in the old option argument, be
+sure to reorder any corresponding argument appropriately.
+
+This old way of writing @command{tar} options can surprise even experienced
+users. For example, the two commands:
+
+@smallexample
+@kbd{tar cfz archive.tar.gz file}
+@kbd{tar -cfz archive.tar.gz file}
+@end smallexample
+
+@noindent
+are quite different. The first example uses @file{archive.tar.gz} as
+the value for option @samp{f} and recognizes the option @samp{z}. The
+second example, however, uses @file{z} as the value for option
+@samp{f} --- probably not what was intended.
+
+This second example could be corrected in many ways, among which the
+following are equivalent:
+
+@smallexample
+@kbd{tar -czf archive.tar.gz file}
+@kbd{tar -cf archive.tar.gz -z file}
+@kbd{tar cf archive.tar.gz -z file}
+@end smallexample
+
+@node Mixing
+@subsection Mixing Option Styles
+
+@cindex options, mixing different styles
+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 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,
+following the rule for old options (old options must appear directly
+after the @command{tar} command and some white space). Modern options
+may be given only after all arguments to the old options have been
+collected. If this rule is not respected, a modern option might be
+falsely interpreted as the value of the argument to one of the old
+style options.
+
+For example, all the following commands are wholly equivalent, and
+illustrate the many combinations and orderings of option styles.
+
+@smallexample
+@kbd{tar --create --file=archive.tar}
+@kbd{tar --create -f archive.tar}
+@kbd{tar --create -farchive.tar}
+@kbd{tar --file=archive.tar --create}
+@kbd{tar --file=archive.tar -c}
+@kbd{tar -c --file=archive.tar}
+@kbd{tar -c -f archive.tar}
+@kbd{tar -c -farchive.tar}
+@kbd{tar -cf archive.tar}
+@kbd{tar -cfarchive.tar}
+@kbd{tar -f archive.tar --create}
+@kbd{tar -f archive.tar -c}
+@kbd{tar -farchive.tar --create}
+@kbd{tar -farchive.tar -c}
+@kbd{tar c --file=archive.tar}
+@kbd{tar c -f archive.tar}
+@kbd{tar c -farchive.tar}
+@kbd{tar cf archive.tar}
+@kbd{tar f archive.tar --create}
+@kbd{tar f archive.tar -c}
+@kbd{tar fc archive.tar}
+@end smallexample
+
+On the other hand, the following commands are @emph{not} equivalent to
+the previous set:
+
+@smallexample
+@kbd{tar -f -c archive.tar}
+@kbd{tar -fc archive.tar}
+@kbd{tar -fcarchive.tar}
+@kbd{tar -farchive.tarc}
+@kbd{tar cfarchive.tar}
+@end smallexample
+
+@noindent
+These last examples mean something completely different from what the
+user intended (judging based on the example in the previous set which
+uses long options, whose intent is therefore very clear). The first
+four specify that the @command{tar} archive would be a file named
+@option{-c}, @samp{c}, @samp{carchive.tar} or @samp{archive.tarc},
+respectively. The first two examples also specify a single non-option,
+@var{name} argument having the value @samp{archive.tar}. The last
+example contains only old style option letters (repeating option
+@samp{c} twice), not all of which are meaningful (eg., @samp{.},
+@samp{h}, or @samp{i}), with no argument value.
+@FIXME{not sure i liked
+the first sentence of this paragraph..}
+
+@node All Options
+@section All @command{tar} Options
+
+The coming manual sections contain an alphabetical listing of all
+@command{tar} operations and options, with brief descriptions and
+cross-references to more in-depth explanations in the body of the manual.
+They also contain an alphabetically arranged table of the short option
+forms with their corresponding long option. You can use this table as
+a reference for deciphering @command{tar} commands in scripts.
+
+@menu
+* Operation Summary::
+* Option Summary::
+* Short Option Summary::
+* Position-Sensitive Options::
+@end menu
+
+@node Operation Summary
+@subsection Operations
+
+@table @option
+
+@opsummary{append}
+@item --append
+@itemx -r
+
+Appends files to the end of the archive. @xref{append}.
+
+@opsummary{catenate}
+@item --catenate
+@itemx -A
+
+Same as @option{--concatenate}. @xref{concatenate}.
+
+@opsummary{compare}
+@item --compare
+@itemx -d
+
+Compares archive members with their counterparts in the file
+system, and reports differences in file size, mode, owner,
+modification date and contents. @xref{compare}.
+
+@opsummary{concatenate}
+@item --concatenate
+@itemx -A
+
+Appends other @command{tar} archives to the end of the archive.
+@xref{concatenate}.
+
+@opsummary{create}
+@item --create
+@itemx -c
+
+Creates a new @command{tar} archive. @xref{create}.
+
+@opsummary{delete}
+@item --delete
+
+Deletes members from the archive. Don't try this on an archive on a
+tape! @xref{delete}.
+
+@opsummary{diff}
+@item --diff
+@itemx -d
+
+Same @option{--compare}. @xref{compare}.
+
+@opsummary{extract}
+@item --extract
+@itemx -x
+
+Extracts members from the archive into the file system. @xref{extract}.
+
+@opsummary{get}
+@item --get
+@itemx -x
+
+Same as @option{--extract}. @xref{extract}.
+
+@opsummary{list}
+@item --list
+@itemx -t
+
+Lists the members in an archive. @xref{list}.
+
+@opsummary{update}
+@item --update
+@itemx -u
+
+Adds files to the end of the archive, but only if they are newer than
+their counterparts already in the archive, or if they do not already
+exist in the archive. @xref{update}.
+
+@end table
+
+@node Option Summary
+@subsection @command{tar} Options
+
+@table @option
+
+@opsummary{absolute-names}
+@item --absolute-names
+@itemx -P
+
+Normally when creating an archive, @command{tar} strips an initial
+@samp{/} from member names, and when extracting from an archive @command{tar}
+treats names specially if they have initial @samp{/} or internal
+@samp{..}. This option disables that behavior. @xref{absolute}.
+
+@opsummary{acls}
+@item --acls
+Enable POSIX ACLs support. @xref{Extended File Attributes, acls}.
+
+@opsummary{after-date}
+@item --after-date
+
+(See @option{--newer}, @pxref{after})
+
+@opsummary{anchored}
+@item --anchored
+A pattern must match an initial subsequence of the name's components.
+@xref{controlling pattern-matching}.
+
+@opsummary{atime-preserve}
+@item --atime-preserve
+@itemx --atime-preserve=replace
+@itemx --atime-preserve=system
+
+Attempt to preserve the access time of files when reading them. This
+option currently is effective only on files that you own, unless you
+have superuser privileges.
+
+@option{--atime-preserve=replace} remembers the access time of a file
+before reading it, and then restores the access time afterwards. This
+may cause problems if other programs are reading the file at the same
+time, as the times of their accesses will be lost. On most platforms
+restoring the access time also requires @command{tar} to restore the
+data modification time too, so this option may also cause problems if
+other programs are writing the file at the same time (@command{tar} attempts
+to detect this situation, but cannot do so reliably due to race
+conditions). Worse, on most platforms restoring the access time also
+updates the status change time, which means that this option is
+incompatible with incremental backups.
+
+@option{--atime-preserve=system} avoids changing time stamps on files,
+without interfering with time stamp updates
+caused by other programs, so it works better with incremental backups.
+However, it requires a special @code{O_NOATIME} option from the
+underlying operating and file system implementation, and it also requires
+that searching directories does not update their access times. As of
+this writing (November 2005) this works only with Linux, and only with
+Linux kernels 2.6.8 and later. Worse, there is currently no reliable
+way to know whether this feature actually works. Sometimes
+@command{tar} knows that it does not work, and if you use
+@option{--atime-preserve=system} then @command{tar} complains and
+exits right away. But other times @command{tar} might think that the
+option works when it actually does not.
+
+Currently @option{--atime-preserve} with no operand defaults to
+@option{--atime-preserve=replace}, but this may change in the future
+as support for @option{--atime-preserve=system} improves.
+
+If your operating or file system does not support
+@option{--atime-preserve=@-system}, you might be able to preserve access
+times reliably 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.
+
+@opsummary{auto-compress}
+@item --auto-compress
+@itemx -a
+
+During a @option{--create} operation, enables automatic compressed
+format recognition based on the archive suffix. The effect of this
+option is cancelled by @option{--no-auto-compress}. @xref{gzip}.
+
+@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}.
+
+@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}.
+
+@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}.
+
+@opsummary{bzip2}
+@item --bzip2
+@itemx -j
+
+This option tells @command{tar} to read or write archives through
+@code{bzip2}. @xref{gzip}.
+
+@opsummary{check-device}
+@item --check-device
+Check device numbers when creating a list of modified files for
+incremental archiving. This is the default. @xref{device numbers},
+for a detailed description.
+
+@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. You can also instruct
+@command{tar} to execute a list of actions on each checkpoint, see
+@option{--checkpoint-action} below. For a detailed description, see
+@ref{checkpoints}.
+
+@opsummary{checkpoint-action}
+@item --checkpoint-action=@var{action}
+Instruct @command{tar} to execute an action upon hitting a
+breakpoint. Here we give only a brief outline. @xref{checkpoints},
+for a complete description.
+
+The @var{action} argument can be one of the following:
+
+@table @asis
+@item bell
+Produce an audible bell on the console.
+
+@item dot
+@itemx .
+Print a single dot on the standard listing stream.
+
+@item echo
+Display a textual message on the standard error, with the status and
+number of the checkpoint. This is the default.
+
+@item echo=@var{string}
+Display @var{string} on the standard error. Before output, the string
+is subject to meta-character expansion.
+
+@item exec=@var{command}
+Execute the given @var{command}.
+
+@item sleep=@var{time}
+Wait for @var{time} seconds.
+
+@item ttyout=@var{string}
+Output @var{string} on the current console (@file{/dev/tty}).
+@end table
+
+Several @option{--checkpoint-action} options can be specified. The
+supplied actions will be executed in order of their appearance in the
+command line.
+
+Using @option{--checkpoint-action} without @option{--checkpoint}
+assumes default checkpoint frequency of one checkpoint per 10 records.
+
+@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, which
+complies to UNIX98, was introduced with version
+1.15.91. @xref{Changes}, for more information.}.
+
+@xref{hard links}.
+
+@opsummary{compress}
+@opsummary{uncompress}
+@item --compress
+@itemx --uncompress
+@itemx -Z
+
+@command{tar} will use the @command{compress} program when reading or
+writing the archive. This allows you to directly act on archives
+while saving space. @xref{gzip}.
+
+@opsummary{clamp-mtime}
+@item --clamp-mtime
+
+(See @option{--mtime}.)
+
+@opsummary{confirmation}
+@item --confirmation
+
+(See @option{--interactive}.) @xref{interactive}.
+
+@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}.
+
+@opsummary{dereference}
+@item --dereference
+@itemx -h
+
+When reading or writing a file to be archived, @command{tar} accesses
+the file that a symbolic link points to, rather than the symlink
+itself. @xref{dereference}.
+
+@opsummary{directory}
+@item --directory=@var{dir}
+@itemx -C @var{dir}
+
+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}.
+
+@opsummary{exclude}
+@item --exclude=@var{pattern}
+
+When performing operations, @command{tar} will skip files that match
+@var{pattern}. @xref{exclude}.
+
+@opsummary{exclude-backups}
+@item --exclude-backups
+Exclude backup and lock files. @xref{exclude,, exclude-backups}.
+
+@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}.
+
+@opsummary{exclude-caches}
+@item --exclude-caches
+
+Exclude from dump any directory containing a valid cache directory
+tag file, but still dump the directory node and the tag file itself.
+
+@xref{exclude,, exclude-caches}.
+
+@opsummary{exclude-caches-under}
+@item --exclude-caches-under
+
+Exclude from dump any directory containing a valid cache directory
+tag file, but still dump the directory node itself.
+
+@xref{exclude}.
+
+@opsummary{exclude-caches-all}
+@item --exclude-caches-all
+
+Exclude from dump any directory containing a valid cache directory
+tag file. @xref{exclude}.
+
+@opsummary{exclude-ignore}
+@item --exclude-ignore=@var{file}
+Before dumping a directory, @command{tar} checks if it contains
+@var{file}. If so, exclusion patterns are read from this file.
+The patterns affect only the directory itself. @xref{exclude}.
+
+@opsummary{exclude-ignore-recursive}
+@item --exclude-ignore-recursive=@var{file}
+Before dumping a directory, @command{tar} checks if it contains
+@var{file}. If so, exclusion patterns are read from this file.
+The patterns affect the directory and all itssubdirectories.
+@xref{exclude}.
+
+@opsummary{exclude-tag}
+@item --exclude-tag=@var{file}
+
+Exclude from dump any directory containing file named @var{file}, but
+dump the directory node and @var{file} itself. @xref{exclude,, exclude-tag}.
+
+@opsummary{exclude-tag-under}
+@item --exclude-tag-under=@var{file}
+
+Exclude from dump the contents of any directory containing file
+named @var{file}, but dump the directory node itself. @xref{exclude,,
+exclude-tag-under}.
+
+@opsummary{exclude-tag-all}
+@item --exclude-tag-all=@var{file}
+
+Exclude from dump any directory containing file named @var{file}.
+@xref{exclude,,exclude-tag-all}.
+
+@opsummary{exclude-vcs}
+@item --exclude-vcs
+
+Exclude from dump directories and files, that are internal for some
+widely used version control systems.
+
+@xref{exclude-vcs}.
+
+@opsummary{exclude-vcs-ignores}
+@item --exclude-vcs-ignores
+Exclude files that match patterns read from VCS-specific ignore
+files. Supported files are: @file{.cvsignore}, @file{.gitignore},
+@file{.bzrignore}, and @file{.hgignore}. The semantics of each file
+is the same as for the corresponding VCS, e.g. patterns read from
+@file{.gitignore} affect the directory and all its subdirectories.
+@xref{exclude-vcs-ignores}.
+
+@opsummary{file}
+@item --file=@var{archive}
+@itemx -f @var{archive}
+
+@command{tar} will use the file @var{archive} as the @command{tar} archive it
+performs operations on, rather than @command{tar}'s compilation dependent
+default. @xref{file tutorial}.
+
+@opsummary{files-from}
+@item --files-from=@var{file}
+@itemx -T @var{file}
+
+@command{tar} will use the contents of @var{file} as a list of archive members
+or files to operate on, in addition to those specified on the
+command-line. @xref{files}.
+
+@opsummary{force-local}
+@item --force-local
+
+Forces @command{tar} to interpret the file name given to @option{--file}
+as a local file, even if it looks like a remote tape drive name.
+@xref{local and remote archives}.
+
+@opsummary{format}
+@item --format=@var{format}
+@itemx -H @var{format}
+
+Selects output archive format. @var{Format} may be one of the
+following:
+
+@table @samp
+@item v7
+Creates an archive that is compatible with Unix V7 @command{tar}.
+
+@item oldgnu
+Creates an archive that is compatible with GNU @command{tar} version
+1.12 or earlier.
+
+@item gnu
+Creates archive in GNU tar 1.13 format. Basically it is the same as
+@samp{oldgnu} with the only difference in the way it handles long
+numeric fields.
+
+@item ustar
+Creates a @acronym{POSIX.1-1988} compatible archive.
+
+@item posix
+Creates a @acronym{POSIX.1-2001 archive}.
+
+@end table
+
+@xref{Formats}, for a detailed discussion of these formats.
+
+@opsummary{full-time}
+@item --full-time
+This option instructs @command{tar} to print file times to their full
+resolution. Usually this means 1-second resolution, but that depends
+on the underlying file system. The @option{--full-time} option takes
+effect only when detailed output (verbosity level 2 or higher) has
+been requested using the @option{--verbose} option, e.g., when listing
+or extracting archives:
+
+@smallexample
+$ @kbd{tar -t -v --full-time -f archive.tar}
+@end smallexample
+
+@noindent
+or, when creating an archive:
+
+@smallexample
+$ @kbd{tar -c -vv --full-time -f archive.tar .}
+@end smallexample
+
+Notice, thar when creating the archive you need to specify
+@option{--verbose} twice to get a detailed output (@pxref{verbose
+tutorial}).
+
+@opsummary{group}
+@item --group=@var{group}
+
+Files added to the @command{tar} archive will have a group @acronym{ID} of @var{group},
+rather than the group from the source file. @var{group} can specify a
+symbolic name, or a numeric @acronym{ID}, or both as
+@var{name}:@var{id}. @xref{override}.
+
+Also see the @option{--group-map} option and comments for the
+@option{--owner=@var{user}} option.
+
+@opsummary{group-map}
+@item --group-map=@var{file}
+
+Read owner group translation map from @var{file}. This option allows to
+translate only certain group names and/or UIDs. @xref{override}, for a
+detailed description. When used together with @option{--group}
+option, the latter affects only those files whose owner group is not listed
+in the @var{file}.
+
+This option does not affect extraction from archives.
+
+@opsummary{gzip}
+@opsummary{gunzip}
+@opsummary{ungzip}
+@item --gzip
+@itemx --gunzip
+@itemx --ungzip
+@itemx -z
+
+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}.
+
+@opsummary{hard-dereference}
+@item --hard-dereference
+When creating an archive, dereference hard links and store the files
+they refer to, instead of creating usual hard link members.
+
+@xref{hard links}.
+
+@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}.
+
+@opsummary{hole-detection}
+@item --hole-detection=@var{method}
+Use @var{method} to detect holes in sparse files. This option implies
+@option{--sparse}. Valid methods are @samp{seek} and @samp{raw}.
+Default is @samp{seek} with fallback to @samp{raw} when not
+applicable. @xref{sparse}.
+
+@opsummary{ignore-case}
+@item --ignore-case
+Ignore case when matching member or file names with
+patterns. @xref{controlling pattern-matching}.
+
+@opsummary{ignore-command-error}
+@item --ignore-command-error
+Ignore exit codes of subprocesses. @xref{Writing to an External Program}.
+
+@opsummary{ignore-failed-read}
+@item --ignore-failed-read
+
+Do not exit unsuccessfully merely because an unreadable file was encountered.
+@xref{Ignore Failed Read}.
+
+@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}.
+
+@opsummary{incremental}
+@item --incremental
+@itemx -G
+
+Informs @command{tar} that it is working with an old
+@acronym{GNU}-format incremental backup archive. It is intended
+primarily for backwards compatibility only. @xref{Incremental Dumps},
+for a detailed discussion of incremental archives.
+
+@opsummary{index-file}
+@item --index-file=@var{file}
+
+Send verbose output to @var{file} instead of to standard output.
+
+@opsummary{info-script}
+@opsummary{new-volume-script}
+@item --info-script=@var{command}
+@itemx --new-volume-script=@var{command}
+@itemx -F @var{command}
+
+When @command{tar} is performing multi-tape backups, @var{command} is run
+at the end of each tape. If it exits with nonzero status,
+@command{tar} fails immediately. @xref{info-script}, for a detailed
+discussion of this feature.
+
+@opsummary{interactive}
+@item --interactive
+@itemx --confirmation
+@itemx -w
+
+Specifies that @command{tar} should ask the user for confirmation before
+performing potentially destructive options, such as overwriting files.
+@xref{interactive}.
+
+@opsummary{keep-directory-symlink}
+@item --keep-directory-symlink
+
+This option changes the behavior of tar when it encounters a symlink
+with the same name as the directory that it is about to extract. By
+default, in this case tar would first remove the symlink and then
+proceed extracting the directory.
+
+The @option{--keep-directory-symlink} option disables this behavior
+and instructs tar to follow symlinks to directories when extracting
+from the archive.
+
+It is mainly intended to provide compatibility with the Slackware
+installation scripts.
+
+@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.
+
+@opsummary{keep-old-files}
+@item --keep-old-files
+@itemx -k
+
+Do not overwrite existing files when extracting files from an
+archive. Return error if such files exist. See also
+@ref{--skip-old-files}.
+
+@xref{Keep Old Files}.
+
+@opsummary{label}
+@item --label=@var{name}
+@itemx -V @var{name}
+
+When creating an archive, instructs @command{tar} to write @var{name}
+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}.
+
+@opsummary{level}
+@item --level=@var{n}
+Force incremental backup of level @var{n}. As of @GNUTAR version
+@value{VERSION}, the option @option{--level=0} truncates the snapshot
+file, thereby forcing the level 0 dump. Other values of @var{n} are
+effectively ignored. @xref{--level=0}, for details and examples.
+
+The use of this option is valid only in conjunction with the
+@option{--listed-incremental} option. @xref{Incremental Dumps},
+for a detailed description.
+
+@opsummary{listed-incremental}
+@item --listed-incremental=@var{snapshot-file}
+@itemx -g @var{snapshot-file}
+
+During a @option{--create} operation, specifies that the archive that
+@command{tar} creates is a new @acronym{GNU}-format incremental
+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}.
+
+@opsummary{lzip}
+@item --lzip
+
+This option tells @command{tar} to read or write archives through
+@command{lzip}. @xref{gzip}.
+
+@opsummary{lzma}
+@item --lzma
+
+This option tells @command{tar} to read or write archives through
+@command{lzma}. @xref{gzip}.
+
+@item --lzop
+
+This option tells @command{tar} to read or write archives through
+@command{lzop}. @xref{gzip}.
+
+@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. @var{permissions} can be specified either as an octal
+number or as symbolic permissions, like with
+@command{chmod}. @xref{override}.
+
+@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}.
+
+When @command{--clamp-mtime} is also specified, files with
+modification times earlier than @var{date} will retain their actual
+modification times, and @var{date} will only be used for files whose
+modification times are later than @var{date}.
+
+@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}.
+
+@opsummary{new-volume-script}
+@item --new-volume-script
+
+(see @option{--info-script})
+
+@opsummary{newer}
+@item --newer=@var{date}
+@itemx --after-date=@var{date}
+@itemx -N
+
+When creating an archive, @command{tar} will only add files that have changed
+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}.
+
+@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). @xref{after}.
+
+@opsummary{no-acls}
+@item --no-acls
+Disable the POSIX ACLs support. @xref{Extended File Attributes, acls}.
+
+@opsummary{no-anchored}
+@item --no-anchored
+An exclude pattern can match any subsequence of the name's components.
+@xref{controlling pattern-matching}.
+
+@opsummary{no-auto-compress}
+@item --no-auto-compress
+
+Disables automatic compressed format recognition based on the archive
+suffix. @xref{--auto-compress}. @xref{gzip}.
+
+@opsummary{no-check-device}
+@item --no-check-device
+Do not check device numbers when creating a list of modified files
+for incremental archiving. @xref{device numbers}, for
+a detailed description.
+
+@opsummary{no-delay-directory-restore}
+@item --no-delay-directory-restore
+
+Modification times and permissions of extracted
+directories are set when all files from this directory have been
+extracted. This is the default.
+@xref{Directory Modification Times and Permissions}.
+
+@opsummary{no-ignore-case}
+@item --no-ignore-case
+Use case-sensitive matching.
+@xref{controlling pattern-matching}.
+
+@opsummary{no-ignore-command-error}
+@item --no-ignore-command-error
+Print warnings about subprocesses that terminated with a nonzero exit
+code. @xref{Writing to an External Program}.
+
+@opsummary{no-null}
+@item --no-null
+
+If the @option{--null} option was given previously, this option
+cancels its effect, so that any following @option{--files-from}
+options will expect their file lists to be newline-terminated.
+
+@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}
+Remove characters listed in @var{string} from the list of quoted
+characters set by the previous @option{--quote-chars} option
+(@pxref{quoting styles}).
+
+@opsummary{no-recursion}
+@item --no-recursion
+
+With this option, @command{tar} will not recurse into directories.
+@xref{recurse}.
+
+@opsummary{no-same-owner}
+@item --no-same-owner
+@itemx -o
+
+When extracting an archive, do not attempt to preserve the owner
+specified in the @command{tar} archive. This the default behavior
+for ordinary users.
+
+@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.
+
+@opsummary{no-seek}
+@item --no-seek
+
+The archive media does not support seeks to arbitrary
+locations. Usually @command{tar} determines automatically whether
+the archive can be seeked or not. Use this option to disable this
+mechanism.
+
+@opsummary{no-selinux}
+@item --no-selinux
+Disable SELinux context support. @xref{Extended File Attributes, SELinux}.
+
+@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-verbatim-files-from}
+@item --no-verbatim-files-from
+
+Instructs @GNUTAR{} to treat each line read from a file list as if it
+were supplied in the command line. I.e., leading and trailing
+whitespace is removed and, if the result begins with a dash, it is
+treated as a @GNUTAR{} command line option.
+
+This is default behavior. This option is provided as a way to restore
+it after @option{--verbatim-files-from} option.
+
+It is implied by the @option{--no-null} option.
+
+@xref{no-verbatim-files-from}.
+
+@opsummary{no-wildcards}
+@item --no-wildcards
+Do not use wildcards.
+@xref{controlling pattern-matching}.
+
+@opsummary{no-wildcards-match-slash}
+@item --no-wildcards-match-slash
+Wildcards do not match @samp{/}.
+@xref{controlling pattern-matching}.
+
+@opsummary{no-xattrs}
+@item --no-xattrs
+Disable extended attributes support. @xref{Extended File Attributes, xattrs}.
+
+@opsummary{null}
+@item --null
+
+When @command{tar} is using the @option{--files-from} option, this option
+instructs @command{tar} to expect file names terminated with
+@acronym{NUL}, and to process file names verbatim.
+
+This means that @command{tar} correctly works with file names that
+contain newlines or begin with a dash.
+
+@xref{nul}.
+
+See also @ref{verbatim-files-from}.
+
+@opsummary{numeric-owner}
+@item --numeric-owner
+
+This option will notify @command{tar} that it should use numeric user
+and group IDs when creating a @command{tar} file, rather than names.
+@xref{Attributes}.
+
+@item -o
+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, it is a synonym for
+@option{--old-archive}. This behavior is for compatibility
+with previous versions of @GNUTAR{}, and will be
+removed in future releases.
+
+@xref{Changes}, for more information.
+
+@opsummary{occurrence}
+@item --occurrence[=@var{number}]
+
+This option can be used in conjunction with one of the subcommands
+@option{--delete}, @option{--diff}, @option{--extract} or
+@option{--list} when a list of files is given either on the command
+line or via @option{-T} option.
+
+This option instructs @command{tar} to process only the @var{number}th
+occurrence of each named file. @var{Number} defaults to 1, so
+
+@smallexample
+tar -x -f archive.tar --occurrence filename
+@end smallexample
+
+@noindent
+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.
+
+@opsummary{old-archive}
+@item --old-archive
+Synonym for @option{--format=v7}.
+
+@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
+directory.
+
+@opsummary{one-top-level}
+@item --one-top-level[=@var{dir}]
+Tells @command{tar} to create a new directory beneath the extraction directory
+(or the one passed to @option{-C}) and use it to guard against
+tarbombs. In the absence of @var{dir} argument, the name of the new directory
+will be equal to the base name of the archive (file name minus the
+archive suffix, if recognized). Any member names that do not begin
+with that directory name (after
+transformations from @option{--transform} and
+@option{--strip-components}) will be prefixed with it. Recognized
+file name suffixes are @samp{.tar}, and any compression suffixes
+recognizable by @xref{--auto-compress}.
+
+@opsummary{overwrite}
+@item --overwrite
+
+Overwrite existing files and directory metadata when extracting files
+from an archive. @xref{Overwrite Old Files}.
+
+@opsummary{overwrite-dir}
+@item --overwrite-dir
+
+Overwrite the metadata of existing directories when extracting files
+from an archive. @xref{Overwrite Old Files}.
+
+@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} can specify a symbolic name, or a numeric
+@acronym{ID}, or both as @var{name}:@var{id}.
+@xref{override}.
+
+This option does not affect extraction from archives. See also
+@option{--owner-map}, below.
+
+@opsummary{owner-map}
+@item --owner-map=@var{file}
+
+Read owner translation map from @var{file}. This option allows to
+translate only certain owner names or UIDs. @xref{override}, for a
+detailed description. When used together with @option{--owner}
+option, the latter affects only those files whose owner is not listed
+in the @var{file}.
+
+This option does not affect extraction from archives.
+
+@opsummary{pax-option}
+@item --pax-option=@var{keyword-list}
+This option enables creation of the archive in @acronym{POSIX.1-2001}
+format (@pxref{posix}) and modifies the way @command{tar} handles the
+extended header keywords. @var{Keyword-list} is a comma-separated
+list of keyword options. @xref{PAX keywords}, for a detailed
+discussion.
+
+@opsummary{portability}
+@item --portability
+@itemx --old-archive
+Synonym for @option{--format=v7}.
+
+@opsummary{posix}
+@item --posix
+Same as @option{--format=posix}.
+
+@opsummary{preserve-order}
+@item --preserve-order
+
+(See @option{--same-order}; @pxref{Reading}.)
+
+@opsummary{preserve-permissions}
+@opsummary{same-permissions}
+@item --preserve-permissions
+@itemx --same-permissions
+@itemx -p
+
+When @command{tar} is extracting an archive, it normally subtracts the
+users' umask from the permissions specified in the archive and uses
+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}.
+
+@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}).
+
+@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:
+@code{literal}, @code{shell}, @code{shell-always}, @code{c},
+@code{escape}, @code{locale}, and @code{clocale}. Default quoting
+style is @code{escape}, unless overridden while configuring the
+package.
+
+@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}.
+
+@opsummary{record-size}
+@item --record-size=@var{size}[@var{suf}]
+
+Instructs @command{tar} to use @var{size} bytes per record when accessing the
+archive. The argument can be suffixed with a @dfn{size suffix}, e.g.
+@option{--record-size=10K} for 10 Kilobytes. @xref{size-suffixes},
+for a list of valid suffixes. @xref{Blocking Factor}, for a detailed
+description of this option.
+
+@opsummary{recursion}
+@item --recursion
+
+With this option, @command{tar} recurses into directories (default).
+@xref{recurse}.
+
+@opsummary{recursive-unlink}
+@item --recursive-unlink
+
+Remove existing
+directory hierarchies before extracting directories of the same name
+from the archive. @xref{Recursive Unlink}.
+
+@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}.
+
+@opsummary{restrict}
+@item --restrict
+
+Disable use of some potentially harmful @command{tar} options.
+Currently this option disables shell invocation from multi-volume menu
+(@pxref{Using Multiple Tapes}).
+
+@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}).
+
+@opsummary{rsh-command}
+@item --rsh-command=@var{cmd}
+
+Notifies @command{tar} that is should use @var{cmd} to communicate with remote
+devices. @xref{Device}.
+
+@opsummary{same-order}
+@item --same-order
+@itemx --preserve-order
+@itemx -s
+
+This option is an optimization for @command{tar} when running on machines with
+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}.
+
+@opsummary{same-owner}
+@item --same-owner
+
+When extracting an archive, @command{tar} will attempt to preserve the owner
+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}.
+
+@opsummary{same-permissions}
+@item --same-permissions
+
+(See @option{--preserve-permissions}; @pxref{Setting Access Permissions}.)
+
+@opsummary{seek}
+@item --seek
+@itemx -n
+
+Assume that the archive media supports seeks to arbitrary
+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. It takes effect only if the
+archive is open for reading (e.g. with @option{--list} or
+@option{--extract} options).
+
+@opsummary{selinux}
+@item --selinux
+Enable the SELinux context support.
+@xref{Extended File Attributes, selinux}.
+
+@opsummary{show-defaults}
+@item --show-defaults
+
+Displays the default options used by @command{tar} and exits
+successfully. This option is intended for use in shell scripts.
+Here is an example of what you can see using this option:
+
+@smallexample
+$ @kbd{tar --show-defaults}
+--format=gnu -f- -b20 --quoting-style=escape
+--rmt-command=/usr/libexec/rmt --rsh-command=/usr/bin/rsh
+@end smallexample
+
+@noindent
+Notice, that this option outputs only one line. The example output
+above has been split to fit page boundaries. @xref{defaults}.
+
+@opsummary{show-omitted-dirs}
+@item --show-omitted-dirs
+
+Instructs @command{tar} to mention the directories it is skipping when
+operating on a @command{tar} archive. @xref{show-omitted-dirs}.
+
+@opsummary{show-snapshot-field-ranges}
+@item --show-snapshot-field-ranges
+
+Displays the range of values allowed by this version of @command{tar}
+for each field in the snapshot file, then exits successfully.
+@xref{Snapshot Files}.
+
+@opsummary{show-transformed-names}
+@opsummary{show-stored-names}
+@item --show-transformed-names
+@itemx --show-stored-names
+
+Display file or member names after applying any transformations
+(@pxref{transform}). In particular, when used in conjunction with one of
+the archive creation operations it instructs @command{tar} to list the
+member names stored in the archive, as opposed to the actual file
+names. @xref{listing member and file names}.
+
+@opsummary{skip-old-files}
+@item --skip-old-files
+
+Do not overwrite existing files when extracting files from an
+archive. @xref{Keep Old Files}.
+
+This option differs from @option{--keep-old-files} in that it does not
+treat such files as an error, instead it just silently avoids
+overwriting them.
+
+The @option{--warning=existing-file} option can be used together with
+this option to produce warning messages about existing old files
+(@pxref{warnings}).
+
+@opsummary{sort}
+@item --sort=@var{order}
+Specify the directory sorting order when reading directories.
+@var{Order} may be one of the following:
+
+@table @samp
+@item none
+No directory sorting is performed. This is the default.
+
+@item name
+Sort the directory entries on name. The operating system may deliver
+directory entries in a more or less random order, and sorting them
+makes archive creation reproducible.
+
+@item inode
+Sort the directory entries on inode number. Sorting directories on
+inode number may reduce the amount of disk seek operations when
+creating an archive for some file systems.
+
+@end table
+
+@opsummary{sparse}
+@item --sparse
+@itemx -S
+
+Invokes a @acronym{GNU} extension when adding files to an archive that handles
+sparse files efficiently. @xref{sparse}.
+
+@opsummary{sparse-version}
+@item --sparse-version=@var{version}
+
+Specifies the @dfn{format version} to use when archiving sparse
+files. Implies @option{--sparse}. @xref{sparse}. For the description
+of the supported sparse formats, @xref{Sparse Formats}.
+
+@opsummary{starting-file}
+@item --starting-file=@var{name}
+@itemx -K @var{name}
+
+This option affects extraction only; @command{tar} will skip extracting
+files in the archive until it finds one that matches @var{name}.
+@xref{Scarce}.
+
+@opsummary{strip-components}
+@item --strip-components=@var{number}
+Strip given @var{number} of leading components from file names before
+extraction. For example, if archive @file{archive.tar} contained
+@file{/some/file/name}, then running
+
+@smallexample
+tar --extract --file archive.tar --strip-components=2
+@end smallexample
+
+@noindent
+would extract this file to file @file{name}.
+
+@xref{transform}.
+
+@opsummary{suffix}
+@item --suffix=@var{suffix}
+
+Alters the suffix @command{tar} uses when backing up files from the default
+@samp{~}. @xref{backup}.
+
+@opsummary{tape-length}
+@item --tape-length=@var{num}[@var{suf}]
+@itemx -L @var{num}[@var{suf}]
+
+Specifies the length of tapes that @command{tar} is writing as being
+@w{@var{num} x 1024} bytes long. If optional @var{suf} is given, it
+specifies a multiplicative factor to be used instead of 1024. For
+example, @samp{-L2M} means 2 megabytes. @xref{size-suffixes}, for a
+list of allowed suffixes. @xref{Using Multiple Tapes}, for a detailed
+discussion of this option.
+
+@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}.
+
+@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}.
+
+@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}.
+
+@opsummary{totals}
+@item --totals[=@var{signo}]
+
+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}.
+
+@opsummary{touch}
+@item --touch
+@itemx -m
+
+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}.
+
+@opsummary{transform}
+@opsummary{xform}
+@item --transform=@var{sed-expr}
+@itemx --xform=@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{uncompress}
+@item --uncompress
+
+(See @option{--compress}, @pxref{gzip})
+
+@opsummary{ungzip}
+@item --ungzip
+
+(See @option{--gzip}, @pxref{gzip})
+
+@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}.
+
+@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}
+@itemx -I=@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}.
+
+@opsummary{utc}
+@item --utc
+
+Display file modification dates in @acronym{UTC}. This option implies
+@option{--verbose}.
+
+@opsummary{verbatim-files-from}
+@item --verbatim-files-from
+
+Instructs @GNUTAR{} to treat each line read from a file list as a file
+name, even if it starts with a dash.
+
+File lists are supplied with the @option{--files-from} (@option{-T})
+option. By default, each line read from a file list is first trimmed
+off the leading and trailing whitespace and, if the result begins with
+a dash, it is treated as a @GNUTAR{} command line option.
+
+Use the @option{--verbatim-files-from} option to disable this special
+handling. This facilitates the use of @command{tar} with file lists
+created by @command{file} command.
+
+This option affects all @option{--files-from} options that occur after
+it in the command line. Its effect is reverted by the
+@option{--no-verbatim-files-from} option.
+
+This option is implied by the @option{--null} option.
+
+@xref{verbatim-files-from}.
+
+@opsummary{verbose}
+@item --verbose
+@itemx -v
+
+Specifies that @command{tar} should be more verbose about the
+operations it is performing. This option can be specified multiple
+times for some operations to increase the amount of information displayed.
+@xref{verbose}.
+
+@opsummary{verify}
+@item --verify
+@itemx -W
+
+Verifies that the archive was correctly written when creating an
+archive. @xref{verify}.
+
+@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}.
+
+@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 it is working in
+@var{file}. @xref{volno-file}.
+
+@opsummary{warning}
+@item --warning=@var{keyword}
+
+Enable or disable warning messages identified by @var{keyword}. The
+messages are suppressed if @var{keyword} is prefixed with @samp{no-}.
+@xref{warnings}.
+
+@opsummary{wildcards}
+@item --wildcards
+Use wildcards when matching member names with patterns.
+@xref{controlling pattern-matching}.
+
+@opsummary{wildcards-match-slash}
+@item --wildcards-match-slash
+Wildcards match @samp{/}.
+@xref{controlling pattern-matching}.
+
+@opsummary{xattrs}
+@item --xattrs
+Enable extended attributes support. @xref{Extended File Attributes, xattrs}.
+
+@opsummary{xattrs-exclude}
+@item --xattrs-exclude=@var{pattern}
+Specify exclude pattern for xattr keys.
+@xref{Extended File Attributes, xattrs-exclude}.
+
+@opsummary{xattrs-include}
+@item --xattrs-include=@var{pattern}.
+Specify include pattern for xattr keys. @var{pattern} is a POSIX
+regular expression, e.g. @samp{--xattrs-exclude='^user\.'} to include
+only attributes from the user namespace.
+@xref{Extended File Attributes, xattrs-include}.
+
+@opsummary{xz}
+@item --xz
+@itemx -J
+Use @command{xz} for compressing or decompressing the archives. @xref{gzip}.
+
+@end table
+
+@node Short Option Summary
+@subsection Short Options Cross Reference
+
+Here is an alphabetized list of all of the short option forms, matching
+them with the equivalent long option.
+
+@multitable @columnfractions 0.20 0.80
+@headitem Short Option @tab Reference
+
+@item -A @tab @ref{--concatenate}.
+
+@item -B @tab @ref{--read-full-records}.
+
+@item -C @tab @ref{--directory}.
+
+@item -F @tab @ref{--info-script}.
+
+@item -G @tab @ref{--incremental}.
+
+@item -J @tab @ref{--xz}.
+
+@item -K @tab @ref{--starting-file}.
+
+@item -L @tab @ref{--tape-length}.
+
+@item -M @tab @ref{--multi-volume}.
+
+@item -N @tab @ref{--newer}.
+
+@item -O @tab @ref{--to-stdout}.
+
+@item -P @tab @ref{--absolute-names}.
+
+@item -R @tab @ref{--block-number}.
+
+@item -S @tab @ref{--sparse}.
+
+@item -T @tab @ref{--files-from}.
+
+@item -U @tab @ref{--unlink-first}.
+
+@item -V @tab @ref{--label}.
+
+@item -W @tab @ref{--verify}.
+
+@item -X @tab @ref{--exclude-from}.
+
+@item -Z @tab @ref{--compress}.
+
+@item -b @tab @ref{--blocking-factor}.
+
+@item -c @tab @ref{--create}.
+
+@item -d @tab @ref{--compare}.
+
+@item -f @tab @ref{--file}.
+
+@item -g @tab @ref{--listed-incremental}.
+
+@item -h @tab @ref{--dereference}.
+
+@item -i @tab @ref{--ignore-zeros}.
+
+@item -j @tab @ref{--bzip2}.
+
+@item -k @tab @ref{--keep-old-files}.
+
+@item -l @tab @ref{--check-links}.
+
+@item -m @tab @ref{--touch}.
+
+@item -o @tab When creating, @ref{--no-same-owner}, when extracting ---
+@ref{--portability}.
+
+The latter usage is deprecated. It is retained for compatibility with
+the earlier versions of @GNUTAR{}. In future releases
+@option{-o} will be equivalent to @option{--no-same-owner} only.
+
+@item -p @tab @ref{--preserve-permissions}.
+
+@item -r @tab @ref{--append}.
+
+@item -s @tab @ref{--same-order}.
+
+@item -t @tab @ref{--list}.
+
+@item -u @tab @ref{--update}.
+
+@item -v @tab @ref{--verbose}.
+
+@item -w @tab @ref{--interactive}.
+
+@item -x @tab @ref{--extract}.
+
+@item -z @tab @ref{--gzip}.
+
+@end multitable
+
+@node Position-Sensitive Options
+@subsection Position-Sensitive Options
+
+Some @GNUTAR{} options can be used multiple times in the same
+invocation and affect all arguments that appear after them. These are
+options that control how file names are selected and what kind of
+pattern matching is used.
+
+The most obvious example is the @option{-C} option. It instructs @command{tar}
+to change to the directory given as its argument prior to processing
+the rest of command line (@pxref{directory}). Thus, in the following
+command:
+
+@example
+@kbd{tar -c -f a.tar -C /etc passwd -C /var log spool}
+@end example
+
+@noindent
+the file @file{passwd} will be searched in the directory @file{/etc},
+and files @file{log} and @file{spool} -- in @file{/var}.
+
+These options can also be used in a file list supplied with the
+@option{--files-from} (@option{-T}) option (@pxref{files}). In that
+case they affect all files (patterns) appearing in that file after
+them and remain in effect for any arguments processed after that file.
+For example, if the file @file{list.txt} contained:
+
+@example
+README
+-C src
+main.c
+@end example
+
+@noindent
+and @command{tar} were invoked as follows:
+
+@example
+@kbd{tar -c -f a.tar -T list.txt Makefile}
+@end example
+
+@noindent
+then the file @file{README} would be looked up in the current working
+directory, and files @file{main.c} and @file{Makefile} would be looked
+up in the directory @file{src}.
+
+Many options can be prefixed with @option{--no-} to cancel the effect
+of the original option.
+
+For example, the @option{--recursion} option controls whether to
+recurse in the subdirectories. It's counterpart
+@option{--no-recursion} disables this. Consider the command below. It will
+store in the archive the directory @file{/usr} with all files and
+directories that are located in it as well as any files and
+directories in @file{/var}, without recursing into them@footnote{The @option{--recursion}
+option is the default and is used here for clarity. The same example
+can be written as:
+
+@example
+tar -cf a.tar /usr --no-recursion /var/*
+@end example
+}:
+
+@example
+tar -cf a.tar --recursion /usr --no-recursion /var/*
+@end example
+
+The following table summarizes all position-sensitive options.
+
+@table @option
+@item --directory=@var{dir}
+@itemx -C @var{dir}
+@xref{directory}.
+
+@item --null
+@itemx --no-null
+@xref{nul}.
+
+@item --unquote
+@itemx --no-unquote
+@xref{input name quoting}.
+
+@item --verbatim-files-from
+@itemx --no-verbatim-files-from
+@xref{verbatim-files-from}.
+
+@item --recursion
+@itemx --no-recursion
+@xref{recurse}.
+
+@item --anchored
+@itemx --no-anchored
+@xref{anchored patterns}.
+
+@item --ignore-case
+@itemx --no-ignore-case
+@xref{case-insensitive matches}.
+
+@item --wildcards
+@itemx --no-wildcards
+@xref{controlling pattern-matching}.
+
+@item --wildcards-match-slash
+@itemx --no-wildcards-match-slash
+@xref{controlling pattern-matching}.
+
+@item --exclude
+@xref{exclude}.
+
+@item --exclude-from
+@itemx -X
+@itemx --exclude-caches
+@itemx --exclude-caches-under
+@itemx --exclude-caches-all
+@itemx --exclude-tag
+@itemx --exclude-ignore
+@itemx --exclude-ignore-recursive
+@itemx --exclude-tag-under
+@itemx --exclude-tag-all
+@itemx --exclude-vcs
+@itemx --exclude-vcs-ignores
+@itemx --exclude-backups
+@xref{exclude}.
+@end table
+
+@node help
+@section @GNUTAR{} documentation
+
+@cindex Getting program version number
+@opindex version
+@cindex Version of the @command{tar} program
+Being careful, the first thing is really checking that you are using
+@GNUTAR{}, indeed. The @option{--version} option
+causes @command{tar} to print information about its name, version,
+origin and legal status, all on standard output, and then exit
+successfully. For example, @w{@samp{tar --version}} might print:
+
+@smallexample
+tar (GNU tar) @value{VERSION}
+Copyright (C) 2013-2016 Free Software Foundation, Inc.
+License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Written by John Gilmore and Jay Fenlason.
+@end smallexample
+
+@noindent
+The first occurrence of @samp{tar} in the result above is the program
+name in the package (for example, @command{rmt} is another program),
+while the second occurrence of @samp{tar} is the name of the package
+itself, containing possibly many programs. The package is currently
+named @samp{tar}, after the name of the main program it
+contains@footnote{There are plans to merge the @command{cpio} and
+@command{tar} packages into a single one which would be called
+@code{paxutils}. So, who knows if, one of this days, the
+@option{--version} would not output @w{@samp{tar (@acronym{GNU}
+paxutils) 3.2}}.}.
+
+@cindex Obtaining help
+@cindex Listing all @command{tar} options
+@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{}
+has a short help feature, triggerable through the
+@option{--help} option. By using this option, @command{tar} will
+print a usage message listing all available options on standard
+output, then exit successfully, without doing anything else and
+ignoring all other options. Even if this is only a brief summary, it
+may be several screens long. So, if you are not using some kind of
+scrollable window, you might prefer to use something like:
+
+@smallexample
+$ @kbd{tar --help | less}
+@end smallexample
+
+@noindent
+presuming, here, that you like using @command{less} for a pager. Other
+popular pagers are @command{more} and @command{pg}. If you know about some
+@var{keyword} which interests you and do not want to read all the
+@option{--help} output, another common idiom is doing:
+
+@smallexample
+tar --help | grep @var{keyword}
+@end smallexample
+
+@noindent
+for getting only the pertinent lines. Notice, however, that some
+@command{tar} options have long description lines and the above
+command will list only the first of them.
+
+The exact look of the option summary displayed by @kbd{tar --help} is
+configurable. @xref{Configuring Help Summary}, for a detailed description.
+
+@opindex usage
+If you only wish to check the spelling of an option, running @kbd{tar
+--usage} may be a better choice. This will display a terse list of
+@command{tar} options without accompanying explanations.
+
+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 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
+usual way (contact your local guru to know how). If @GNUTAR{}
+has been conveniently installed at your place, this
+manual is also available in interactive, hypertextual form as an Info
+file. Just call @w{@samp{info tar}} or, if you do not have the
+@command{info} program handy, use the Info reader provided within
+@acronym{GNU} Emacs, calling @samp{tar} from the main Info menu.
+
+There is currently no @code{man} page for @GNUTAR{}.
+If you observe such a @code{man} page on the system you are running,
+either it does not belong to @GNUTAR{}, or it has not
+been produced by @acronym{GNU}. Some package maintainers convert
+@kbd{tar --help} output to a man page, using @command{help2man}. In
+any case, please bear in mind that the authoritative source of
+information about @GNUTAR{} is this Texinfo documentation.
+
+@node defaults
+@section Obtaining @GNUTAR{} default values
+
+@opindex show-defaults
+@GNUTAR{} has some predefined defaults that are used when you do not
+explicitly specify another values. To obtain a list of such
+defaults, use @option{--show-defaults} option. This will output the
+values in the form of @command{tar} command line options:
+
+@smallexample
+@group
+$ @kbd{tar --show-defaults}
+--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
+output as the archive, if no @option{--file} option has been given
+(@pxref{file tutorial}), the default blocking factor is 20
+(@pxref{Blocking Factor}). It also shows the default locations where
+@command{tar} will look for @command{rmt} and @command{rsh} binaries.
+
+@node verbose
+@section Checking @command{tar} progress
+
+Typically, @command{tar} performs most operations without reporting any
+information to the user except error messages. When using @command{tar}
+with many options, particularly ones with complicated or
+difficult-to-predict behavior, it is possible to make serious mistakes.
+@command{tar} provides several options that make observing @command{tar}
+easier. These options cause @command{tar} to print information as it
+progresses in its job, and you might want to use them just for being
+more careful about what is going on, or merely for entertaining
+yourself. If you have encountered a problem when operating on an
+archive, however, you may need more information than just an error
+message in order to solve the problem. The following options can be
+helpful diagnostic tools.
+
+@cindex Verbose operation
+@opindex verbose
+Normally, the @option{--list} (@option{-t}) command to list an archive
+prints just the file names (one per line) and the other commands are
+silent. When used with most operations, the @option{--verbose}
+(@option{-v}) option causes @command{tar} to print the name of each
+file or archive member as it is processed. This and the other options
+which make @command{tar} print status information can be useful in
+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
+(@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}
+$ @kbd{tar xvvf archive.tar}
+@end smallexample
+
+Verbose output appears on the standard output except when an archive is
+being written to the standard output, as with @samp{tar --create
+--file=- --verbose} (@samp{tar cvf -}, or even @samp{tar cv}---if the
+installer let standard output be the default archive). In that case
+@command{tar} writes verbose output to the standard error stream.
+
+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 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.:
+
+@smallexample
+@group
+$ @kbd{tar -c -f archive.tar --totals /home}
+Total bytes written: 7924664320 (7.4GiB, 85MiB/s)
+@end group
+@end smallexample
+
+When reading an archive, this option displays the number of bytes
+read:
+
+@smallexample
+@group
+$ @kbd{tar -x -f archive.tar --totals}
+Total bytes read: 7924664320 (7.4GiB, 95MiB/s)
+@end group
+@end smallexample
+
+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
+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@footnote{This is
+actually a shortcut for @option{--checkpoint=@var{n}
+--checkpoint-action=dot}. @xref{checkpoints, dot}.}. For example:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=.1000} /var
+...
+@end smallexample
+
+The @option{--checkpoint} option provides a flexible mechanism for
+executing arbitrary actions upon hitting checkpoints, see the next
+section (@pxref{checkpoints}), for more information on it.
+
+@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
+every message it would normally produce, the block number within the
+archive where the message was triggered. Also, supplementary messages
+are triggered when reading blocks full of NULs, or when hitting end of
+file on the archive. As of now, if the archive is properly terminated
+with a NUL block, the reading of the file may stop before end of file
+is met, so the position of end of file will not usually show when
+@option{--block-number} (@option{-R}) is used. Note that @GNUTAR{}
+drains the archive before exiting when reading the
+archive from a pipe.
+
+@cindex Error message, block number of
+This option is especially useful when reading damaged archives, since
+it helps pinpoint the damaged sections. It can also be used with
+@option{--list} (@option{-t}) when listing a file-system backup tape, allowing you to
+choose among several backup tapes when retrieving a file later, in
+favor of the tape where the file appears earliest (closest to the
+front of the tape). @xref{backup}.
+
+@node checkpoints
+@section Checkpoints
+@cindex checkpoints, defined
+@opindex checkpoint
+@opindex checkpoint-action
+
+A @dfn{checkpoint} is a moment of time before writing @var{n}th record to
+the archive (a @dfn{write checkpoint}), or before reading @var{n}th record
+from the archive (a @dfn{read checkpoint}). Checkpoints allow to
+periodically execute arbitrary actions.
+
+The checkpoint facility is enabled using the following option:
+
+@table @option
+@xopindex{checkpoint, defined}
+@item --checkpoint[=@var{n}]
+Schedule checkpoints before writing or reading each @var{n}th record.
+The default value for @var{n} is 10.
+@end table
+
+A list of arbitrary @dfn{actions} can be executed at each checkpoint.
+These actions include: pausing, displaying textual messages, and
+executing arbitrary external programs. Actions are defined using
+the @option{--checkpoint-action} option.
+
+@table @option
+@xopindex{checkpoint-action, defined}
+@item --checkpoint-action=@var{action}
+Execute an @var{action} at each checkpoint.
+@end table
+
+@cindex @code{echo}, checkpoint action
+The simplest value of @var{action} is @samp{echo}. It instructs
+@command{tar} to display the default message on the standard error
+stream upon arriving at each checkpoint. The default message is (in
+@acronym{POSIX} locale) @samp{Write checkpoint @var{n}}, for write
+checkpoints, and @samp{Read checkpoint @var{n}}, for read checkpoints.
+Here, @var{n} represents ordinal number of the checkpoint.
+
+In another locales, translated versions of this message are used.
+
+This is the default action, so running:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=echo} /var
+@end smallexample
+
+@noindent
+is equivalent to:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000} /var
+@end smallexample
+
+The @samp{echo} action also allows to supply a customized message.
+You do so by placing an equals sign and the message right after it,
+e.g.:
+
+@smallexample
+--checkpoint-action="echo=Hit %s checkpoint #%u"
+@end smallexample
+
+The @samp{%s} and @samp{%u} in the above example are
+@dfn{format specifiers}. The @samp{%s} specifier is replaced with
+the @dfn{type} of the checkpoint: @samp{write} or
+@samp{read} (or a corresponding translated version in locales other
+than @acronym{POSIX}). The @samp{%u} specifier is replaced with
+the ordinal number of the checkpoint. Thus, the above example could
+produce the following output when used with the @option{--create}
+option:
+
+@smallexample
+tar: Hit write checkpoint #10
+tar: Hit write checkpoint #20
+tar: Hit write checkpoint #30
+@end smallexample
+
+The complete list of available format specifiers follows. Some of
+them can take optional arguments. These arguments, if given, are
+supplied in curly braces between the percent sign and the specifier
+letter.
+
+@table @samp
+@item %s
+Print type of the checkpoint (@samp{write} or @samp{read}).
+
+@item %u
+Print number of the checkpoint.
+
+@item %@{r,w,d@}T
+Print number of bytes transferred so far and approximate transfer
+speed. Optional arguments supply prefixes to be used before number
+of bytes read, written and deleted, correspondingly. If absent,
+they default to @samp{R}. @samp{W}, @samp{D}. Any or all of them can
+be omitted, so, that e.g. @samp{%@{@}T} means to print corresponding
+statistics without any prefixes. Any surplus arguments, if present,
+are silently ignored.
+
+@example
+$ @kbd{tar --delete -f f.tar --checkpoint-action=echo="#%u: %T" main.c}
+tar: #1: R: 0 (0B, 0B/s),W: 0 (0B, 0B/s),D: 0
+tar: #2: R: 10240 (10KiB, 19MiB/s),W: 0 (0B, 0B/s),D: 10240
+@end example
+
+@noindent
+See also the @samp{totals} action, described below.
+
+@item %@{@var{fmt}@}t
+Output current local time using @var{fmt} as format for @command{strftime}
+(@pxref{strftime, strftime,,strftime(3), strftime(3) man page}). The
+@samp{@{@var{fmt}@}} part is optional. If not present, the default
+format is @samp{%c}, i.e. the preferred date and time representation
+for the current locale.
+
+@item %@{@var{n}@}*
+Pad output with spaces to the @var{n}th column. If the
+@samp{@{@var{n}@}} part is omitted, the current screen width
+is assumed.
+
+@item %c
+This is a shortcut for @samp{%@{%Y-%m-%d %H:%M:%S@}t: %ds, %@{read,wrote@}T%*\r},
+intended mainly for use with @samp{ttyout} action (see below).
+@end table
+
+Aside from format expansion, the message string is subject to
+@dfn{unquoting}, during which the backslash @dfn{escape sequences} are
+replaced with their corresponding @acronym{ASCII} characters
+(@pxref{escape sequences}). E.g. the following action will produce an
+audible bell and the message described above at each checkpoint:
+
+@smallexample
+--checkpoint-action='echo=\aHit %s checkpoint #%u'
+@end smallexample
+
+@cindex @code{bell}, checkpoint action
+There is also a special action which produces an audible signal:
+@samp{bell}. It is not equivalent to @samp{echo='\a'}, because
+@samp{bell} sends the bell directly to the console (@file{/dev/tty}),
+whereas @samp{echo='\a'} sends it to the standard error.
+
+@cindex @code{ttyout}, checkpoint action
+The @samp{ttyout=@var{string}} action outputs @var{string} to
+@file{/dev/tty}, so it can be used even if the standard output is
+redirected elsewhere. The @var{string} is subject to the same
+modifications as with @samp{echo} action. In contrast to the latter,
+@samp{ttyout} does not prepend @command{tar} executable name to the
+string, nor does it output a newline after it. For example, the
+following action will print the checkpoint message at the same screen
+line, overwriting any previous message:
+
+@smallexample
+--checkpoint-action="ttyout=Hit %s checkpoint #%u%*\r"
+@end smallexample
+
+@noindent
+Notice the use of @samp{%*} specifier to clear out any eventual
+remains of the prior output line. As as more complex example,
+consider this:
+
+@smallexample
+--checkpoint-action=ttyout='%@{%Y-%m-%d %H:%M:%S@}t (%d sec): #%u, %T%*\r'
+@end smallexample
+
+@noindent
+This prints the current local time, number of seconds expired since
+tar was started, the checkpoint ordinal number, transferred bytes and
+average computed I/O speed.
+
+@cindex @code{dot}, checkpoint action
+Another available checkpoint action is @samp{dot} (or @samp{.}). It
+instructs @command{tar} to print a single dot on the standard listing
+stream, e.g.:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=dot} /var
+...
+@end smallexample
+
+For compatibility with previous @GNUTAR{} versions, this action can
+be abbreviated by placing a dot in front of the checkpoint frequency,
+as shown in the previous section.
+
+@cindex @code{totals}, checkpoint action
+The @samp{totals} action prints the total number of bytes transferred
+so far. The format of the data is the same as for the
+@option{--totals} option (@pxref{totals}). See also @samp{%T} format
+specifier of the @samp{echo} or @samp{ttyout} action.
+
+@cindex @code{sleep}, checkpoint action
+Yet another action, @samp{sleep}, pauses @command{tar} for a specified
+amount of seconds. The following example will stop for 30 seconds at each
+checkpoint:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=sleep=30}
+@end smallexample
+
+@anchor{checkpoint exec}
+@cindex @code{exec}, checkpoint action
+Finally, the @code{exec} action executes a given external command.
+For example:
+
+@smallexample
+$ @kbd{tar -c --checkpoint=1000 --checkpoint-action=exec=/sbin/cpoint}
+@end smallexample
+
+The supplied command can be any valid command invocation, with or
+without additional command line arguments. If it does contain
+arguments, don't forget to quote it to prevent it from being split by
+the shell. @xref{external, Running External Commands}, for more detail.
+
+The command gets a copy of @command{tar}'s environment plus the
+following variables:
+
+@table @env
+@vrindex TAR_VERSION, checkpoint script environment
+@item TAR_VERSION
+@GNUTAR{} version number.
+
+@vrindex TAR_ARCHIVE, checkpoint script environment
+@item TAR_ARCHIVE
+The name of the archive @command{tar} is processing.
+
+@vrindex TAR_BLOCKING_FACTOR, checkpoint script environment
+@item TAR_BLOCKING_FACTOR
+Current blocking factor (@pxref{Blocking}).
+
+@vrindex TAR_CHECKPOINT, checkpoint script environment
+@item TAR_CHECKPOINT
+Number of the checkpoint.
+
+@vrindex TAR_SUBCOMMAND, checkpoint script environment
+@item TAR_SUBCOMMAND
+A short option describing the operation @command{tar} is executing.
+@xref{Operations}, for a complete list of subcommand options.
+
+@vrindex TAR_FORMAT, checkpoint script environment
+@item TAR_FORMAT
+Format of the archive being processed. @xref{Formats}, for a complete
+list of archive format names.
+@end table
+
+These environment variables can also be passed as arguments to the
+command, provided that they are properly escaped, for example:
+
+@smallexample
+@kbd{tar -c -f arc.tar \
+ --checkpoint-action='exec=/sbin/cpoint $TAR_CHECKPOINT'}
+@end smallexample
+
+@noindent
+Notice single quotes to prevent variable names from being expanded by
+the shell when invoking @command{tar}.
+
+Any number of actions can be defined, by supplying several
+@option{--checkpoint-action} options in the command line. For
+example, the command below displays two messages, pauses
+execution for 30 seconds and executes the @file{/sbin/cpoint} script:
+
+@example
+@group
+$ @kbd{tar -c -f arc.tar \
+ --checkpoint-action='\aecho=Hit %s checkpoint #%u' \
+ --checkpoint-action='echo=Sleeping for 30 seconds' \
+ --checkpoint-action='sleep=30' \
+ --checkpoint-action='exec=/sbin/cpoint'}
+@end group
+@end example
+
+This example also illustrates the fact that
+@option{--checkpoint-action} can be used without
+@option{--checkpoint}. In this case, the default checkpoint frequency
+(at each 10th record) is assumed.
+
+@node warnings
+@section Controlling Warning Messages
+
+Sometimes, while performing the requested task, @GNUTAR{} notices
+some conditions that are not exactly errors, but which the user
+should be aware of. When this happens, @command{tar} issues a
+@dfn{warning message} describing the condition. Warning messages
+are output to the standard error and they do not affect the exit
+code of @command{tar} command.
+
+@xopindex{warning, explained}
+@GNUTAR{} allows the user to suppress some or all of its warning
+messages:
+
+@table @option
+@item --warning=@var{keyword}
+Control display of the warning messages identified by @var{keyword}.
+If @var{keyword} starts with the prefix @samp{no-}, such messages are
+suppressed. Otherwise, they are enabled.
+
+Multiple @option{--warning} messages accumulate.
+
+The tables below list allowed values for @var{keyword} along with the
+warning messages they control.
+@end table
+
+@subheading Keywords controlling @command{tar} operation
+@table @asis
+@kwindex all
+@item all
+Enable all warning messages. This is the default.
+@kwindex none
+@item none
+Disable all warning messages.
+@kwindex filename-with-nuls
+@cindex @samp{file name read contains nul character}, warning message
+@item filename-with-nuls
+@samp{%s: file name read contains nul character}
+@kwindex alone-zero-block
+@cindex @samp{A lone zero block at}, warning message
+@item alone-zero-block
+@samp{A lone zero block at %s}
+@end table
+
+@subheading Keywords applicable for @command{tar --create}
+@table @asis
+@kwindex cachedir
+@cindex @samp{contains a cache directory tag}, warning message
+@item cachedir
+@samp{%s: contains a cache directory tag %s; %s}
+@kwindex file-shrank
+@cindex @samp{File shrank by %s bytes}, warning message
+@item file-shrank
+@samp{%s: File shrank by %s bytes; padding with zeros}
+@kwindex xdev
+@cindex @samp{file is on a different filesystem}, warning message
+@item xdev
+@samp{%s: file is on a different filesystem; not dumped}
+@kwindex file-ignored
+@cindex @samp{Unknown file type; file ignored}, warning message
+@cindex @samp{socket ignored}, warning message
+@cindex @samp{door ignored}, warning message
+@item file-ignored
+@samp{%s: Unknown file type; file ignored}
+@*@samp{%s: socket ignored}
+@*@samp{%s: door ignored}
+@kwindex file-unchanged
+@cindex @samp{file is unchanged; not dumped}, warning message
+@item file-unchanged
+@samp{%s: file is unchanged; not dumped}
+@kwindex ignore-archive
+@cindex @samp{file is the archive; not dumped}, warning message
+@kwindex ignore-archive
+@cindex @samp{file is the archive; not dumped}, warning message
+@item ignore-archive
+@samp{%s: file is the archive; not dumped}
+@kwindex file-removed
+@cindex @samp{File removed before we read it}, warning message
+@item file-removed
+@samp{%s: File removed before we read it}
+@kwindex file-changed
+@cindex @samp{file changed as we read it}, warning message
+@item file-changed
+@samp{%s: file changed as we read it}
+@end table
+
+@subheading Keywords applicable for @command{tar --extract}
+@table @asis
+@kwindex existing-file
+@cindex @samp{%s: skipping existing file}, warning message
+@item existing-file
+@samp{%s: skipping existing file}
+@kwindex timestamp
+@cindex @samp{implausibly old time stamp %s}, warning message
+@cindex @samp{time stamp %s is %s s in the future}, warning message
+@item timestamp
+@samp{%s: implausibly old time stamp %s}
+@*@samp{%s: time stamp %s is %s s in the future}
+@kwindex contiguous-cast
+@cindex @samp{Extracting contiguous files as regular files}, warning message
+@item contiguous-cast
+@samp{Extracting contiguous files as regular files}
+@kwindex symlink-cast
+@cindex @samp{Attempting extraction of symbolic links as hard links}, warning message
+@item symlink-cast
+@samp{Attempting extraction of symbolic links as hard links}
+@kwindex unknown-cast
+@cindex @samp{Unknown file type '%c', extracted as normal file}, warning message
+@item unknown-cast
+@samp{%s: Unknown file type '%c', extracted as normal file}
+@kwindex ignore-newer
+@cindex @samp{Current %s is newer or same age}, warning message
+@item ignore-newer
+@samp{Current %s is newer or same age}
+@kwindex unknown-keyword
+@cindex @samp{Ignoring unknown extended header keyword '%s'}, warning message
+@item unknown-keyword
+@samp{Ignoring unknown extended header keyword '%s'}
+@kwindex decompress-program
+@item decompress-program
+Controls verbose description of failures occurring when trying to run
+alternative decompressor programs (@pxref{alternative decompression
+programs}). This warning is disabled by default (unless
+@option{--verbose} is used). A common example of what you can get
+when using this warning is:
+
+@smallexample
+$ @kbd{tar --warning=decompress-program -x -f archive.Z}
+tar (child): cannot run compress: No such file or directory
+tar (child): trying gzip
+@end smallexample
+
+This means that @command{tar} first tried to decompress
+@file{archive.Z} using @command{compress}, and, when that
+failed, switched to @command{gzip}.
+@kwindex record-size
+@cindex @samp{Record size = %lu blocks}, warning message
+@item record-size
+@samp{Record size = %lu blocks}
+@end table
+
+@subheading Keywords controlling incremental extraction:
+@table @asis
+@kwindex rename-directory
+@cindex @samp{%s: Directory has been renamed from %s}, warning message
+@cindex @samp{%s: Directory has been renamed}, warning message
+@item rename-directory
+@samp{%s: Directory has been renamed from %s}
+@*@samp{%s: Directory has been renamed}
+@kwindex new-directory
+@cindex @samp{%s: Directory is new}, warning message
+@item new-directory
+@samp{%s: Directory is new}
+@kwindex xdev
+@cindex @samp{%s: directory is on a different device: not purging}, warning message
+@item xdev
+@samp{%s: directory is on a different device: not purging}
+@kwindex bad-dumpdir
+@cindex @samp{Malformed dumpdir: 'X' never used}, warning message
+@item bad-dumpdir
+@samp{Malformed dumpdir: 'X' never used}
+@end table
+
+@node interactive
+@section Asking for Confirmation During Operations
+@cindex Interactive operation
+
+Typically, @command{tar} carries out a command without stopping for
+further instructions. In some situations however, you may want to
+exclude some files and archive members from the operation (for instance
+if disk or storage space is tight). You can do this by excluding
+certain files automatically (@pxref{Choosing}), or by performing
+an operation interactively, using the @option{--interactive} (@option{-w}) option.
+@command{tar} also accepts @option{--confirmation} for this option.
+
+@opindex interactive
+When the @option{--interactive} (@option{-w}) option is specified, before
+reading, writing, or deleting files, @command{tar} first prints a message
+for each such file, telling what operation it intends to take, then asks
+for confirmation on the terminal. The actions which require
+confirmation include adding a file to the archive, extracting a file
+from the archive, deleting a file from the archive, and deleting a file
+from disk. To confirm the action, you must type a line of input
+beginning with @samp{y}. If your input line begins with anything other
+than @samp{y}, @command{tar} skips that file.
+
+If @command{tar} is reading the archive from the standard input,
+@command{tar} opens the file @file{/dev/tty} to support the interactive
+communications.
+
+Verbose output is normally sent to standard output, separate from
+other error messages. However, if the archive is produced directly
+on standard output, then verbose output is mixed with errors on
+@code{stderr}. Producing the archive on standard output may be used
+as a way to avoid using disk space, when the archive is soon to be
+consumed by another process reading it, say. Some people felt the need
+of producing an archive on stdout, still willing to segregate between
+verbose output and error output. A possible approach would be using a
+named pipe to receive the archive, and having the consumer process to
+read from that named pipe. This has the advantage of letting standard
+output free to receive verbose output, all separate from errors.
+
+@node external
+@section Running External Commands
+
+Certain @GNUTAR{} operations imply running external commands that you
+supply on the command line. One of such operations is checkpointing,
+described above (@pxref{checkpoint exec}). Another example of this
+feature is the @option{-I} option, which allows you to supply the
+program to use for compressing or decompressing the archive
+(@pxref{use-compress-program}).
+
+Whenever such operation is requested, @command{tar} first splits the
+supplied command into words much like the shell does. It then treats
+the first word as the name of the program or the shell script to execute
+and the rest of words as its command line arguments. The program,
+unless given as an absolute file name, is searched in the shell's
+@env{PATH}.
+
+Any additional information is normally supplied to external commands
+in environment variables, specific to each particular operation. For
+example, the @option{--checkpoint-action=exec} option, defines the
+@env{TAR_ARCHIVE} variable to the name of the archive being worked
+upon. You can, should the need be, use these variables in the
+command line of the external command. For example:
+
+@smallexample
+$ @kbd{tar -x -f archive.tar \
+ --checkpoint-action=exec='printf "%04d in %32s\r" $TAR_CHECKPOINT $TAR_ARCHIVE'}
+@end smallexample
+
+@noindent
+This command prints for each checkpoint its number and the name of the
+archive, using the same output line on the screen.
+
+Notice the use of single quotes to prevent variable names from being
+expanded by the shell when invoking @command{tar}.
+
+@node operations
+@chapter @GNUTAR{} Operations
+
+@menu
+* Basic tar::
+* Advanced tar::
+* create options::
+* extract options::
+* backup::
+* Applications::
+* looking ahead::
+@end menu
+
+@node Basic tar
+@section Basic @GNUTAR{} Operations
+
+The basic @command{tar} operations, @option{--create} (@option{-c}),
+@option{--list} (@option{-t}) and @option{--extract} (@option{--get},
+@option{-x}), are currently presented and described in the tutorial
+chapter of this manual. This section provides some complementary notes
+for these operations.
+
+@table @option
+@xopindex{create, complementary notes}
+@item --create
+@itemx -c
+
+Creating an empty archive would have some kind of elegance. One can
+initialize an empty archive and later use @option{--append}
+(@option{-r}) for adding all members. Some applications would not
+welcome making an exception in the way of adding the first archive
+member. On the other hand, many people reported that it is
+dangerously too easy for @command{tar} to destroy a magnetic tape with
+an empty archive@footnote{This is well described in @cite{Unix-haters
+Handbook}, by Simson Garfinkel, Daniel Weise & Steven Strassmann, IDG
+Books, ISBN 1-56884-203-1.}. The two most common errors are:
+
+@enumerate
+@item
+Mistakingly using @code{create} instead of @code{extract}, when the
+intent was to extract the full contents of an archive. This error
+is likely: keys @kbd{c} and @kbd{x} are right next to each other on
+the QWERTY keyboard. Instead of being unpacked, the archive then
+gets wholly destroyed. When users speak about @dfn{exploding} an
+archive, they usually mean something else :-).
+
+@item
+Forgetting the argument to @code{file}, when the intent was to create
+an archive with a single file in it. This error is likely because a
+tired user can easily add the @kbd{f} key to the cluster of option
+letters, by the mere force of habit, without realizing the full
+consequence of doing so. The usual consequence is that the single
+file, which was meant to be saved, is rather destroyed.
+@end enumerate
+
+So, recognizing the likelihood and the catastrophic nature of these
+errors, @GNUTAR{} now takes some distance from elegance, and
+cowardly refuses to create an archive when @option{--create} option is
+given, there are no arguments besides options, and
+@option{--files-from} (@option{-T}) option is @emph{not} used. To get
+around the cautiousness of @GNUTAR{} and nevertheless create an
+archive with nothing in it, one may still use, as the value for the
+@option{--files-from} option, a file with no names in it, as shown in
+the following commands:
+
+@smallexample
+@kbd{tar --create --file=empty-archive.tar --files-from=/dev/null}
+@kbd{tar -cf empty-archive.tar -T /dev/null}
+@end smallexample
+
+@xopindex{extract, complementary notes}
+@item --extract
+@itemx --get
+@itemx -x
+
+A socket is stored, within a @GNUTAR{} archive, as a pipe.
+
+@item @option{--list} (@option{-t})
+
+@GNUTAR{} now shows dates as @samp{1996-08-30},
+while it used to show them as @samp{Aug 30 1996}. Preferably,
+people should get used to ISO 8601 dates. Local American dates should
+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.cl.cam.ac.uk/@/~mgk25/@/iso-time.html} if you
+are curious, it contains a detailed explanation of the ISO 8601 standard.
+
+@end table
+
+@node Advanced tar
+@section Advanced @GNUTAR{} Operations
+
+Now that you have learned the basics of using @GNUTAR{}, you may want
+to learn about further ways in which @command{tar} can help you.
+
+This chapter presents five, more advanced operations which you probably
+won't use on a daily basis, but which serve more specialized functions.
+We also explain the different styles of options and why you might want
+to use one or another, or a combination of them in your @command{tar}
+commands. Additionally, this chapter includes options which allow you to
+define the output from @command{tar} more carefully, and provide help and
+error correction in special circumstances.
+
+@FIXME{check this after the chapter is actually revised to make sure
+it still introduces the info in the chapter correctly : ).}
+
+@menu
+* Operations::
+* append::
+* update::
+* concatenate::
+* delete::
+* compare::
+@end menu
+
+@node Operations
+@subsection The Five Advanced @command{tar} Operations
+
+@cindex basic operations
+In the last chapter, you learned about the first three operations to
+@command{tar}. This chapter presents the remaining five operations to
+@command{tar}: @option{--append}, @option{--update}, @option{--concatenate},
+@option{--delete}, and @option{--compare}.
+
+You are not likely to use these operations as frequently as those
+covered in the last chapter; however, since they perform specialized
+functions, they are quite useful when you do need to use them. We
+will give examples using the same directory and files that you created
+in the last chapter. As you may recall, the directory is called
+@file{practice}, the files are @samp{jazz}, @samp{blues}, @samp{folk},
+and the two archive files you created are
+@samp{collection.tar} and @samp{music.tar}.
+
+We will also use the archive files @samp{afiles.tar} and
+@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
+in this chapter will take place in the @file{practice} directory that
+you created in the previous chapter; see @ref{prepare for examples}.
+(Below in this section, we will remind you of the state of the examples
+where the last chapter left them.)
+
+The five operations that we will cover in this chapter are:
+
+@table @option
+@item --append
+@itemx -r
+Add new entries to an archive that already exists.
+@item --update
+@itemx -u
+Add more recent copies of archive members to the end of an archive, if
+they exist.
+@item --concatenate
+@itemx --catenate
+@itemx -A
+Add one or more pre-existing archives to the end of another archive.
+@item --delete
+Delete items from an archive (does not work on tapes).
+@item --compare
+@itemx --diff
+@itemx -d
+Compare archive members to their counterparts in the file system.
+@end table
+
+@node append
+@subsection How to Add Files to Existing Archives: @option{--append}
+
+@cindex appending files to existing archive
+@opindex append
+If you want to add files to an existing archive, you don't need to
+create a new archive; you can use @option{--append} (@option{-r}).
+The archive must already exist in order to use @option{--append}. (A
+related operation is the @option{--update} operation; you can use this
+to add newer versions of archive members to an existing archive. To learn how to
+do this with @option{--update}, @pxref{update}.)
+
+If you use @option{--append} to add a file that has the same name as an
+archive member to an archive containing that archive member, then the
+old member is not deleted. What does happen, however, is somewhat
+complex. @command{tar} @emph{allows} you to have infinite number of files
+with the same name. Some operations treat these same-named members no
+differently than any other set of archive members: for example, if you
+view an archive with @option{--list} (@option{-t}), you will see all
+of those members listed, with their data modification times, owners, etc.
+
+Other operations don't deal with these members as perfectly as you might
+prefer; if you were to use @option{--extract} to extract the archive,
+only the most recently added copy of a member with the same name as
+other members would end up in the working directory. This is because
+@option{--extract} extracts an archive in the order the members appeared
+in the archive; the most recently archived members will be extracted
+last. Additionally, an extracted member will @emph{replace} a file of
+the same name which existed in the directory already, and @command{tar}
+will not prompt you about this@footnote{Unless you give it
+@option{--keep-old-files} (or @option{--skip-old-files}) option, or
+the disk copy is newer than the one in the archive and you invoke
+@command{tar} with @option{--keep-newer-files} option.}. Thus, only
+the most recently archived member will end up being extracted, as it
+will replace the one extracted before it, and so on.
+
+@cindex extracting @var{n}th copy of the file
+@xopindex{occurrence, described}
+There exists a special option that allows you to get around this
+behavior and extract (or list) only a particular copy of the file.
+This is @option{--occurrence} option. If you run @command{tar} with
+this option, it will extract only the first copy of the file. You
+may also give this option an argument specifying the number of
+copy to be extracted. Thus, for example if the archive
+@file{archive.tar} contained three copies of file @file{myfile}, then
+the command
+
+@smallexample
+tar --extract --file archive.tar --occurrence=2 myfile
+@end smallexample
+
+@noindent
+would extract only the second copy. @xref{Option
+Summary,---occurrence}, for the description of @option{--occurrence}
+option.
+
+@FIXME{ hag -- you might want to incorporate some of the above into the
+MMwtSN node; not sure. i didn't know how to make it simpler...
+
+There are a few ways to get around this. Xref to Multiple Members
+with the Same Name, maybe.}
+
+@cindex Members, replacing with other members
+@cindex Replacing members with other members
+@xopindex{delete, using before --append}
+If you want to replace an archive member, use @option{--delete} to
+delete the member you want to remove from the archive, and then use
+@option{--append} to add the member you want to be in the archive. Note
+that you can not change the order of the archive; the most recently
+added member will still appear last. In this sense, you cannot truly
+``replace'' one member with another. (Replacing one member with another
+will not work on certain types of media, such as tapes; see @ref{delete}
+and @ref{Media}, for more information.)
+
+@menu
+* appending files:: Appending Files to an Archive
+* multiple::
+@end menu
+
+@node appending files
+@subsubsection Appending Files to an Archive
+@cindex Adding files to an Archive
+@cindex Appending files to an Archive
+@cindex Archives, Appending files to
+@opindex append
+
+The simplest way to add a file to an already existing archive is the
+@option{--append} (@option{-r}) operation, which writes specified
+files into the archive whether or not they are already among the
+archived files.
+
+When you use @option{--append}, you @emph{must} specify file name
+arguments, as there is no default. If you specify a file that already
+exists in the archive, another copy of the file will be added to the
+end of the archive. As with other operations, the member names of the
+newly added files will be exactly the same as their names given on the
+command line. The @option{--verbose} (@option{-v}) option will print
+out the names of the files as they are written into the archive.
+
+@option{--append} cannot be performed on some tape drives, unfortunately,
+due to deficiencies in the formats those tape drives use. The archive
+must be a valid @command{tar} archive, or else the results of using this
+operation will be unpredictable. @xref{Media}.
+
+To demonstrate using @option{--append} to add a file to an archive,
+create a file called @file{rock} in the @file{practice} directory.
+Make sure you are in the @file{practice} directory. Then, run the
+following @command{tar} command to add @file{rock} to
+@file{collection.tar}:
+
+@smallexample
+$ @kbd{tar --append --file=collection.tar rock}
+@end smallexample
+
+@noindent
+If you now use the @option{--list} (@option{-t}) operation, you will see that
+@file{rock} has been added to the archive:
+
+@smallexample
+$ @kbd{tar --list --file=collection.tar}
+-rw-r--r-- me/user 28 1996-10-18 16:31 jazz
+-rw-r--r-- me/user 21 1996-09-23 16:44 blues
+-rw-r--r-- me/user 20 1996-09-23 16:44 folk
+-rw-r--r-- me/user 20 1996-09-23 16:44 rock
+@end smallexample
+
+@node multiple
+@subsubsection Multiple Members with the Same Name
+@cindex members, multiple
+@cindex multiple members
+
+You can use @option{--append} (@option{-r}) to add copies of files
+which have been updated since the archive was created. (However, we
+do not recommend doing this since there is another @command{tar}
+option called @option{--update}; @xref{update}, for more information.
+We describe this use of @option{--append} here for the sake of
+completeness.) When you extract the archive, the older version will
+be effectively lost. This works because files are extracted from an
+archive in the order in which they were archived. Thus, when the
+archive is extracted, a file archived later in time will replace a
+file of the same name which was archived earlier, even though the
+older version of the file will remain in the archive unless you delete
+all versions of the file.
+
+Supposing you change the file @file{blues} and then append the changed
+version to @file{collection.tar}. As you saw above, the original
+@file{blues} is in the archive @file{collection.tar}. If you change the
+file and append the new version of the file to the archive, there will
+be two copies in the archive. When you extract the archive, the older
+version of the file will be extracted first, and then replaced by the
+newer version when it is extracted.
+
+You can append the new, changed copy of the file @file{blues} to the
+archive in this way:
+
+@smallexample
+$ @kbd{tar --append --verbose --file=collection.tar blues}
+blues
+@end smallexample
+
+@noindent
+Because you specified the @option{--verbose} option, @command{tar} has
+printed the name of the file being appended as it was acted on. Now
+list the contents of the archive:
+
+@smallexample
+$ @kbd{tar --list --verbose --file=collection.tar}
+-rw-r--r-- me/user 28 1996-10-18 16:31 jazz
+-rw-r--r-- me/user 21 1996-09-23 16:44 blues
+-rw-r--r-- me/user 20 1996-09-23 16:44 folk
+-rw-r--r-- me/user 20 1996-09-23 16:44 rock
+-rw-r--r-- me/user 58 1996-10-24 18:30 blues
+@end smallexample
+
+@noindent
+The newest version of @file{blues} is now at the end of the archive
+(note the different creation dates and file sizes). If you extract
+the archive, the older version of the file @file{blues} will be
+replaced by the newer version. You can confirm this by extracting
+the archive and running @samp{ls} on the directory.
+
+If you wish to extract the first occurrence of the file @file{blues}
+from the archive, use @option{--occurrence} option, as shown in
+the following example:
+
+@smallexample
+$ @kbd{tar --extract -vv --occurrence --file=collection.tar blues}
+-rw-r--r-- me/user 21 1996-09-23 16:44 blues
+@end smallexample
+
+@xref{Writing}, for more information on @option{--extract} and
+see @ref{Option Summary, --occurrence}, for a description of
+@option{--occurrence} option.
+
+@node update
+@subsection Updating an Archive
+@cindex Updating an archive
+@opindex update
+
+In the previous section, you learned how to use @option{--append} to
+add a file to an existing archive. A related operation is
+@option{--update} (@option{-u}). The @option{--update} operation
+updates a @command{tar} archive by comparing the date of the specified
+archive members against the date of the file with the same name. If
+the file has been modified more recently than the archive member, then
+the newer version of the file is added to the archive (as with
+@option{--append}).
+
+Unfortunately, you cannot use @option{--update} with magnetic tape drives.
+The operation will fail.
+
+@FIXME{other examples of media on which --update will fail? need to ask
+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. @xref{multiple}, for a detailed discussion.
+
+@menu
+* how to update::
+@end menu
+
+@node how to update
+@subsubsection How to Update an Archive Using @option{--update}
+@opindex update
+
+You must use file name arguments with the @option{--update}
+(@option{-u}) operation. If you don't specify any files,
+@command{tar} won't act on any files and won't tell you that it didn't
+do anything (which may end up confusing you).
+
+@c note: the above parenthetical added because in fact, this
+@c behavior just confused the author. :-)
+
+To see the @option{--update} option at work, create a new file,
+@file{classical}, in your practice directory, and some extra text to the
+file @file{blues}, using any text editor. Then invoke @command{tar} with
+the @samp{update} operation and the @option{--verbose} (@option{-v})
+option specified, using the names of all the files in the @file{practice}
+directory as file name arguments:
+
+@smallexample
+$ @kbd{tar --update -v -f collection.tar blues folk rock classical}
+blues
+classical
+$
+@end smallexample
+
+@noindent
+Because we have specified verbose mode, @command{tar} prints out the names
+of the files it is working on, which in this case are the names of the
+files that needed to be updated. If you run @samp{tar --list} and look
+at the archive, you will see @file{blues} and @file{classical} at its
+end. There will be a total of two versions of the member @samp{blues};
+the one at the end will be newer and larger, since you added text before
+updating it.
+
+The reason @command{tar} does not overwrite the older file when updating
+it is because writing to the middle of a section of tape is a difficult
+process. Tapes are not designed to go backward. @xref{Media}, for more
+information about tapes.
+
+@option{--update} (@option{-u}) is not suitable for performing backups for two
+reasons: it does not change directory content entries, and it
+lengthens the archive every time it is used. The @GNUTAR{}
+options intended specifically for backups are more
+efficient. If you need to run backups, please consult @ref{Backups}.
+
+@node concatenate
+@subsection Combining Archives with @option{--concatenate}
+
+@cindex Adding archives to an archive
+@cindex Concatenating Archives
+@opindex concatenate
+@opindex catenate
+@c @cindex @option{-A} described
+Sometimes it may be convenient to add a second archive onto the end of
+an archive rather than adding individual files to the archive. To add
+one or more archives to the end of another archive, you should use the
+@option{--concatenate} (@option{--catenate}, @option{-A}) operation.
+
+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@footnote{This can cause multiple members to have the same name. For
+information on how this affects reading the archive, see @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
+variable @env{TAPE}, or, if this has not been set, the default archive name.
+
+@FIXME{There is no way to specify a new name...}
+
+To demonstrate how @option{--concatenate} works, create two small archives
+called @file{bluesrock.tar} and @file{folkjazz.tar}, using the relevant
+files from @file{practice}:
+
+@smallexample
+$ @kbd{tar -cvf bluesrock.tar blues rock}
+blues
+rock
+$ @kbd{tar -cvf folkjazz.tar folk jazz}
+folk
+jazz
+@end smallexample
+
+@noindent
+If you like, You can run @samp{tar --list} to make sure the archives
+contain what they are supposed to:
+
+@smallexample
+$ @kbd{tar -tvf bluesrock.tar}
+-rw-r--r-- melissa/user 105 1997-01-21 19:42 blues
+-rw-r--r-- melissa/user 33 1997-01-20 15:34 rock
+$ @kbd{tar -tvf jazzfolk.tar}
+-rw-r--r-- melissa/user 20 1996-09-23 16:44 folk
+-rw-r--r-- melissa/user 65 1997-01-30 14:15 jazz
+@end smallexample
+
+We can concatenate these two archives with @command{tar}:
+
+@smallexample
+$ @kbd{cd ..}
+$ @kbd{tar --concatenate --file=bluesrock.tar jazzfolk.tar}
+@end smallexample
+
+If you now list the contents of the @file{bluesrock.tar}, you will see
+that now it also contains the archive members of @file{jazzfolk.tar}:
+
+@smallexample
+$ @kbd{tar --list --file=bluesrock.tar}
+blues
+rock
+folk
+jazz
+@end smallexample
+
+When you use @option{--concatenate}, the source and target archives must
+already exist and must have been created using compatible format
+parameters. Notice, that @command{tar} does not check whether the
+archives it concatenates have compatible formats, it does not
+even check if the files are really tar archives.
+
+Like @option{--append} (@option{-r}), this operation cannot be performed on some
+tape drives, due to deficiencies in the formats those tape drives use.
+
+@cindex @code{concatenate} vs @command{cat}
+@cindex @command{cat} vs @code{concatenate}
+It may seem more intuitive to you to want or try to use @command{cat} to
+concatenate two archives instead of using the @option{--concatenate}
+operation; after all, @command{cat} is the utility for combining files.
+
+However, @command{tar} archives incorporate an end-of-file marker which
+must be removed if the concatenated archives are to be read properly as
+one archive. @option{--concatenate} removes the end-of-archive marker
+from the target archive before each new archive is appended. If you use
+@command{cat} to combine the archives, the result will not be a valid
+@command{tar} format archive. If you need to retrieve files from an
+archive that was added to using the @command{cat} utility, use the
+@option{--ignore-zeros} (@option{-i}) option. @xref{Ignore Zeros}, for further
+information on dealing with archives improperly combined using the
+@command{cat} shell utility.
+
+@node delete
+@subsection Removing Archive Members Using @option{--delete}
+@cindex Deleting files from an archive
+@cindex Removing files from an archive
+
+@opindex delete
+You can remove members from an archive by using the @option{--delete}
+option. Specify the name of the archive with @option{--file}
+(@option{-f}) and then specify the names of the members to be deleted;
+if you list no member names, nothing will be deleted. The
+@option{--verbose} option will cause @command{tar} to print the names
+of the members as they are deleted. As with @option{--extract}, you
+must give the exact member names when using @samp{tar --delete}.
+@option{--delete} will remove all versions of the named file from the
+archive. The @option{--delete} operation can run very slowly.
+
+Unlike other operations, @option{--delete} has no short form.
+
+@cindex Tapes, using @option{--delete} and
+@cindex Deleting from tape archives
+This operation will rewrite the archive. You can only use
+@option{--delete} on an archive if the archive device allows you to
+write to any point on the media, such as a disk; because of this, it
+does not work on magnetic tapes. Do not try to delete an archive member
+from a magnetic tape; the action will not succeed, and you will be
+likely to scramble the archive and damage your tape. There is no safe
+way (except by completely re-writing the archive) to delete files from
+most kinds of magnetic tape. @xref{Media}.
+
+To delete all versions of the file @file{blues} from the archive
+@file{collection.tar} in the @file{practice} directory, make sure you
+are in that directory, and then,
+
+@smallexample
+$ @kbd{tar --list --file=collection.tar}
+blues
+folk
+jazz
+rock
+$ @kbd{tar --delete --file=collection.tar blues}
+$ @kbd{tar --list --file=collection.tar}
+folk
+jazz
+rock
+@end smallexample
+
+@FIXME{Check if the above listing is actually produced after running
+all the examples on collection.tar.}
+
+The @option{--delete} option has been reported to work properly when
+@command{tar} acts as a filter from @code{stdin} to @code{stdout}.
+
+@node compare
+@subsection Comparing Archive Members with the File System
+@cindex Verifying the currency of an archive
+
+@opindex compare
+The @option{--compare} (@option{-d}), or @option{--diff} operation compares
+specified archive members against files with the same names, and then
+reports differences in file size, mode, owner, modification date and
+contents. You should @emph{only} specify archive member names, not file
+names. If you do not name any members, then @command{tar} will compare the
+entire archive. If a file is represented in the archive but does not
+exist in the file system, @command{tar} reports a difference.
+
+You have to specify the record size of the archive when modifying an
+archive with a non-default record size.
+
+@command{tar} ignores files in the file system that do not have
+corresponding members in the archive.
+
+The following example compares the archive members @file{rock},
+@file{blues} and @file{funk} in the archive @file{bluesrock.tar} with
+files of the same name in the file system. (Note that there is no file,
+@file{funk}; @command{tar} will report an error message.)
+
+@smallexample
+$ @kbd{tar --compare --file=bluesrock.tar rock blues funk}
+rock
+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 latter goal, see @ref{verify}.
+
+@node create options
+@section Options Used by @option{--create}
+
+@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}.
+
+@menu
+* override:: Overriding File Metadata.
+* Extended File Attributes::
+* Ignore Failed Read::
+@end menu
+
+@node override
+@subsection Overriding File Metadata
+
+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
+$ @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 an 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,
+January 1, 1970:
+
+@smallexample
+$ @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
+$ @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
+
+@noindent
+When used with @option{--clamp-mtime} @GNUTAR{} will only set the
+modification date to @var{date} on files whose actual modification
+date is later than @var{date}. This is to make it easy to build
+reproducible archives given a common timestamp for generated files
+while still retaining the original timestamps of untouched files.
+
+@smallexample
+$ @kbd{tar -c -f archive.tar --clamp-mtime --mtime=@atchar{}$SOURCE_DATE_EPOCH .}
+@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.
+
+If @var{user} contains a colon, it is taken to be of the form
+@var{name}:@var{id} where a nonempty @var{name} specifies the user
+name and a nonempty @var{id} specifies the decimal numeric user
+@acronym{ID}. If @var{user} does not contain a colon, it is taken to
+be a user number if it is one or more decimal digits; otherwise it is
+taken to be a user name.
+
+If a name is given but no number, the number is inferred from the
+current host's user database if possible, and the file's user number
+is used otherwise. If a number is given but no name, the name is
+inferred from the number if possible, and an empty name is used
+otherwise. If both name and number are given, the user database is
+not consulted, and the name and number need not be valid on the
+current host.
+
+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
+$ @kbd{tar -c -f archive.tar --owner=0 .}
+@end smallexample
+
+@noindent
+or:
+
+@smallexample
+$ @kbd{tar -c -f archive.tar --owner=root .}
+@end smallexample
+
+@item --group=@var{group}
+@opindex group
+
+Files added to the @command{tar} archive will have a group @acronym{ID} of @var{group},
+rather than the group from the source file. As with @option{--owner},
+the argument @var{group} can be an existing group symbolic name, or a
+decimal numeric group @acronym{ID}, or @var{name}:@var{id}.
+@end table
+
+The @option{--owner} and @option{--group} options affect all files
+added to the archive. @GNUTAR{} provides also two options that allow
+for more detailed control over owner translation:
+
+@table @option
+@item --owner-map=@var{file}
+Read UID translation map from @var{file}.
+
+When reading, empty lines are ignored. The @samp{#} sign, unless
+quoted, introduces a comment, which extends to the end of the line.
+Each nonempty line defines mapping for a single UID. It must consist
+of two fields separated by any amount of whitespace. The first field
+defines original username and UID. It can be a valid user name or
+a valid UID prefixed with a plus sign. In both cases the
+corresponding UID or user name is inferred from the current host's
+user database.
+
+The second field defines the UID and username to map the original one
+to. Its format can be the same as described above. Otherwise, it can
+have the form @var{newname}:@var{newuid}, in which case neither
+@var{newname} nor @var{newuid} are required to be valid as per the
+user database.
+
+For example, consider the following file:
+
+@example
++10 bin
+smith root:0
+@end example
+
+@noindent
+Given this file, each input file that is owner by UID 10 will be
+stored in archive with owner name @samp{bin} and owner UID
+corresponding to @samp{bin}. Each file owned by user @samp{smith}
+will be stored with owner name @samp{root} and owner ID 0. Other
+files will remain unchanged.
+
+When used together with @option{--owner-map}, the @option{--owner}
+option affects only files whose owner is not listed in the map file.
+
+@item --group-map=@var{file}
+Read GID translation map from @var{file}.
+
+The format of @var{file} is the same as for @option{--owner-map}
+option:
+
+Each nonempty line defines mapping for a single GID. It must consist
+of two fields separated by any amount of whitespace. The first field
+defines original group name and GID. It can be a valid group name or
+a valid GID prefixed with a plus sign. In both cases the
+corresponding GID or user name is inferred from the current host's
+group database.
+
+The second field defines the GID and group name to map the original one
+to. Its format can be the same as described above. Otherwise, it can
+have the form @var{newname}:@var{newgid}, in which case neither
+@var{newname} nor @var{newgid} are required to be valid as per the
+group database.
+
+When used together with @option{--group-map}, the @option{--group}
+option affects only files whose owner group is not rewritten using the
+map file.
+@end table
+
+@node Extended File Attributes
+@subsection Extended File Attributes
+
+Extended file attributes are name-value pairs that can be
+associated with each node in a file system. Despite the fact that
+POSIX.1e draft which proposed them has been withdrawn, the extended
+file attributes are supported by many file systems. @GNUTAR{} can
+store extended file attributes along with the files. This feature is
+controlled by the following command line arguments:
+
+@table @option
+@item --xattrs
+Enable extended attributes support. When used with @option{--create},
+this option instructs @GNUTAR to store extended file attribute in the
+created archive. This implies POSIX.1-2001 archive format
+(@option{--format=pax}).
+
+When used with @option{--extract}, this option tells @command{tar},
+for each file extracted, to read stored attributes from the archive
+and to apply them to the file.
+
+@item --no-xattrs
+Disable extended attributes support. This is the default.
+@end table
+
+Attribute names are strings prefixed by a @dfn{namespace} name and a dot.
+Currently, four namespaces exist: @samp{user}, @samp{trusted},
+@samp{security} and @samp{system}. By default, when @option{--xattr}
+is used, all names are stored in the archive (or extracted, if using
+@option{--extract}). This can be controlled using the following
+options:
+
+@table @option
+@item --xattrs-exclude=@var{pattern}
+Specify exclude pattern for extended attributes.
+
+@item --xattrs-include=@var{pattern}
+Specify include pattern for extended attributes.
+@end table
+
+Here, the @var{pattern} is POSIX regular expression. For example, the
+following command:
+
+@example
+$ @kbd{tar --xattrs --xattrs-exclude='^user\.' -c a.tar .}
+@end example
+
+will include in the archive @file{a.tar} all attributes, except those
+from the @samp{user} namespace.
+
+Any number of these options can be given, thereby creating lists of
+include and exclude patterns.
+
+When both options are used, first @option{--xattrs-inlcude} is applied
+to select the set of attribute names to keep, and then
+@option{--xattrs-exclude} is applied to the resulting set. In other
+words, only those attributes will be stored, whose names match one
+of the regexps in @option{--xattrs-inlcude} and don't match any of
+the regexps from @option{--xattrs-exclude}.
+
+When listing the archive, if both @option{--xattrs} and
+@option{--verbose} options are given, files that have extended
+attributes are marked with an asterisk following their permission
+mask. For example:
+
+@example
+-rw-r--r--* smith/users 110 2016-03-16 16:07 file
+@end example
+
+When two or more @option{--verbose} options are given, a detailed
+listing of extended attributes is printed after each file entry. Each
+attribute is listed on a separate line, which begins with two spaces
+and the letter @samp{x} indicating extended attribute. It is followed
+by a colon, length of the attribute and its name, e.g.:
+
+@example
+-rw-r--r--* smith/users 110 2016-03-16 16:07 file
+ x: 7 user.mime_type
+ x: 32 trusted.md5sum
+@end example
+
+File access control lists (@dfn{ACL}) are another actively used feature
+proposed by the POSIX.1e standard. Each ACL consists of a set of ACL
+entries, each of which describes the access permissions on the file for
+an individual user or a group of users as a combination of read, write
+and search/execute permissions.
+
+Whether or not to use ACLs is controlled by the following two options:
+
+@table @option
+@item --acls
+Enable POSIX ACLs support. When used with @option{--create},
+this option instructs @GNUTAR{} to store ACLs in the
+created archive. This implies POSIX.1-2001 archive format
+(@option{--format=pax}).
+
+When used with @option{--extract}, this option tells @command{tar},
+to restore ACLs for each file extracted (provided they are present
+in the archive).
+
+@item --no-acls
+Disable POSIX ACLs support. This is the default.
+@end table
+
+When listing the archive, if both @option{--acls} and
+@option{--verbose} options are given, files that have ACLs are marked
+with a plus sing following their permission mask. For example:
+
+@example
+-rw-r--r--+ smith/users 110 2016-03-16 16:07 file
+@end example
+
+When two or more @option{--verbose} options are given, a detailed
+listing of ACL is printed after each file entry:
+
+@example
+@group
+-rw-r--r--+ smith/users 110 2016-03-16 16:07 file
+ a: user::rw-,user:gray:-w-,group::r--,mask::rw-,other::r--
+@end group
+@end example
+
+@dfn{Security-Enhanced Linux} (@dfn{SELinux} for short) is a Linux
+kernel security module that provides a mechanism for supporting access
+control security policies, including so-called mandatory access
+controls (@dfn{MAC}). Support for SELinux attributes is controlled by
+the following command line options:
+
+@table @option
+@item --selinux
+Enable the SELinux context support.
+
+@item --no-selinux
+Disable SELinux context support.
+@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
+
+@node extract options
+@section Options Used by @option{--extract}
+@cindex options for use with @option{--extract}
+
+@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,
+the permissions, the modification date, and so forth. This section
+presents options to be used with @option{--extract} when certain special
+considerations arise. You may review the information presented in
+@ref{extract} for more basic information about the
+@option{--extract} operation.
+
+@menu
+* Reading:: Options to Help Read Archives
+* Writing:: Changing How @command{tar} Writes Files
+* Scarce:: Coping with Scarce Resources
+@end menu
+
+@node Reading
+@subsection Options to Help Read Archives
+@cindex Options when reading archives
+
+@cindex Reading incomplete records
+@cindex Records, incomplete
+@opindex read-full-records
+Normally, @command{tar} will request data in full record increments from
+an archive storage device. If the device cannot return a full record,
+@command{tar} will report an error. However, some devices do not always
+return full records, or do not require the last record of an archive to
+be padded out to the next record boundary. To keep reading until you
+obtain a full record, or to accept an incomplete record if it contains
+an end-of-archive marker, specify the @option{--read-full-records} (@option{-B}) option
+in conjunction with the @option{--extract} or @option{--list} operations.
+@xref{Blocking}.
+
+The @option{--read-full-records} (@option{-B}) option is turned on by default when
+@command{tar} reads an archive from standard input, or from a remote
+machine. This is because on @acronym{BSD} Unix systems, attempting to read a
+pipe returns however much happens to be in the pipe, even if it is
+less than was requested. If this option were not enabled, @command{tar}
+would fail as soon as it read an incomplete record from the pipe.
+
+If you're not sure of the blocking factor of an archive, you can
+read the archive by specifying @option{--read-full-records} (@option{-B}) and
+@option{--blocking-factor=@var{512-size}} (@option{-b
+@var{512-size}}), using a blocking factor larger than what the archive
+uses. This lets you avoid having to determine the blocking factor
+of an archive. @xref{Blocking Factor}.
+
+@menu
+* read full records::
+* Ignore Zeros::
+@end menu
+
+@node read full records
+@unnumberedsubsubsec Reading Full Records
+
+@FIXME{need sentence or so of intro here}
+
+@table @option
+@opindex read-full-records
+@item --read-full-records
+@item -B
+Use in conjunction with @option{--extract} (@option{--get},
+@option{-x}) to read an archive which contains incomplete records, or
+one which has a blocking factor less than the one specified.
+@end table
+
+@node Ignore Zeros
+@unnumberedsubsubsec Ignoring Blocks of Zeros
+
+@cindex End-of-archive blocks, ignoring
+@cindex Ignoring end-of-archive blocks
+@opindex ignore-zeros
+Normally, @command{tar} stops reading when it encounters a block of zeros
+between file entries (which usually indicates the end of the archive).
+@option{--ignore-zeros} (@option{-i}) allows @command{tar} to
+completely read an archive which contains a block of zeros before the
+end (i.e., a damaged archive, or one that was created by concatenating
+several archives together).
+
+The @option{--ignore-zeros} (@option{-i}) option is turned off by default because many
+versions of @command{tar} write garbage after the end-of-archive entry,
+since that part of the media is never supposed to be read. @GNUTAR{}
+does not write after the end of an archive, but seeks to
+maintain compatibility among archiving utilities.
+
+@table @option
+@item --ignore-zeros
+@itemx -i
+To ignore blocks of zeros (i.e., end-of-archive entries) which may be
+encountered while reading an archive. Use in conjunction with
+@option{--extract} or @option{--list}.
+@end table
+
+@node Writing
+@subsection Changing How @command{tar} Writes Files
+@UNREVISED
+
+@FIXME{Introductory paragraph}
+
+@menu
+* Dealing with Old Files::
+* Overwrite Old Files::
+* Keep Old Files::
+* Keep Newer Files::
+* Unlink First::
+* Recursive Unlink::
+* Data Modification Times::
+* Setting Access Permissions::
+* Directory Modification Times and Permissions::
+* Writing to Standard Output::
+* Writing to an External Program::
+* remove files::
+@end menu
+
+@node Dealing with Old Files
+@unnumberedsubsubsec Options Controlling the Overwriting of Existing Files
+
+@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
+links. (If the existing file is a symbolic link, it is removed, not
+followed.) However, if a directory cannot be removed because it is
+nonempty, @command{tar} normally overwrites its metadata (ownership,
+permission, etc.). The @option{--overwrite-dir} option enables this
+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
+@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. For
+example:
+
+@example
+$ @kbd{ls}
+blues
+$ @kbd{tar -x -k -f archive.tar}
+tar: blues: Cannot open: File exists
+tar: Exiting with failure status due to previous errors
+@end example
+
+@xopindex{skip-old-files, introduced}
+If you wish to preserve old files untouched, but don't want
+@command{tar} to treat them as errors, use the
+@option{--skip-old-files} option. This option causes @command{tar} to
+silently skip extracting over existing files.
+
+@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.
+
+@cindex Protecting old files
+Some people argue that @GNUTAR{} should not hesitate
+to overwrite files with other files when extracting. When extracting
+a @command{tar} archive, they expect to see a faithful copy of the
+state of the file system when the archive was created. It is debatable
+that this would always be a proper behavior. For example, suppose one
+has an archive in which @file{usr/local} is a link to
+@file{usr/local2}. Since then, maybe the site removed the link and
+renamed the whole hierarchy from @file{/usr/local2} to
+@file{/usr/local}. Such things happen all the time. I guess it would
+not be welcome at all that @GNUTAR{} removes the
+whole hierarchy just to make room for the link to be reinstated
+(unless it @emph{also} simultaneously restores the full
+@file{/usr/local2}, of course!) @GNUTAR{} is indeed
+able to remove a whole hierarchy to reestablish a symbolic link, for
+example, but @emph{only if} @option{--recursive-unlink} is specified
+to allow this behavior. In any case, single files are silently
+removed.
+
+@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.
+
+@node Overwrite Old Files
+@unnumberedsubsubsec Overwrite Old Files
+
+@table @option
+@opindex overwrite
+@item --overwrite
+Overwrite existing files and directory metadata when extracting files
+from an archive.
+
+This causes @command{tar} to write extracted files into the file system without
+regard to the files already on the system; i.e., files with the same
+names as archive members are overwritten when the archive is extracted.
+It also causes @command{tar} to extract the ownership, permissions,
+and time stamps onto any preexisting files or directories.
+If the name of a corresponding file name is a symbolic link, the file
+pointed to by the symbolic link will be overwritten instead of the
+symbolic link itself (if this is possible). Moreover, special devices,
+empty directories and even symbolic links are automatically removed if
+they are in the way of extraction.
+
+Be careful when using the @option{--overwrite} option, particularly when
+combined with the @option{--absolute-names} (@option{-P}) option, as this combination
+can change the contents, ownership or permissions of any file on your
+system. Also, many systems do not take kindly to overwriting files that
+are currently being executed.
+
+@opindex overwrite-dir
+@item --overwrite-dir
+Overwrite the metadata of directories when extracting files from an
+archive, but remove other files before extracting.
+@end table
+
+@node Keep Old Files
+@unnumberedsubsubsec Keep Old Files
+
+@GNUTAR{} provides two options to control its actions in a situation
+when it is about to extract a file which already exists on disk.
+
+@table @option
+@opindex keep-old-files
+@item --keep-old-files
+@itemx -k
+Do not replace existing files from archive. When such a file is
+encountered, @command{tar} issues an error message. Upon end of
+extraction, @command{tar} exits with code 2 (@pxref{exit status}).
+
+@item --skip-old-files
+Do not replace existing files from archive, but do not treat that
+as error. Such files are silently skipped and do not affect
+@command{tar} exit status.
+
+Additional verbosity can be obtained using @option{--warning=existing-file}
+together with that option (@pxref{warnings}).
+@end table
+
+@node Keep Newer Files
+@unnumberedsubsubsec Keep Newer Files
+
+@table @option
+@opindex keep-newer-files
+@item --keep-newer-files
+Do not replace existing files that are newer than their archive
+copies. This option is meaningless with @option{--list} (@option{-t}).
+@end table
+
+@node Unlink First
+@unnumberedsubsubsec Unlink First
+
+@table @option
+@opindex unlink-first
+@item --unlink-first
+@itemx -U
+Remove files before extracting over them.
+This can make @command{tar} run a bit faster if you know in advance
+that the extracted files all need to be removed. Normally this option
+slows @command{tar} down slightly, so it is disabled by default.
+@end table
+
+@node Recursive Unlink
+@unnumberedsubsubsec Recursive Unlink
+
+@table @option
+@opindex recursive-unlink
+@item --recursive-unlink
+When this option is specified, try removing files and directory hierarchies
+before extracting over them. @emph{This is a dangerous option!}
+@end table
+
+If you specify the @option{--recursive-unlink} option,
+@command{tar} removes @emph{anything} that keeps you from extracting a file
+as far as current permissions will allow it. This could include removal
+of the contents of a full directory hierarchy.
+
+@node Data Modification Times
+@unnumberedsubsubsec Setting Data Modification Times
+
+@cindex Data modification times of extracted files
+@cindex Modification times of extracted files
+Normally, @command{tar} sets the data modification times of extracted
+files to the corresponding times recorded for the files in the archive, but
+limits the permissions of extracted files by the current @code{umask}
+setting.
+
+To set the data modification times of extracted files to the time when
+the files were extracted, use the @option{--touch} (@option{-m}) option in
+conjunction with @option{--extract} (@option{--get}, @option{-x}).
+
+@table @option
+@opindex touch
+@item --touch
+@itemx -m
+Sets the data modification time of extracted archive members to the time
+they were extracted, not the time recorded for them in the archive.
+Use in conjunction with @option{--extract} (@option{--get}, @option{-x}).
+@end table
+
+@node Setting Access Permissions
+@unnumberedsubsubsec Setting Access Permissions
+
+@cindex Permissions of extracted files
+@cindex Modes of extracted files
+To set the modes (access permissions) of extracted files to those
+recorded for those files in the archive, use @option{--same-permissions}
+in conjunction with the @option{--extract} (@option{--get},
+@option{-x}) operation.
+
+@table @option
+@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
+archive, instead of current umask settings. Use in conjunction with
+@option{--extract} (@option{--get}, @option{-x}).
+@end table
+
+@node Directory Modification Times and Permissions
+@unnumberedsubsubsec Directory Modification Times and Permissions
+
+After successfully extracting a file member, @GNUTAR{} normally
+restores its permissions and modification times, as described in the
+previous sections. This cannot be done for directories, because
+after extracting a directory @command{tar} will almost certainly
+extract files into that directory and this will cause the directory
+modification time to be updated. Moreover, restoring that directory
+permissions may not permit file creation within it. Thus, restoring
+directory permissions and modification times must be delayed at least
+until all files have been extracted into that directory. @GNUTAR{}
+restores directories using the following approach.
+
+The extracted directories are created with the mode specified in the
+archive, as modified by the umask of the user, which gives sufficient
+permissions to allow file creation. The meta-information about the
+directory is recorded in the temporary list of directories. When
+preparing to extract next archive member, @GNUTAR{} checks if the
+directory prefix of this file contains the remembered directory. If
+it does not, the program assumes that all files have been extracted
+into that directory, restores its modification time and permissions
+and removes its entry from the internal list. This approach allows
+to correctly restore directory meta-information in the majority of
+cases, while keeping memory requirements sufficiently small. It is
+based on the fact, that most @command{tar} archives use the predefined
+order of members: first the directory, then all the files and
+subdirectories in that directory.
+
+However, this is not always true. The most important exception are
+incremental archives (@pxref{Incremental Dumps}). The member order in
+an incremental archive is reversed: first all directory members are
+stored, followed by other (non-directory) members. So, when extracting
+from incremental archives, @GNUTAR{} alters the above procedure. It
+remembers all restored directories, and restores their meta-data
+only after the entire archive has been processed. Notice, that you do
+not need to specify any special options for that, as @GNUTAR{}
+automatically detects archives in incremental format.
+
+There may be cases, when such processing is required for normal archives
+too. Consider the following example:
+
+@smallexample
+@group
+$ @kbd{tar --no-recursion -cvf archive \
+ foo foo/file1 bar bar/file foo/file2}
+foo/
+foo/file1
+bar/
+bar/file
+foo/file2
+@end group
+@end smallexample
+
+During the normal operation, after encountering @file{bar}
+@GNUTAR{} will assume that all files from the directory @file{foo}
+were already extracted and will therefore restore its timestamp and
+permission bits. However, after extracting @file{foo/file2} the
+directory timestamp will be offset again.
+
+To correctly restore directory meta-information in such cases, use
+the @option{--delay-directory-restore} command line option:
+
+@table @option
+@opindex delay-directory-restore
+@item --delay-directory-restore
+Delays restoring of the modification times and permissions of extracted
+directories until the end of extraction. This way, correct
+meta-information is restored even if the archive has unusual member
+ordering.
+
+@opindex no-delay-directory-restore
+@item --no-delay-directory-restore
+Cancel the effect of the previous @option{--delay-directory-restore}.
+Use this option if you have used @option{--delay-directory-restore} in
+@env{TAR_OPTIONS} variable (@pxref{TAR_OPTIONS}) and wish to
+temporarily disable it.
+@end table
+
+@node Writing to Standard Output
+@unnumberedsubsubsec Writing to Standard Output
+
+@cindex Writing extracted files to standard output
+@cindex Standard output, writing extracted files to
+To write the extracted files to the standard output, instead of
+creating the files on the file system, use @option{--to-stdout} (@option{-O}) in
+conjunction with @option{--extract} (@option{--get}, @option{-x}). This option is useful if you are
+extracting files to send them through a pipe, and do not need to
+preserve them in the file system. If you extract multiple members,
+they appear on standard output concatenated, in the order they are
+found in the archive.
+
+@table @option
+@opindex to-stdout
+@item --to-stdout
+@itemx -O
+Writes files to the standard output. Use only in conjunction with
+@option{--extract} (@option{--get}, @option{-x}). When this option is
+used, instead of creating the files specified, @command{tar} writes
+the contents of the files extracted to its standard output. This may
+be useful if you are only extracting the files in order to send them
+through a pipe. This option is meaningless with @option{--list}
+(@option{-t}).
+@end table
+
+This can be useful, for example, if you have a tar archive containing
+a big file and don't want to store the file on disk before processing
+it. You can use a command like this:
+
+@smallexample
+tar -xOzf foo.tgz bigfile | process
+@end smallexample
+
+or even like this if you want to process the concatenation of the files:
+
+@smallexample
+tar -xOzf foo.tgz bigfile1 bigfile2 | process
+@end smallexample
+
+However, @option{--to-command} may be more convenient for use with
+multiple files. See the next section.
+
+@node Writing to an External Program
+@unnumberedsubsubsec Writing to an External Program
+
+You can instruct @command{tar} to send the contents of each extracted
+file to the standard input of an external program:
+
+@table @option
+@opindex to-command
+@item --to-command=@var{command}
+Extract files and pipe their contents to the standard input of
+@var{command}. When this option is used, instead of creating the
+files specified, @command{tar} invokes @var{command} and pipes the
+contents of the files to its standard output. The @var{command} may
+contain command line arguments (see @ref{external, Running External Commands},
+for more detail).
+
+Notice, that @var{command} is executed once for each regular file
+extracted. Non-regular files (directories, etc.)@: are ignored when this
+option is used.
+@end table
+
+The command can obtain the information about the file it processes
+from the following environment variables:
+
+@table @env
+@vrindex TAR_FILETYPE, to-command environment
+@item TAR_FILETYPE
+Type of the file. It is a single letter with the following meaning:
+
+@multitable @columnfractions 0.10 0.90
+@item f @tab Regular file
+@item d @tab Directory
+@item l @tab Symbolic link
+@item h @tab Hard link
+@item b @tab Block device
+@item c @tab Character device
+@end multitable
+
+Currently only regular files are supported.
+
+@vrindex TAR_MODE, to-command environment
+@item TAR_MODE
+File mode, an octal number.
+
+@vrindex TAR_FILENAME, to-command environment
+@item TAR_FILENAME
+The name of the file.
+
+@vrindex TAR_REALNAME, to-command environment
+@item TAR_REALNAME
+Name of the file as stored in the archive.
+
+@vrindex TAR_UNAME, to-command environment
+@item TAR_UNAME
+Name of the file owner.
+
+@vrindex TAR_GNAME, to-command environment
+@item TAR_GNAME
+Name of the file owner group.
+
+@vrindex TAR_ATIME, to-command environment
+@item TAR_ATIME
+Time of last access. It is a decimal number, representing seconds
+since the Epoch. If the archive provides times with nanosecond
+precision, the nanoseconds are appended to the timestamp after a
+decimal point.
+
+@vrindex TAR_MTIME, to-command environment
+@item TAR_MTIME
+Time of last modification.
+
+@vrindex TAR_CTIME, to-command environment
+@item TAR_CTIME
+Time of last status change.
+
+@vrindex TAR_SIZE, to-command environment
+@item TAR_SIZE
+Size of the file.
+
+@vrindex TAR_UID, to-command environment
+@item TAR_UID
+UID of the file owner.
+
+@vrindex TAR_GID, to-command environment
+@item TAR_GID
+GID of the file owner.
+@end table
+
+Additionally, the following variables contain information about
+tar mode and the archive being processed:
+
+@table @env
+@vrindex TAR_VERSION, to-command environment
+@item TAR_VERSION
+@GNUTAR{} version number.
+
+@vrindex TAR_ARCHIVE, to-command environment
+@item TAR_ARCHIVE
+The name of the archive @command{tar} is processing.
+
+@vrindex TAR_BLOCKING_FACTOR, to-command environment
+@item TAR_BLOCKING_FACTOR
+Current blocking factor (@pxref{Blocking}).
+
+@vrindex TAR_VOLUME, to-command environment
+@item TAR_VOLUME
+Ordinal number of the volume @command{tar} is processing.
+
+@vrindex TAR_FORMAT, to-command environment
+@item TAR_FORMAT
+Format of the archive being processed. @xref{Formats}, for a complete
+list of archive format names.
+@end table
+
+These variables are defined prior to executing the command, so you can
+pass them as arguments, if you prefer. For example, if the command
+@var{proc} takes the member name and size as its arguments, then you
+could do:
+
+@smallexample
+$ @kbd{tar -x -f archive.tar \
+ --to-command='proc $TAR_FILENAME $TAR_SIZE'}
+@end smallexample
+
+@noindent
+Notice single quotes to prevent variable names from being expanded by
+the shell when invoking @command{tar}.
+
+If @var{command} exits with a non-0 status, @command{tar} will print
+an error message similar to the following:
+
+@smallexample
+tar: 2345: Child returned status 1
+@end smallexample
+
+Here, @samp{2345} is the PID of the finished process.
+
+If this behavior is not wanted, use @option{--ignore-command-error}:
+
+@table @option
+@opindex ignore-command-error
+@item --ignore-command-error
+Ignore exit codes of subprocesses. Notice that if the program
+exits on signal or otherwise terminates abnormally, the error message
+will be printed even if this option is used.
+
+@opindex no-ignore-command-error
+@item --no-ignore-command-error
+Cancel the effect of any previous @option{--ignore-command-error}
+option. This option is useful if you have set
+@option{--ignore-command-error} in @env{TAR_OPTIONS}
+(@pxref{TAR_OPTIONS}) and wish to temporarily cancel it.
+@end table
+
+@node remove files
+@unnumberedsubsubsec Removing Files
+
+@FIXME{The section is too terse. Something more to add? An example,
+maybe?}
+
+@table @option
+@opindex remove-files
+@item --remove-files
+Remove files after adding them to the archive.
+@end table
+
+@node Scarce
+@subsection Coping with Scarce Resources
+@UNREVISED
+
+@cindex Small memory
+@cindex Running out of space
+
+@menu
+* Starting File::
+* Same Order::
+@end menu
+
+@node Starting File
+@unnumberedsubsubsec Starting File
+
+@table @option
+@opindex starting-file
+@item --starting-file=@var{name}
+@itemx -K @var{name}
+Starts an operation in the middle of an archive. Use in conjunction
+with @option{--extract} (@option{--get}, @option{-x}) or @option{--list} (@option{-t}).
+@end table
+
+@cindex Middle of the archive, starting in the
+If a previous attempt to extract files failed due to lack of disk
+space, you can use @option{--starting-file=@var{name}} (@option{-K
+@var{name}}) to start extracting only after member @var{name} of the
+archive. This assumes, of course, that there is now free space, or
+that you are now extracting into a different file system. (You could
+also choose to suspend @command{tar}, remove unnecessary files from
+the file system, and then resume the same @command{tar} operation.
+In this case, @option{--starting-file} is not necessary.) See also
+@ref{interactive}, and @ref{exclude}.
+
+@node Same Order
+@unnumberedsubsubsec Same Order
+
+@table @option
+@cindex Large lists of file names on small machines
+@opindex same-order
+@opindex preserve-order
+@item --same-order
+@itemx --preserve-order
+@itemx -s
+To process large lists of file names on machines with small amounts of
+memory. Use in conjunction with @option{--compare} (@option{--diff},
+@option{-d}), @option{--list} (@option{-t}) or @option{--extract}
+(@option{--get}, @option{-x}).
+@end table
+
+The @option{--same-order} (@option{--preserve-order}, @option{-s}) option tells @command{tar} that the list of file
+names to be listed or extracted is sorted in the same order as the
+files in the archive. This allows a large list of names to be used,
+even on a small machine that would not otherwise be able to hold all
+the names in memory at the same time. Such a sorted list can easily be
+created by running @samp{tar -t} on the archive and editing its output.
+
+This option is probably never needed on modern computer systems.
+
+@node backup
+@section Backup options
+
+@cindex backup options
+
+@GNUTAR{} offers options for making backups of files
+before writing new versions. These options control the details of
+these backups. They may apply to the archive itself before it is
+created or rewritten, as well as individual extracted members. Other
+@acronym{GNU} programs (@command{cp}, @command{install}, @command{ln},
+and @command{mv}, for example) offer similar options.
+
+Backup options may prove unexpectedly useful when extracting archives
+containing many members having identical name, or when extracting archives
+on systems having file name limitations, making different members appear
+as having similar names through the side-effect of name truncation.
+@FIXME{This is true only if we have a good scheme for truncated backup names,
+which I'm not sure at all: I suspect work is needed in this area.}
+When any existing file is backed up before being overwritten by extraction,
+then clashing files are automatically be renamed to be unique, and the
+true name is kept for only the last file of a series of clashing files.
+By using verbose mode, users may track exactly what happens.
+
+At the detail level, some decisions are still experimental, and may
+change in the future, we are waiting comments from our users. So, please
+do not learn to depend blindly on the details of the backup features.
+For example, currently, directories themselves are never renamed through
+using these options, so, extracting a file over a directory still has
+good chances to fail. Also, backup options apply to created archives,
+not only to extracted members. For created archives, backups will not
+be attempted when the archive is a block or character device, or when it
+refers to a remote file.
+
+For the sake of simplicity and efficiency, backups are made by renaming old
+files prior to creation or extraction, and not by copying. The original
+name is restored if the file creation fails. If a failure occurs after a
+partial extraction of a file, both the backup and the partially extracted
+file are kept.
+
+@table @samp
+@item --backup[=@var{method}]
+@opindex backup
+@vindex VERSION_CONTROL
+@cindex backups
+Back up files that are about to be overwritten or removed.
+Without this option, the original versions are destroyed.
+
+Use @var{method} to determine the type of backups made.
+If @var{method} is not specified, use the value of the @env{VERSION_CONTROL}
+environment variable. And if @env{VERSION_CONTROL} is not set,
+use the @samp{existing} method.
+
+@vindex version-control @r{Emacs variable}
+This option corresponds to the Emacs variable @samp{version-control};
+the same values for @var{method} are accepted as in Emacs. This option
+also allows more descriptive names. The valid @var{method}s are:
+
+@table @samp
+@item t
+@itemx numbered
+@cindex numbered @r{backup method}
+Always make numbered backups.
+
+@item nil
+@itemx existing
+@cindex existing @r{backup method}
+Make numbered backups of files that already have them, simple backups
+of the others.
+
+@item never
+@itemx simple
+@cindex simple @r{backup method}
+Always make simple backups.
+
+@end table
+
+@item --suffix=@var{suffix}
+@opindex suffix
+@cindex backup suffix
+@vindex SIMPLE_BACKUP_SUFFIX
+Append @var{suffix} to each backup file made with @option{--backup}. If this
+option is not specified, the value of the @env{SIMPLE_BACKUP_SUFFIX}
+environment variable is used. And if @env{SIMPLE_BACKUP_SUFFIX} is not
+set, the default is @samp{~}, just as in Emacs.
+
+@end table
+
+@node Applications
+@section Notable @command{tar} Usages
+@UNREVISED
+
+@FIXME{Using Unix file linking capability to recreate directory
+structures---linking files into one subdirectory and then
+@command{tar}ring that directory.}
+
+@FIXME{Nice hairy example using absolute-names, newer, etc.}
+
+@findex uuencode
+You can easily use archive files to transport a group of files from
+one system to another: put all relevant files into an archive on one
+computer system, transfer the archive to another system, and extract
+the contents there. The basic transfer medium might be magnetic tape,
+Internet FTP, or even electronic mail (though you must encode the
+archive with @command{uuencode} in order to transport it properly by
+mail). Both machines do not have to use the same operating system, as
+long as they both support the @command{tar} program.
+
+For example, here is how you might copy a directory's contents from
+one disk to another, while preserving the dates, modes, owners and
+link-structure of all the files therein. In this case, the transfer
+medium is a @dfn{pipe}:
+
+@smallexample
+$ @kbd{(cd sourcedir; tar -cf - .) | (cd targetdir; tar -xf -)}
+@end smallexample
+
+@noindent
+You can avoid subshells by using @option{-C} option:
+
+@smallexample
+$ @kbd{tar -C sourcedir -cf - . | tar -C targetdir -xf -}
+@end smallexample
+
+@noindent
+The command also works using long option forms:
+
+@smallexample
+@group
+$ @kbd{(cd sourcedir; tar --create --file=- . ) \
+ | (cd targetdir; tar --extract --file=-)}
+@end group
+@end smallexample
+
+@noindent
+or
+
+@smallexample
+@group
+$ @kbd{tar --directory sourcedir --create --file=- . \
+ | tar --directory targetdir --extract --file=-}
+@end group
+@end smallexample
+
+@noindent
+This is one of the easiest methods to transfer a @command{tar} archive.
+
+@node looking ahead
+@section Looking Ahead: The Rest of this Manual
+
+You have now seen how to use all eight of the operations available to
+@command{tar}, and a number of the possible options. The next chapter
+explains how to choose and change file and archive names, how to use
+files to store names of other files which you can then call as
+arguments to @command{tar} (this can help you save time if you expect to
+archive the same list of files a number of times), and so forth.
+@FIXME{in case it's not obvious, i'm making this up in some sense
+based on my limited memory of what the next chapter *really* does. i
+just wanted to flesh out this final section a little bit so i'd
+remember to stick it in here. :-)}
+
+If there are too many files to conveniently list on the command line,
+you can list the names in a file, and @command{tar} will read that file.
+@xref{files}.
+
+There are various ways of causing @command{tar} to skip over some files,
+and not archive them. @xref{Choosing}.
+
+@node Backups
+@chapter Performing Backups and Restoring Files
+@cindex backups
+
+@GNUTAR{} is distributed along with the scripts for performing backups
+and restores. Even if there is a good chance those scripts may be
+satisfying to you, they are not the only scripts or methods available for doing
+backups and restore. You may well create your own, or use more
+sophisticated packages dedicated to that purpose.
+
+Some users are enthusiastic about @code{Amanda} (The Advanced Maryland
+Automatic Network Disk Archiver), a backup system developed by James
+da Silva @file{jds@@cs.umd.edu} and available on many Unix systems.
+This is free software, and it is available from @uref{http://www.amanda.org}.
+
+@FIXME{
+
+Here is a possible plan for a future documentation about the backuping
+scripts which are provided within the @GNUTAR{}
+distribution.
+
+@itemize @bullet
+@item dumps
+ @itemize @minus
+ @item what are dumps
+ @item different levels of dumps
+ @itemize +
+ @item full dump = dump everything
+ @item level 1, level 2 dumps etc
+ A level @var{n} dump dumps everything changed since the last level
+ @var{n}-1 dump (?)
+ @end itemize
+ @item how to use scripts for dumps (ie, the concept)
+ @itemize +
+ @item scripts to run after editing backup specs (details)
+ @end itemize
+ @item Backup Specs, what is it.
+ @itemize +
+ @item how to customize
+ @item actual text of script [/sp/dump/backup-specs]
+ @end itemize
+ @item Problems
+ @itemize +
+ @item rsh doesn't work
+ @item rtape isn't installed
+ @item (others?)
+ @end itemize
+ @item the @option{--incremental} option of tar
+ @item tapes
+ @itemize +
+ @item write protection
+ @item types of media, different sizes and types, useful for different things
+ @item files and tape marks
+ one tape mark between files, two at end.
+ @item positioning the tape
+ MT writes two at end of write,
+ backspaces over one when writing again.
+ @end itemize
+ @end itemize
+@end itemize
+}
+
+This chapter documents both the provided shell scripts and @command{tar}
+options which are more specific to usage as a backup tool.
+
+To @dfn{back up} a file system means to create archives that contain
+all the files in that file system. Those archives can then be used to
+restore any or all of those files (for instance if a disk crashes or a
+file is accidentally deleted). File system @dfn{backups} are also
+called @dfn{dumps}.
+
+@menu
+* Full Dumps:: Using @command{tar} to Perform Full Dumps
+* Incremental Dumps:: Using @command{tar} to Perform Incremental Dumps
+* Backup Levels:: Levels of Backups
+* Backup Parameters:: Setting Parameters for Backups and Restoration
+* Scripted Backups:: Using the Backup Scripts
+* Scripted Restoration:: Using the Restore Script
+@end menu
+
+@node Full Dumps
+@section Using @command{tar} to Perform Full Dumps
+@UNREVISED
+
+@cindex full dumps
+@cindex dumps, full
+
+@cindex corrupted archives
+Full dumps should only be made when no other people or programs
+are modifying files in the file system. If files are modified while
+@command{tar} is making the backup, they may not be stored properly in
+the archive, in which case you won't be able to restore them if you
+have to. (Files not being modified are written with no trouble, and do
+not corrupt the entire archive.)
+
+You will want to use the @option{--label=@var{archive-label}}
+(@option{-V @var{archive-label}}) option to give the archive a
+volume label, so you can tell what this archive is even if the label
+falls off the tape, or anything like that.
+
+Unless the file system you are dumping is guaranteed to fit on
+one volume, you will need to use the @option{--multi-volume} (@option{-M}) option.
+Make sure you have enough tapes on hand to complete the backup.
+
+If you want to dump each file system separately you will need to use
+the @option{--one-file-system} option to prevent
+@command{tar} from crossing file system boundaries when storing
+(sub)directories.
+
+The @option{--incremental} (@option{-G}) (@pxref{Incremental Dumps})
+option is not needed, since this is a complete copy of everything in
+the file system, and a full restore from this backup would only be
+done onto a completely
+empty disk.
+
+Unless you are in a hurry, and trust the @command{tar} program (and your
+tapes), it is a good idea to use the @option{--verify} (@option{-W})
+option, to make sure your files really made it onto the dump properly.
+This will also detect cases where the file was modified while (or just
+after) it was being archived. Not all media (notably cartridge tapes)
+are capable of being verified, unfortunately.
+
+@node Incremental Dumps
+@section Using @command{tar} to Perform Incremental Dumps
+
+@dfn{Incremental backup} is a special form of @GNUTAR{} archive that
+stores additional metadata so that exact state of the file system
+can be restored when extracting the archive.
+
+@GNUTAR{} currently offers two options for handling incremental
+backups: @option{--listed-incremental=@var{snapshot-file}} (@option{-g
+@var{snapshot-file}}) and @option{--incremental} (@option{-G}).
+
+@xopindex{listed-incremental, described}
+The option @option{--listed-incremental} instructs tar to operate on
+an incremental archive with additional metadata stored in a standalone
+file, called a @dfn{snapshot file}. The purpose of this file is to help
+determine which files have been changed, added or deleted since the
+last backup, so that the next incremental backup will contain only
+modified files. The name of the snapshot file is given as an argument
+to the option:
+
+@table @option
+@item --listed-incremental=@var{file}
+@itemx -g @var{file}
+ Handle incremental backups with snapshot data in @var{file}.
+@end table
+
+To create an incremental backup, you would use
+@option{--listed-incremental} together with @option{--create}
+(@pxref{create}). For example:
+
+@smallexample
+$ @kbd{tar --create \
+ --file=archive.1.tar \
+ --listed-incremental=/var/log/usr.snar \
+ /usr}
+@end smallexample
+
+This will create in @file{archive.1.tar} an incremental backup of
+the @file{/usr} file system, storing additional metadata in the file
+@file{/var/log/usr.snar}. If this file does not exist, it will be
+created. The created archive will then be a @dfn{level 0 backup};
+please see the next section for more on backup levels.
+
+Otherwise, if the file @file{/var/log/usr.snar} exists, it
+determines which files are modified. In this case only these files will be
+stored in the archive. Suppose, for example, that after running the
+above command, you delete file @file{/usr/doc/old} and create
+directory @file{/usr/local/db} with the following contents:
+
+@smallexample
+$ @kbd{ls /usr/local/db}
+/usr/local/db/data
+/usr/local/db/index
+@end smallexample
+
+Some time later you create another incremental backup. You will
+then see:
+
+@smallexample
+$ @kbd{tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar \
+ /usr}
+tar: usr/local/db: Directory is new
+usr/local/db/
+usr/local/db/data
+usr/local/db/index
+@end smallexample
+
+@noindent
+The created archive @file{archive.2.tar} will contain only these
+three members. This archive is called a @dfn{level 1 backup}. Notice
+that @file{/var/log/usr.snar} will be updated with the new data, so if
+you plan to create more @samp{level 1} backups, it is necessary to
+create a working copy of the snapshot file before running
+@command{tar}. The above example will then be modified as follows:
+
+@smallexample
+$ @kbd{cp /var/log/usr.snar /var/log/usr.snar-1}
+$ @kbd{tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar-1 \
+ /usr}
+@end smallexample
+
+@anchor{--level=0}
+@xopindex{level, described}
+You can force @samp{level 0} backups either by removing the snapshot
+file before running @command{tar}, or by supplying the
+@option{--level=0} option, e.g.:
+
+@smallexample
+$ @kbd{tar --create \
+ --file=archive.2.tar \
+ --listed-incremental=/var/log/usr.snar-0 \
+ --level=0 \
+ /usr}
+@end smallexample
+
+Incremental dumps depend crucially on time stamps, so the results are
+unreliable if you modify a file's time stamps during dumping (e.g.,
+with the @option{--atime-preserve=replace} option), or if you set the clock
+backwards.
+
+@anchor{device numbers}
+@cindex Device numbers, using in incremental backups
+Metadata stored in snapshot files include device numbers, which,
+obviously are supposed to be non-volatile values. However, it turns
+out that @acronym{NFS} devices have undependable values when an automounter
+gets in the picture. This can lead to a great deal of spurious
+redumping in incremental dumps, so it is somewhat useless to compare
+two @acronym{NFS} devices numbers over time. The solution implemented
+currently is to consider all @acronym{NFS} devices as being equal
+when it comes to comparing directories; this is fairly gross, but
+there does not seem to be a better way to go.
+
+Apart from using @acronym{NFS}, there are a number of cases where
+relying on device numbers can cause spurious redumping of unmodified
+files. For example, this occurs when archiving @acronym{LVM} snapshot
+volumes. To avoid this, use @option{--no-check-device} option:
+
+@table @option
+@xopindex{no-check-device, described}
+@item --no-check-device
+Do not rely on device numbers when preparing a list of changed files
+for an incremental dump.
+
+@xopindex{check-device, described}
+@item --check-device
+Use device numbers when preparing a list of changed files
+for an incremental dump. This is the default behavior. The purpose
+of this option is to undo the effect of the @option{--no-check-device}
+if it was given in @env{TAR_OPTIONS} environment variable
+(@pxref{TAR_OPTIONS}).
+@end table
+
+There is also another way to cope with changing device numbers. It is
+described in detail in @ref{Fixing Snapshot Files}.
+
+Note that incremental archives use @command{tar} extensions and may
+not be readable by non-@acronym{GNU} versions of the @command{tar} program.
+
+@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
+not need to access snapshot file, since all the data necessary for
+extraction are stored in the archive itself. So, when extracting, you
+can give whatever argument to @option{--listed-incremental}, the usual
+practice is to use @option{--listed-incremental=/dev/null}.
+Alternatively, you can use @option{--incremental}, which needs no
+arguments. In general, @option{--incremental} (@option{-G}) can be
+used as a shortcut for @option{--listed-incremental} when listing or
+extracting incremental backups (for more information regarding this
+option, @pxref{incremental-op}).
+
+When extracting from the incremental backup @GNUTAR{} attempts to
+restore the exact state the file system had when the archive was
+created. In particular, it will @emph{delete} those files in the file
+system that did not exist in their directories when the archive was
+created. If you have created several levels of incremental files,
+then in order to restore the exact contents the file system had when
+the last level was created, you will need to restore from all backups
+in turn. Continuing our example, to restore the state of @file{/usr}
+file system, one would do@footnote{Notice, that since both archives
+were created without @option{-P} option (@pxref{absolute}), these
+commands should be run from the root file system.}:
+
+@smallexample
+$ @kbd{tar --extract \
+ --listed-incremental=/dev/null \
+ --file archive.1.tar}
+$ @kbd{tar --extract \
+ --listed-incremental=/dev/null \
+ --file archive.2.tar}
+@end smallexample
+
+To list the contents of an incremental archive, use @option{--list}
+(@pxref{list}), as usual. To obtain more information about the
+archive, use @option{--listed-incremental} or @option{--incremental}
+combined with two @option{--verbose} options@footnote{Two
+@option{--verbose} options were selected to avoid breaking usual
+verbose listing output (@option{--list --verbose}) when using in
+scripts.
+
+@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
+given, no matter what the verbosity level. This behavior, and,
+especially, the binary output it produced were considered inconvenient
+and were changed in version 1.16.}:
+
+@smallexample
+@kbd{tar --list --incremental --verbose --verbose --file archive.tar}
+@end smallexample
+
+This command will print, for each directory in the archive, the list
+of files in that directory at the time the archive was created. This
+information is put out in a format which is both human-readable and
+unambiguous for a program: each file name is printed as
+
+@smallexample
+@var{x} @var{file}
+@end smallexample
+
+@noindent
+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). @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.
+
+@anchor{incremental-op}The option @option{--incremental} (@option{-G})
+gives the same behavior as @option{--listed-incremental} when used
+with @option{--list} and @option{--extract} options. When used with
+@option{--create} option, it creates an incremental archive without
+creating snapshot file. Thus, it is impossible to create several
+levels of incremental backups with @option{--incremental} option.
+
+@node Backup Levels
+@section Levels of Backups
+
+An archive containing all the files in the file system is called a
+@dfn{full backup} or @dfn{full dump}. You could insure your data by
+creating a full dump every day. This strategy, however, would waste a
+substantial amount of archive media and user time, as unchanged files
+are daily re-archived.
+
+It is more efficient to do a full dump only occasionally. To back up
+files between full dumps, you can use @dfn{incremental dumps}. A @dfn{level
+one} dump archives all the files that have changed since the last full
+dump.
+
+A typical dump strategy would be to perform a full dump once a week,
+and a level one dump once a day. This means some versions of files
+will in fact be archived more than once, but this dump strategy makes
+it possible to restore a file system to within one day of accuracy by
+only extracting two archives---the last weekly (full) dump and the
+last daily (level one) dump. The only information lost would be in
+files changed or created since the last daily backup. (Doing dumps
+more than once a day is usually not worth the trouble.)
+
+@GNUTAR{} comes with scripts you can use to do full
+and level-one (actually, even level-two and so on) dumps. Using
+scripts (shell programs) to perform backups and restoration is a
+convenient and reliable alternative to typing out file name lists
+and @command{tar} commands by hand.
+
+Before you use these scripts, you need to edit the file
+@file{backup-specs}, which specifies parameters used by the backup
+scripts and by the restore script. This file is usually located
+in @file{/etc/backup} directory. @xref{Backup Parameters}, for its
+detailed description. Once the backup parameters are set, you can
+perform backups or restoration by running the appropriate script.
+
+The name of the backup script is @code{backup}. The name of the
+restore script is @code{restore}. The following sections describe
+their use in detail.
+
+@emph{Please Note:} The backup and restoration scripts are
+designed to be used together. While it is possible to restore files by
+hand from an archive which was created using a backup script, and to create
+an archive by hand which could then be extracted using the restore script,
+it is easier to use the scripts. @xref{Incremental Dumps}, before
+making such an attempt.
+
+@node Backup Parameters
+@section Setting Parameters for Backups and Restoration
+
+The file @file{backup-specs} specifies backup parameters for the
+backup and restoration scripts provided with @command{tar}. You must
+edit @file{backup-specs} to fit your system configuration and schedule
+before using these scripts.
+
+Syntactically, @file{backup-specs} is a shell script, containing
+mainly variable assignments. However, any valid shell construct
+is allowed in this file. Particularly, you may wish to define
+functions within that script (e.g., see @code{RESTORE_BEGIN} below).
+For more information about shell script syntax, please refer to
+@url{http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#ta
+g_02, the definition of the Shell Command Language}. See also
+@ref{Top,,Bash Features,bashref,Bash Reference Manual}.
+
+The shell variables controlling behavior of @code{backup} and
+@code{restore} are described in the following subsections.
+
+@menu
+* General-Purpose Variables::
+* Magnetic Tape Control::
+* User Hooks::
+* backup-specs example:: An Example Text of @file{Backup-specs}
+@end menu
+
+@node General-Purpose Variables
+@subsection General-Purpose Variables
+
+@defvr {Backup variable} ADMINISTRATOR
+The user name of the backup administrator. @code{Backup} scripts
+sends a backup report to this address.
+@end defvr
+
+@defvr {Backup variable} BACKUP_HOUR
+The hour at which the backups are done. This can be a number from 0
+to 23, or the time specification in form @var{hours}:@var{minutes},
+or the string @samp{now}.
+
+This variable is used by @code{backup}. Its value may be overridden
+using @option{--time} option (@pxref{Scripted Backups}).
+@end defvr
+
+@defvr {Backup variable} TAPE_FILE
+
+The device @command{tar} writes the archive to. If @var{TAPE_FILE}
+is a remote archive (@pxref{remote-dev}), backup script will suppose
+that your @command{mt} is able to access remote devices. If @var{RSH}
+(@pxref{RSH}) is set, @option{--rsh-command} option will be added to
+invocations of @command{mt}.
+@end defvr
+
+@defvr {Backup variable} BLOCKING
+
+The blocking factor @command{tar} will use when writing the dump archive.
+@xref{Blocking Factor}.
+@end defvr
+
+@defvr {Backup variable} BACKUP_DIRS
+
+A list of file systems to be dumped (for @code{backup}), or restored
+(for @code{restore}). You can include any directory
+name in the list --- subdirectories on that file system will be
+included, regardless of how they may look to other networked machines.
+Subdirectories on other file systems will be ignored.
+
+The host name specifies which host to run @command{tar} on, and should
+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 (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 @acronym{NFS}.
+
+If the list of file systems is very long you may wish to put it
+in a separate file. This file is usually named
+@file{/etc/backup/dirs}, but this name may be overridden in
+@file{backup-specs} using @code{DIRLIST} variable.
+@end defvr
+
+@defvr {Backup variable} DIRLIST
+
+The name of the file that contains a list of file systems to backup
+or restore. By default it is @file{/etc/backup/dirs}.
+@end defvr
+
+@defvr {Backup variable} BACKUP_FILES
+
+A list of individual files to be dumped (for @code{backup}), or restored
+(for @code{restore}). These should be accessible from the machine on
+which the backup script is run.
+
+If the list of individual files is very long you may wish to store it
+in a separate file. This file is usually named
+@file{/etc/backup/files}, but this name may be overridden in
+@file{backup-specs} using @code{FILELIST} variable.
+@end defvr
+
+@defvr {Backup variable} FILELIST
+
+The name of the file that contains a list of individual files to backup
+or restore. By default it is @file{/etc/backup/files}.
+@end defvr
+
+@defvr {Backup variable} MT
+
+Full file name of @command{mt} binary.
+@end defvr
+
+@defvr {Backup variable} RSH
+@anchor{RSH}
+Full file name of @command{rsh} binary or its equivalent. You may wish to
+set it to @code{ssh}, to improve security. In this case you will have
+to use public key authentication.
+@end defvr
+
+@defvr {Backup variable} RSH_COMMAND
+
+Full file name of @command{rsh} binary on remote machines. This will
+be passed via @option{--rsh-command} option to the remote invocation
+of @GNUTAR{}.
+@end defvr
+
+@defvr {Backup variable} VOLNO_FILE
+
+Name of temporary file to hold volume numbers. This needs to be accessible
+by all the machines which have file systems to be dumped.
+@end defvr
+
+@defvr {Backup variable} XLIST
+
+Name of @dfn{exclude file list}. An @dfn{exclude file list} is a file
+located on the remote machine and containing the list of files to
+be excluded from the backup. Exclude file lists are searched in
+/etc/tar-backup directory. A common use for exclude file lists
+is to exclude files containing security-sensitive information
+(e.g., @file{/etc/shadow} from backups).
+
+This variable affects only @code{backup}.
+@end defvr
+
+@defvr {Backup variable} SLEEP_TIME
+
+Time to sleep between dumps of any two successive file systems
+
+This variable affects only @code{backup}.
+@end defvr
+
+@defvr {Backup variable} DUMP_REMIND_SCRIPT
+
+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, 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
+
+Message to display on the terminal while waiting for dump time. Usually
+this will just be some literal text.
+@end defvr
+
+@defvr {Backup variable} TAR
+
+Full file name of the @GNUTAR{} executable. If this is not set, backup
+scripts will search @command{tar} in the current shell path.
+@end defvr
+
+@node Magnetic Tape Control
+@subsection Magnetic Tape Control
+
+Backup scripts access tape device using special @dfn{hook functions}.
+These functions take a single argument --- the name of the tape
+device. Their names are kept in the following variables:
+
+@defvr {Backup variable} MT_BEGIN
+The name of @dfn{begin} function. This function is called before
+accessing the drive. By default it retensions the tape:
+
+@smallexample
+MT_BEGIN=mt_begin
+
+mt_begin() @{
+ mt -f "$1" retension
+@}
+@end smallexample
+@end defvr
+
+@defvr {Backup variable} MT_REWIND
+The name of @dfn{rewind} function. The default definition is as
+follows:
+
+@smallexample
+MT_REWIND=mt_rewind
+
+mt_rewind() @{
+ mt -f "$1" rewind
+@}
+@end smallexample
+
+@end defvr
+
+@defvr {Backup variable} MT_OFFLINE
+The name of the function switching the tape off line. By default
+it is defined as follows:
+
+@smallexample
+MT_OFFLINE=mt_offline
+
+mt_offline() @{
+ mt -f "$1" offl
+@}
+@end smallexample
+@end defvr
+
+@defvr {Backup variable} MT_STATUS
+The name of the function used to obtain the status of the archive device,
+including error count. Default definition:
+
+@smallexample
+MT_STATUS=mt_status
+
+mt_status() @{
+ mt -f "$1" status
+@}
+@end smallexample
+@end defvr
+
+@node User Hooks
+@subsection User Hooks
+
+@dfn{User hooks} are shell functions executed before and after
+each @command{tar} invocation. Thus, there are @dfn{backup
+hooks}, which are executed before and after dumping each file
+system, and @dfn{restore hooks}, executed before and
+after restoring a file system. Each user hook is a shell function
+taking four arguments:
+
+@deffn {User Hook Function} hook @var{level} @var{host} @var{fs} @var{fsname}
+Its arguments are:
+
+@table @var
+@item level
+Current backup or restore level.
+
+@item host
+Name or IP address of the host machine being dumped or restored.
+
+@item fs
+Full file name of the file system being dumped or restored.
+
+@item fsname
+File system name with directory separators replaced with colons. This
+is useful, e.g., for creating unique files.
+@end table
+@end deffn
+
+Following variables keep the names of user hook functions:
+
+@defvr {Backup variable} DUMP_BEGIN
+Dump begin function. It is executed before dumping the file system.
+@end defvr
+
+@defvr {Backup variable} DUMP_END
+Executed after dumping the file system.
+@end defvr
+
+@defvr {Backup variable} RESTORE_BEGIN
+Executed before restoring the file system.
+@end defvr
+
+@defvr {Backup variable} RESTORE_END
+Executed after restoring the file system.
+@end defvr
+
+@node backup-specs example
+@subsection An Example Text of @file{Backup-specs}
+
+The following is an example of @file{backup-specs}:
+
+@smallexample
+# site-specific parameters for file system backup.
+
+ADMINISTRATOR=friedman
+BACKUP_HOUR=1
+TAPE_FILE=/dev/nrsmt0
+
+# Use @code{ssh} instead of the less secure @code{rsh}
+RSH=/usr/bin/ssh
+RSH_COMMAND=/usr/bin/ssh
+
+# Override MT_STATUS function:
+my_status() @{
+ mts -t $TAPE_FILE
+@}
+MT_STATUS=my_status
+
+# Disable MT_OFFLINE function
+MT_OFFLINE=:
+
+BLOCKING=124
+BACKUP_DIRS="
+ albert:/fs/fsf
+ apple-gunkies:/gd
+ albert:/fs/gd2
+ albert:/fs/gp
+ geech:/usr/jla
+ churchy:/usr/roland
+ albert:/
+ albert:/usr
+ apple-gunkies:/
+ apple-gunkies:/usr
+ gnu:/hack
+ gnu:/u
+ apple-gunkies:/com/mailer/gnu
+ apple-gunkies:/com/archive/gnu"
+
+BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
+
+@end smallexample
+
+@node Scripted Backups
+@section Using the Backup Scripts
+
+The syntax for running a backup script is:
+
+@smallexample
+backup --level=@var{level} --time=@var{time}
+@end smallexample
+
+The @option{--level} option requests the dump level. Thus, to produce
+a full dump, specify @code{--level=0} (this is the default, so
+@option{--level} may be omitted if its value is
+@code{0})@footnote{For backward compatibility, the @code{backup} will also
+try to deduce the requested dump level from the name of the
+script itself. If the name consists of a string @samp{level-}
+followed by a single decimal digit, that digit is taken as
+the dump level number. Thus, you may create a link from @code{backup}
+to @code{level-1} and then run @code{level-1} whenever you need to
+create a level one dump.}.
+
+The @option{--time} option determines when should the backup be
+run. @var{Time} may take three forms:
+
+@table @asis
+@item @var{hh}:@var{mm}
+
+The dump must be run at @var{hh} hours @var{mm} minutes.
+
+@item @var{hh}
+
+The dump must be run at @var{hh} hours.
+
+@item now
+
+The dump must be run immediately.
+@end table
+
+You should start a script with a tape or disk mounted. Once you
+start a script, it prompts you for new tapes or disks as it
+needs them. Media volumes don't have to correspond to archive
+files --- a multi-volume archive can be started in the middle of a
+tape that already contains the end of another multi-volume archive.
+The @code{restore} script prompts for media by its archive volume,
+so to avoid an error message you should keep track of which tape
+(or disk) contains which volume of the archive (@pxref{Scripted
+Restoration}).
+
+The backup scripts write two files on the file system. The first is a
+record file in @file{/etc/tar-backup/}, which is used by the scripts
+to store and retrieve information about which files were dumped. This
+file is not meant to be read by humans, and should not be deleted by
+them. @xref{Snapshot Files}, for a more detailed explanation of this
+file.
+
+The second file is a log file containing the names of the file systems
+and files dumped, what time the backup was made, and any error
+messages that were generated, as well as how much space was left in
+the media volume after the last volume of the archive was written.
+You should check this log file after every backup. The file name is
+@file{log-@var{mm-dd-yyyy}-level-@var{n}}, where @var{mm-dd-yyyy}
+represents current date, and @var{n} represents current dump level number.
+
+The script also prints the name of each system being dumped to the
+standard output.
+
+Following is the full list of options accepted by @code{backup}
+script:
+
+@table @option
+@item -l @var{level}
+@itemx --level=@var{level}
+Do backup level @var{level} (default 0).
+
+@item -f
+@itemx --force
+Force backup even if today's log file already exists.
+
+@item -v[@var{level}]
+@itemx --verbose[=@var{level}]
+Set verbosity level. The higher the level is, the more debugging
+information will be output during execution. Default @var{level}
+is 100, which means the highest debugging level.
+
+@item -t @var{start-time}
+@itemx --time=@var{start-time}
+Wait till @var{time}, then do backup.
+
+@item -h
+@itemx --help
+Display short help message and exit.
+
+@item -V
+@itemx --version
+Display information about the program's name, version, origin and legal
+status, all on standard output, and then exit successfully.
+@end table
+
+
+@node Scripted Restoration
+@section Using the Restore Script
+
+To restore files that were archived using a scripted backup, use the
+@code{restore} script. Its usage is quite straightforward. In the
+simplest form, invoke @code{restore --all}, it will
+then restore all the file systems and files specified in
+@file{backup-specs} (@pxref{General-Purpose Variables,BACKUP_DIRS}).
+
+You may select the file systems (and/or files) to restore by
+giving @code{restore} a list of @dfn{patterns} in its command
+line. For example, running
+
+@smallexample
+restore 'albert:*'
+@end smallexample
+
+@noindent
+will restore all file systems on the machine @samp{albert}. A more
+complicated example:
+
+@smallexample
+restore 'albert:*' '*:/var'
+@end smallexample
+
+@noindent
+This command will restore all file systems on the machine @samp{albert}
+as well as @file{/var} file system on all machines.
+
+By default @code{restore} will start restoring files from the lowest
+available dump level (usually zero) and will continue through
+all available dump levels. There may be situations where such a
+thorough restore is not necessary. For example, you may wish to
+restore only files from the recent level one backup. To do so,
+use @option{--level} option, as shown in the example below:
+
+@smallexample
+restore --level=1
+@end smallexample
+
+The full list of options accepted by @code{restore} follows:
+
+@table @option
+@item -a
+@itemx --all
+Restore all file systems and files specified in @file{backup-specs}.
+
+@item -l @var{level}
+@itemx --level=@var{level}
+Start restoring from the given backup level, instead of the default 0.
+
+@item -v[@var{level}]
+@itemx --verbose[=@var{level}]
+Set verbosity level. The higher the level is, the more debugging
+information will be output during execution. Default @var{level}
+is 100, which means the highest debugging level.
+
+@item -h
+@itemx --help
+Display short help message and exit.
+
+@item -V
+@itemx --version
+Display information about the program's name, version, origin and legal
+status, all on standard output, and then exit successfully.
+@end table
+
+You should start the restore script with the media containing the
+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. @xref{Tape Positioning}, for a discussion of tape
+positioning.
+
+@quotation
+@strong{Warning:} The script will delete files from the active file
+system if they were not in the file system when the archive was made.
+@end quotation
+
+@xref{Incremental Dumps}, for an explanation of how the script makes
+that determination.
+
+@node Choosing
+@chapter Choosing Files and Names for @command{tar}
+
+Certain options to @command{tar} enable you to specify a name for your
+archive. Other options let you decide which files to include or exclude
+from the archive, based on when or whether files were modified, whether
+the file names do or don't match specified patterns, or whether files
+are in specified directories.
+
+This chapter discusses these options in detail.
+
+@menu
+* file:: Choosing the Archive's Name
+* Selecting Archive Members::
+* files:: Reading Names from a File
+* exclude:: Excluding Some Files
+* 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
+@end menu
+
+@node file
+@section Choosing and Naming Archive Files
+
+@cindex Naming an archive
+@cindex Archive Name
+@cindex Choosing an archive file
+@cindex Where is the archive?
+@opindex file
+By default, @command{tar} uses an archive file name that was compiled when
+it was built on the system; usually this name refers to some physical
+tape drive on the machine. However, the person who installed @command{tar}
+on the system may not have set the default to a meaningful value as far as
+most users are concerned. As a result, you will usually want to tell
+@command{tar} where to find (or create) the archive. The
+@option{--file=@var{archive-name}} (@option{-f @var{archive-name}})
+option allows you to either specify or name a file to use as the archive
+instead of the default archive file location.
+
+@table @option
+@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
+any operation.
+@end table
+
+For example, in this @command{tar} command,
+
+@smallexample
+$ @kbd{tar -cvf collection.tar blues folk jazz}
+@end smallexample
+
+@noindent
+@file{collection.tar} is the name of the archive. It must directly
+follow the @option{-f} option, since whatever directly follows @option{-f}
+@emph{will} end up naming the archive. If you neglect to specify an
+archive name, you may end up overwriting a file in the working directory
+with the archive you create since @command{tar} will use this file's name
+for the archive name.
+
+An archive can be saved as a file in the file system, sent through a
+pipe or over a network, or written to an I/O device such as a tape,
+floppy disk, or CD write drive.
+
+@cindex Writing new archives
+@cindex Archive creation
+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 (i.e., @file{/dev/tu00}).
+
+@cindex Standard input and output
+@cindex tar to standard input and output
+If you use @file{-} as an @var{archive-name}, @command{tar} reads the
+archive from standard input (when listing or extracting files), or
+writes it to standard output (when creating an archive). If you use
+@file{-} as an @var{archive-name} when modifying an archive,
+@command{tar} reads the original archive from its standard input and
+writes the entire new archive to its standard output.
+
+The following example is a convenient way of copying directory
+hierarchy from @file{sourcedir} to @file{targetdir}.
+
+@smallexample
+$ @kbd{(cd sourcedir; tar -cf - .) | (cd targetdir; tar -xpf -)}
+@end smallexample
+
+The @option{-C} option allows to avoid using subshells:
+
+@smallexample
+$ @kbd{tar -C sourcedir -cf - . | tar -C targetdir -xpf -}
+@end smallexample
+
+In both examples above, the leftmost @command{tar} invocation archives
+the contents of @file{sourcedir} to the standard output, while the
+rightmost one reads this archive from its standard input and
+extracts it. The @option{-p} option tells it to restore permissions
+of the extracted files.
+
+@cindex Remote devices
+@cindex tar to a remote device
+@anchor{remote-dev}
+To specify an archive file on a device attached to a remote machine,
+use the following:
+
+@smallexample
+@kbd{--file=@var{hostname}:/@var{dev}/@var{file-name}}
+@end smallexample
+
+@noindent
+@command{tar} will set up the remote connection, if possible, and
+prompt you for a username and password. If you use
+@option{--file=@@@var{hostname}:/@var{dev}/@var{file-name}}, @command{tar}
+will attempt to set up the remote connection using your username
+as the username on the remote machine.
+
+@cindex Local and remote archives
+@anchor{local and remote archives}
+If the archive file name includes a colon (@samp{:}), then it is assumed
+to be a file on another machine. If the archive file is
+@samp{@var{user}@@@var{host}:@var{file}}, then @var{file} is used on the
+host @var{host}. The remote host is accessed using the @command{rsh}
+program, with a username of @var{user}. If the username is omitted
+(along with the @samp{@@} sign), then your user name will be used.
+(This is the normal @command{rsh} behavior.) It is necessary for the
+remote machine, in addition to permitting your @command{rsh} access, to
+have the @file{rmt} program installed (this command is included in
+the @GNUTAR{} distribution and by default is installed under
+@file{@var{prefix}/libexec/rmt}, where @var{prefix} means your
+installation prefix). If you need to use a file whose name includes a
+colon, then the remote tape drive behavior
+can be inhibited by using the @option{--force-local} option.
+
+When the archive is being created to @file{/dev/null}, @GNUTAR{}
+tries to minimize input and output operations. The Amanda backup
+system, when used with @GNUTAR{}, has an initial sizing pass which
+uses this feature.
+
+@node Selecting Archive Members
+@section Selecting Archive Members
+@cindex Specifying files to act on
+@cindex Specifying archive members
+
+@dfn{File Name arguments} specify which files in the file system
+@command{tar} operates on, when creating or adding to an archive, or which
+archive members @command{tar} operates on, when reading or deleting from
+an archive. @xref{Operations}.
+
+To specify file names, you can include them as the last arguments on
+the command line, as follows:
+@smallexample
+@kbd{tar} @var{operation} [@var{option1} @var{option2} @dots{}] [@var{file name-1} @var{file name-2} @dots{}]
+@end smallexample
+
+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 (@acronym{ASCII} 7)
+@item \b @tab Backspace (@acronym{ASCII} 8)
+@item \f @tab Form feed (@acronym{ASCII} 12)
+@item \n @tab New line (@acronym{ASCII} 10)
+@item \r @tab Carriage return (@acronym{ASCII} 13)
+@item \t @tab Horizontal tabulation (@acronym{ASCII} 9)
+@item \v @tab Vertical tabulation (@acronym{ASCII} 11)
+@item \? @tab @acronym{ASCII} 127
+@item \@var{n} @tab @acronym{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}.
+
+If you do not specify files, @command{tar} behavior differs depending
+on the operation mode as described below:
+
+When @command{tar} is invoked with @option{--create} (@option{-c}),
+@command{tar} will stop immediately, reporting the following:
+
+@smallexample
+@group
+$ @kbd{tar cf a.tar}
+tar: Cowardly refusing to create an empty archive
+Try 'tar --help' or 'tar --usage' for more information.
+@end group
+@end smallexample
+
+If you specify either @option{--list} (@option{-t}) or
+@option{--extract} (@option{--get}, @option{-x}), @command{tar}
+operates on all the archive members in the archive.
+
+If run with @option{--diff} option, tar will compare the archive with
+the contents of the current working directory.
+
+If you specify any other operation, @command{tar} does nothing.
+
+By default, @command{tar} takes file names from the command line. However,
+there are other ways to specify file or member names, or to modify the
+manner in which @command{tar} selects the files or members upon which to
+operate. In general, these methods work both for specifying the names
+of files and archive members.
+
+@node files
+@section Reading Names from a File
+
+@cindex Reading file names from a file
+@cindex Lists of file names
+@cindex File Name arguments, alternatives
+@cindex @command{find}, using with @command{tar}
+Instead of giving the names of files or archive members on the command
+line, you can put the names into a file, and then use the
+@option{--files-from=@var{file-of-names}} (@option{-T
+@var{file-of-names}}) option to @command{tar}. Give the name of the
+file which contains the list of files to include as the argument to
+@option{--files-from}. In the list, the file names should be separated by
+newlines. You will frequently use this option when you have generated
+the list of files to archive with the @command{find} utility.
+
+@table @option
+@opindex files-from
+@item --files-from=@var{file-name}
+@itemx -T @var{file-name}
+Get names to extract or create from file @var{file-name}.
+@end table
+
+If you give a single dash as a file name for @option{--files-from}, (i.e.,
+you specify either @code{--files-from=-} or @code{-T -}), then the file
+names are read from standard input.
+
+Unless you are running @command{tar} with @option{--create}, you cannot use
+both @code{--files-from=-} and @code{--file=-} (@code{-f -}) in the same
+command.
+
+Any number of @option{-T} options can be given in the command line.
+
+The following example shows how to use @command{find} to generate a list of
+files smaller than 400K in length and put that list into a file
+called @file{small-files}. You can then use the @option{-T} option to
+@command{tar} to specify the files from that file, @file{small-files}, to
+create the archive @file{little.tgz}. (The @option{-z} option to
+@command{tar} compresses the archive with @command{gzip}; @pxref{gzip} for
+more information.)
+
+@smallexample
+$ @kbd{find . -size -400 -print > small-files}
+$ @kbd{tar -c -v -z -T small-files -f little.tgz}
+@end smallexample
+
+@noindent
+By default, each line read from the file list is first stripped off
+any leading and trailing whitespace. If the resulting string begins
+with @samp{-} character, it is considered a @command{tar} option and is
+processed accordingly@footnote{Versions of @GNUTAR{} up to 1.15.1
+recognized only @option{-C} option in file lists, and only if the
+option and its argument occupied two consecutive lines.}. For example,
+the common use of this feature is to change to another directory by
+specifying @option{-C} option:
+
+@smallexample
+@group
+$ @kbd{cat list}
+-C/etc
+passwd
+hosts
+-C/lib
+libc.a
+$ @kbd{tar -c -f foo.tar --files-from list}
+@end group
+@end smallexample
+
+@noindent
+In this example, @command{tar} will first switch to @file{/etc}
+directory and add files @file{passwd} and @file{hosts} to the
+archive. Then it will change to @file{/lib} directory and will archive
+the file @file{libc.a}. Thus, the resulting archive @file{foo.tar} will
+contain:
+
+@smallexample
+@group
+$ @kbd{tar tf foo.tar}
+passwd
+hosts
+libc.a
+@end group
+@end smallexample
+
+Note, that any options used in the file list remain in effect for the
+rest of the command line. For example, using the same @file{list}
+file as above, the following command
+
+@smallexample
+$ @kbd{tar -c -f foo.tar --files-from list libcurses.a}
+@end smallexample
+
+@noindent
+will look for file @file{libcurses.a} in the directory @file{/lib},
+because it was used with the last @option{-C} option
+(@pxref{Position-Sensitive Options}).
+
+@anchor{verbatim-files-from}
+@opindex verbatim-files-from
+If such option handling is undesirable, use the
+@option{--verbatim-files-from} option. When this option is in effect,
+each line read from the file list is treated as a file name. Notice,
+that this means, in particular, that no whitespace trimming is
+performed.
+
+@anchor{no-verbatim-files-from}
+@opindex no-verbatim-files-from
+The @option{--verbatim-files-from} affects all @option{-T} options
+that follow it in the command line. The default behavior can be
+restored using @option{--no-verbatim-files-from} option.
+
+@opindex add-file
+To disable option handling for a single file name, use the
+@option{--add-file} option, e.g.: @code{--add-file=--my-file}.
+
+You can use any @GNUTAR{} command line options in the file list file,
+including @option{--files-from} option itself. This allows for
+including contents of a file list into another file list file.
+Note however, that options that control file list processing, such as
+@option{--verbatim-files-from} or @option{--null} won't affect the
+file they appear in. They will affect next @option{--files-from}
+option, if there is any.
+
+@menu
+* nul::
+@end menu
+
+@node nul
+@subsection @code{NUL}-Terminated File Names
+
+@cindex File names, terminated by @code{NUL}
+@cindex @code{NUL}-terminated file names
+The @option{--null} option causes
+@option{--files-from=@var{file-of-names}} (@option{-T @var{file-of-names}})
+to read file names terminated by a @code{NUL} instead of a newline, so
+files whose names contain newlines can be archived using
+@option{--files-from}.
+
+@table @option
+@xopindex{null, described}
+@item --null
+Only consider @code{NUL}-terminated file names, instead of files that
+terminate in a newline.
+
+@xopindex{no-null, described}
+@item --no-null
+Undo the effect of any previous @option{--null} option.
+@end table
+
+The @option{--null} option is just like the one in @acronym{GNU}
+@command{xargs} and @command{cpio}, and is useful with the
+@option{-print0} predicate of @acronym{GNU} @command{find}. In
+@command{tar}, @option{--null} also disables special handling for
+file names that begin with dash (similar to
+@option{--verbatim-files-from} option).
+
+This example shows how to use @command{find} to generate a list of files
+larger than 800K in length and put that list into a file called
+@file{long-files}. The @option{-print0} option to @command{find} is just
+like @option{-print}, except that it separates files with a @code{NUL}
+rather than with a newline. You can then run @command{tar} with both the
+@option{--null} and @option{-T} options to specify that @command{tar} gets the
+files from that file, @file{long-files}, to create the archive
+@file{big.tgz}. The @option{--null} option to @command{tar} will cause
+@command{tar} to recognize the @code{NUL} separator between files.
+
+@smallexample
+$ @kbd{find . -size +800 -print0 > long-files}
+$ @kbd{tar -c -v --null --files-from=long-files --file=big.tar}
+@end smallexample
+
+The @option{--no-null} option can be used if you need to read both
+@code{NUL}-terminated and newline-terminated files on the same command line.
+For example, if @file{flist} is a newline-terminated file, then the
+following command can be used to combine it with the above command:
+
+@smallexample
+@group
+$ @kbd{find . -size +800 -print0 |
+ tar -c -f big.tar --null -T - --no-null -T flist}
+@end group
+@end smallexample
+
+This example uses short options for typographic reasons, to avoid
+very long lines.
+
+@GNUTAR is tries to automatically detect @code{NUL}-terminated file
+lists, so in many cases it is safe to use them even without the
+@option{--null} option. In this case @command{tar} will print a
+warning and continue reading such a file as if @option{--null} were
+actually given:
+
+@smallexample
+@group
+$ @kbd{find . -size +800 -print0 | tar -c -f big.tar -T -}
+tar: -: file name read contains nul character
+@end group
+@end smallexample
+
+The null terminator, however, remains in effect only for this
+particular file, any following @option{-T} options will assume
+newline termination. Of course, the null autodetection applies
+to these eventual surplus @option{-T} options as well.
+
+@node exclude
+@section Excluding Some Files
+
+@cindex File names, excluding files by
+@cindex Excluding files by name and pattern
+@cindex Excluding files by file system
+@opindex exclude
+@opindex exclude-from
+To avoid operating on files whose names match a particular pattern,
+use the @option{--exclude} or @option{--exclude-from} options.
+
+@table @option
+@opindex exclude
+@item --exclude=@var{pattern}
+Causes @command{tar} to ignore files that match the @var{pattern}.
+@end table
+
+@findex exclude
+The @option{--exclude=@var{pattern}} option prevents any file or
+member whose name matches the shell wildcard (@var{pattern}) from
+being operated on.
+For example, to create an archive with all the contents of the directory
+@file{src} except for files whose names end in @file{.o}, use the
+command @samp{tar -cf src.tar --exclude='*.o' src}.
+
+You may give multiple @option{--exclude} options.
+
+@table @option
+@opindex exclude-from
+@item --exclude-from=@var{file}
+@itemx -X @var{file}
+Causes @command{tar} to ignore files that match the patterns listed in
+@var{file}.
+@end table
+
+@findex exclude-from
+Use the @option{--exclude-from} option to read a
+list of patterns, one per line, from @var{file}; @command{tar} will
+ignore files matching those patterns. Thus if @command{tar} is
+called as @w{@samp{tar -c -X foo .}} and the file @file{foo} contains a
+single line @file{*.o}, no files whose names end in @file{.o} will be
+added to the archive.
+
+Notice, that lines from @var{file} are read verbatim. One of the
+frequent errors is leaving some extra whitespace after a file name,
+which is difficult to catch using text editors.
+
+However, empty lines are OK.
+
+@cindex VCS, excluding patterns from ignore files
+@cindex VCS, ignore files
+@cindex CVS, ignore files
+@cindex Git, ignore files
+@cindex Bazaar, ignore files
+@cindex Mercurial, ignore files
+When archiving directories that are under some version control system (VCS),
+it is often convenient to read exclusion patterns from this VCS'
+ignore files (e.g. @file{.cvsignore}, @file{.gitignore}, etc.) The
+following options provide such possibility:
+
+@table @option
+@anchor{exclude-vcs-ignores}
+@opindex exclude-vcs-ignores
+@item --exclude-vcs-ignores
+Before archiving a directory, see if it contains any of the following
+files: @file{cvsignore}, @file{.gitignore}, @file{.bzrignore}, or
+@file{.hgignore}. If so, read ignore patterns from these files.
+
+The patterns are treated much as the corresponding VCS would treat
+them, i.e.:
+
+@table @file
+@findex .cvsignore
+@item .cvsignore
+Contains shell-style globbing patterns that apply only to the
+directory where this file resides. No comments are allowed in the
+file. Empty lines are ignored.
+
+@findex .gitignore
+@item .gitignore
+Contains shell-style globbing patterns. Applies to the directory
+where @file{.gitfile} is located and all its subdirectories.
+
+Any line beginning with a @samp{#} is a comment. Backslash escapes
+the comment character.
+
+@findex .bzrignore
+@item .bzrignore
+Contains shell globbing-patterns and regular expressions (if prefixed
+with @samp{RE:}@footnote{According to the Bazaar docs,
+globbing-patterns are Korn-shell style and regular expressions are
+perl-style. As of @GNUTAR{} version @value{VERSION}, these are
+treated as shell-style globs and posix extended regexps. This will be
+fixed in future releases.}. Patterns affect the directory and all its
+subdirectories.
+
+Any line beginning with a @samp{#} is a comment.
+
+@findex .hgignore
+@item .hgignore
+Contains posix regular expressions@footnote{Support for perl-style
+regexps will appear in future releases.}. The line @samp{syntax:
+glob} switches to shell globbing patterns. The line @samp{syntax:
+regexp} switches back. Comments begin with a @samp{#}. Patterns
+affect the directory and all its subdirectories.
+@end table
+
+@opindex exclude-ignore
+@item --exclude-ignore=@var{file}
+Before dumping a directory, @command{tar} checks if it contains
+@var{file}. If so, exclusion patterns are read from this file.
+The patterns affect only the directory itself.
+
+@opindex exclude-ignore-recursive
+@item --exclude-ignore-recursive=@var{file}
+Same as @option{--exclude-ignore}, except that the patterns read
+affect both the directory where @var{file} resides and all its
+subdirectories.
+@end table
+
+@table @option
+@cindex version control system, excluding files
+@cindex VCS, excluding files
+@cindex SCCS, excluding files
+@cindex RCS, excluding files
+@cindex CVS, excluding files
+@cindex SVN, excluding files
+@cindex git, excluding files
+@cindex Bazaar, excluding files
+@cindex Arch, excluding files
+@cindex Mercurial, excluding files
+@cindex Darcs, excluding files
+@anchor{exclude-vcs}
+@opindex exclude-vcs
+@item --exclude-vcs
+Exclude files and directories used by following version control
+systems: @samp{CVS}, @samp{RCS}, @samp{SCCS}, @samp{SVN}, @samp{Arch},
+@samp{Bazaar}, @samp{Mercurial}, and @samp{Darcs}.
+
+As of version @value{VERSION}, the following files are excluded:
+
+@itemize @bullet
+@item @file{CVS/}, and everything under it
+@item @file{RCS/}, and everything under it
+@item @file{SCCS/}, and everything under it
+@item @file{.git/}, and everything under it
+@item @file{.gitignore}
+@item @file{.gitmodules}
+@item @file{.gitattributes}
+@item @file{.cvsignore}
+@item @file{.svn/}, and everything under it
+@item @file{.arch-ids/}, and everything under it
+@item @file{@{arch@}/}, and everything under it
+@item @file{=RELEASE-ID}
+@item @file{=meta-update}
+@item @file{=update}
+@item @file{.bzr}
+@item @file{.bzrignore}
+@item @file{.bzrtags}
+@item @file{.hg}
+@item @file{.hgignore}
+@item @file{.hgrags}
+@item @file{_darcs}
+@end itemize
+
+@opindex exclude-backups
+@item --exclude-backups
+Exclude backup and lock files. This option causes exclusion of files
+that match the following shell globbing patterns:
+
+@table @asis
+@item .#*
+@item *~
+@item #*#
+@end table
+
+@end table
+
+@findex exclude-caches
+When creating an archive, the @option{--exclude-caches} option family
+causes @command{tar} to exclude all directories that contain a @dfn{cache
+directory tag}. A cache directory tag is a short file with the
+well-known name @file{CACHEDIR.TAG} and having a standard header
+specified in @url{http://www.brynosaurus.com/cachedir/spec.html}.
+Various applications write cache directory tags into directories they
+use to hold regenerable, non-precious data, so that such data can be
+more easily excluded from backups.
+
+There are three @samp{exclude-caches} options, each providing a different
+exclusion semantics:
+
+@table @option
+@opindex exclude-caches
+@item --exclude-caches
+Do not archive the contents of the directory, but archive the
+directory itself and the @file{CACHEDIR.TAG} file.
+
+@opindex exclude-caches-under
+@item --exclude-caches-under
+Do not archive the contents of the directory, nor the
+@file{CACHEDIR.TAG} file, archive only the directory itself.
+
+@opindex exclude-caches-all
+@item --exclude-caches-all
+Omit directories containing @file{CACHEDIR.TAG} file entirely.
+@end table
+
+@findex exclude-tag
+Another option family, @option{--exclude-tag}, provides a generalization of
+this concept. It takes a single argument, a file name to look for.
+Any directory that contains this file will be excluded from the dump.
+Similarly to @samp{exclude-caches}, there are three options in this
+option family:
+
+@table @option
+@opindex exclude-tag
+@item --exclude-tag=@var{file}
+Do not dump the contents of the directory, but dump the
+directory itself and the @var{file}.
+
+@opindex exclude-tag-under
+@item --exclude-tag-under=@var{file}
+Do not dump the contents of the directory, nor the
+@var{file}, archive only the directory itself.
+
+@opindex exclude-tag-all
+@item --exclude-tag-all=@var{file}
+Omit directories containing @var{file} file entirely.
+@end table
+
+Multiple @option{--exclude-tag*} options can be given.
+
+For example, given this directory:
+
+@smallexample
+@group
+$ @kbd{find dir}
+dir
+dir/blues
+dir/jazz
+dir/folk
+dir/folk/tagfile
+dir/folk/sanjuan
+dir/folk/trote
+@end group
+@end smallexample
+
+The @option{--exclude-tag} will produce the following:
+
+@smallexample
+$ @kbd{tar -cf archive.tar --exclude-tag=tagfile -v dir}
+dir/
+dir/blues
+dir/jazz
+dir/folk/
+tar: dir/folk/: contains a cache directory tag tagfile;
+ contents not dumped
+dir/folk/tagfile
+@end smallexample
+
+Both the @file{dir/folk} directory and its tagfile are preserved in
+the archive, however the rest of files in this directory are not.
+
+Now, using the @option{--exclude-tag-under} option will exclude
+@file{tagfile} from the dump, while still preserving the directory
+itself, as shown in this example:
+
+@smallexample
+$ @kbd{tar -cf archive.tar --exclude-tag-under=tagfile -v dir}
+dir/
+dir/blues
+dir/jazz
+dir/folk/
+./tar: dir/folk/: contains a cache directory tag tagfile;
+ contents not dumped
+@end smallexample
+
+Finally, using @option{--exclude-tag-all} omits the @file{dir/folk}
+directory entirely:
+
+@smallexample
+$ @kbd{tar -cf archive.tar --exclude-tag-all=tagfile -v dir}
+dir/
+dir/blues
+dir/jazz
+./tar: dir/folk/: contains a cache directory tag tagfile;
+ directory not dumped
+@end smallexample
+
+@menu
+* problems with exclude::
+@end menu
+
+@node problems with exclude
+@unnumberedsubsec Problems with Using the @code{exclude} Options
+
+@xopindex{exclude, potential problems with}
+Some users find @samp{exclude} options confusing. Here are some common
+pitfalls:
+
+@itemize @bullet
+@item
+The main operating mode of @command{tar} does not act on a file name
+explicitly listed on the command line, if one of its file name
+components is excluded. In the example above, if
+you create an archive and exclude files that end with @samp{*.o}, but
+explicitly name the file @samp{dir.o/foo} after all the options have been
+listed, @samp{dir.o/foo} will be excluded from the archive.
+
+@item
+You can sometimes confuse the meanings of @option{--exclude} and
+@option{--exclude-from}. Be careful: use @option{--exclude} when files
+to be excluded are given as a pattern on the command line. Use
+@option{--exclude-from} to introduce the name of a file which contains
+a list of patterns, one per line; each of these patterns can exclude
+zero, one, or many files.
+
+@item
+When you use @option{--exclude=@var{pattern}}, be sure to quote the
+@var{pattern} parameter, so @GNUTAR{} sees wildcard characters
+like @samp{*}. If you do not do this, the shell might expand the
+@samp{*} itself using files at hand, so @command{tar} might receive a
+list of files instead of one pattern, or none at all, making the
+command somewhat illegal. This might not correspond to what you want.
+
+For example, write:
+
+@smallexample
+$ @kbd{tar -c -f @var{archive.tar} --exclude '*.o' @var{directory}}
+@end smallexample
+
+@noindent
+rather than:
+
+@smallexample
+# @emph{Wrong!}
+$ @kbd{tar -c -f @var{archive.tar} --exclude *.o @var{directory}}
+@end smallexample
+
+@item
+You must use use shell syntax, or globbing, rather than @code{regexp}
+syntax, when using exclude options in @command{tar}. If you try to use
+@code{regexp} syntax to describe files to be excluded, your command
+might fail.
+
+@item
+@FIXME{The change in semantics must have occurred before 1.11,
+so I doubt if it is worth mentioning at all. Anyway, should at
+least specify in which version the semantics changed.}
+In earlier versions of @command{tar}, what is now the
+@option{--exclude-from} option was called @option{--exclude} instead.
+Now, @option{--exclude} applies to patterns listed on the command
+line and @option{--exclude-from} applies to patterns listed in a
+file.
+
+@end itemize
+
+@node wildcards
+@section Wildcards Patterns and Matching
+
+@dfn{Globbing} is the operation by which @dfn{wildcard} characters,
+@samp{*} or @samp{?} for example, are replaced and expanded into all
+existing files matching the given pattern. @GNUTAR{} can use wildcard
+patterns for matching (or globbing) archive members when extracting
+from or listing an archive. Wildcard patterns are also used for
+verifying volume labels of @command{tar} archives. This section has the
+purpose of explaining wildcard syntax for @command{tar}.
+
+@FIXME{the next few paragraphs need work.}
+
+A @var{pattern} should be written according to shell syntax, using wildcard
+characters to effect globbing. Most characters in the pattern stand
+for themselves in the matched string, and case is significant: @samp{a}
+will match only @samp{a}, and not @samp{A}. The character @samp{?} in the
+pattern matches any single character in the matched string. The character
+@samp{*} in the pattern matches zero, one, or more single characters in
+the matched string. The character @samp{\} says to take the following
+character of the pattern @emph{literally}; it is useful when one needs to
+match the @samp{?}, @samp{*}, @samp{[} or @samp{\} characters, themselves.
+
+The character @samp{[}, up to the matching @samp{]}, introduces a character
+class. A @dfn{character class} is a list of acceptable characters
+for the next single character of the matched string. For example,
+@samp{[abcde]} would match any of the first five letters of the alphabet.
+Note that within a character class, all of the ``special characters''
+listed above other than @samp{\} lose their special meaning; for example,
+@samp{[-\\[*?]]} would match any of the characters, @samp{-}, @samp{\},
+@samp{[}, @samp{*}, @samp{?}, or @samp{]}. (Due to parsing constraints,
+the characters @samp{-} and @samp{]} must either come @emph{first} or
+@emph{last} in a character class.)
+
+@cindex Excluding characters from a character class
+@cindex Character class, excluding characters from
+If the first character of the class after the opening @samp{[}
+is @samp{!} or @samp{^}, then the meaning of the class is reversed.
+Rather than listing character to match, it lists those characters which
+are @emph{forbidden} as the next single character of the matched string.
+
+Other characters of the class stand for themselves. The special
+construction @samp{[@var{a}-@var{e}]}, using an hyphen between two
+letters, is meant to represent all characters between @var{a} and
+@var{e}, inclusive.
+
+@FIXME{need to add a sentence or so here to make this clear for those
+who don't have dan around.}
+
+Periods (@samp{.}) or forward slashes (@samp{/}) are not considered
+special for wildcard matches. However, if a pattern completely matches
+a directory prefix of a matched string, then it matches the full matched
+string: thus, excluding a directory also excludes all the files beneath it.
+
+@menu
+* controlling pattern-matching::
+@end menu
+
+@node controlling pattern-matching
+@unnumberedsubsec Controlling Pattern-Matching
+
+For the purposes of this section, we call @dfn{exclusion members} all
+member names obtained while processing @option{--exclude} and
+@option{--exclude-from} options, and @dfn{inclusion members} those
+member names that were given in the command line or read from the file
+specified with @option{--files-from} option.
+
+These two pairs of member lists are used in the following operations:
+@option{--diff}, @option{--extract}, @option{--list},
+@option{--update}.
+
+There are no inclusion members in create mode (@option{--create} and
+@option{--append}), since in this mode the names obtained from the
+command line refer to @emph{files}, not archive members.
+
+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
+treated as globbing patterns. For example:
+
+@smallexample
+@group
+$ @kbd{tar tf foo.tar}
+a.c
+b.c
+a.txt
+[remarks]
+# @i{Member names are used verbatim:}
+$ @kbd{tar -xf foo.tar -v '[remarks]'}
+[remarks]
+# @i{Exclude member names are globbed:}
+$ @kbd{tar -xf foo.tar -v --exclude '*.c'}
+a.txt
+[remarks]
+@end group
+@end smallexample
+
+This behavior can be altered by using the following options:
+
+@table @option
+@opindex wildcards
+@item --wildcards
+Treat all member names as wildcards.
+
+@opindex no-wildcards
+@item --no-wildcards
+Treat all member names as literal strings.
+@end table
+
+Thus, to extract files whose names end in @samp{.c}, you can use:
+
+@smallexample
+$ @kbd{tar -xf foo.tar -v --wildcards '*.c'}
+a.c
+b.c
+@end smallexample
+
+@noindent
+Notice quoting of the pattern to prevent the shell from interpreting
+it.
+
+The effect of @option{--wildcards} option is canceled by
+@option{--no-wildcards}. This can be used to pass part of
+the command line arguments verbatim and other part as globbing
+patterns. For example, the following invocation:
+
+@smallexample
+$ @kbd{tar -xf foo.tar --wildcards '*.txt' --no-wildcards '[remarks]'}
+@end smallexample
+
+@noindent
+instructs @command{tar} to extract from @file{foo.tar} all files whose
+names end in @samp{.txt} and the file named @file{[remarks]}.
+
+Normally, a pattern matches a name if an initial subsequence of the
+name's components matches the pattern, where @samp{*}, @samp{?}, and
+@samp{[...]} are the usual shell wildcards, @samp{\} escapes wildcards,
+and wildcards can match @samp{/}.
+
+Other than optionally stripping leading @samp{/} from names
+(@pxref{absolute}), patterns and names are used as-is. For
+example, trailing @samp{/} is not trimmed from a user-specified name
+before deciding whether to exclude it.
+
+However, this matching procedure can be altered by the options listed
+below. These options accumulate. For example:
+
+@smallexample
+--ignore-case --exclude='makefile' --no-ignore-case ---exclude='readme'
+@end smallexample
+
+@noindent
+ignores case when excluding @samp{makefile}, but not when excluding
+@samp{readme}.
+
+@table @option
+@anchor{anchored patterns}
+@opindex anchored
+@opindex no-anchored
+@item --anchored
+@itemx --no-anchored
+If anchored, a pattern must match an initial subsequence
+of the name's components. Otherwise, the pattern can match any
+subsequence. Default is @option{--no-anchored} for exclusion members
+and @option{--anchored} inclusion members.
+
+@anchor{case-insensitive matches}
+@opindex ignore-case
+@opindex no-ignore-case
+@item --ignore-case
+@itemx --no-ignore-case
+When ignoring case, upper-case patterns match lower-case names and vice versa.
+When not ignoring case (the default), matching is case-sensitive.
+
+@opindex wildcards-match-slash
+@opindex no-wildcards-match-slash
+@item --wildcards-match-slash
+@itemx --no-wildcards-match-slash
+When wildcards match slash (the default for exclusion members), a
+wildcard like @samp{*} in the pattern can match a @samp{/} in the
+name. Otherwise, @samp{/} is matched only by @samp{/}.
+
+@end table
+
+The @option{--recursion} and @option{--no-recursion} options
+(@pxref{recurse}) also affect how member patterns are interpreted. If
+recursion is in effect, a pattern matches a name if it matches any of
+the name's parent directories.
+
+The following table summarizes pattern-matching default values:
+
+@multitable @columnfractions .3 .7
+@headitem Members @tab Default settings
+@item Inclusion @tab @option{--no-wildcards --anchored --no-wildcards-match-slash}
+@item Exclusion @tab @option{--wildcards --no-anchored --wildcards-match-slash}
+@end multitable
+
+@node quoting styles
+@section Quoting Member Names
+
+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:
+
+@itemize @bullet
+@item Non-printable control characters:
+@anchor{escape sequences}
+@multitable @columnfractions 0.20 0.10 0.60
+@headitem Character @tab @acronym{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
+
+@item Space (@acronym{ASCII} 32)
+
+@item Single and double quotes (@samp{'} and @samp{"})
+
+@item Backslash (@samp{\})
+@end itemize
+
+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{\\}.
+
+@GNUTAR{} offers seven distinct quoting styles, which can be selected
+using @option{--quoting-style} option:
+
+@table @option
+@item --quoting-style=@var{style}
+@opindex quoting-style
+
+Sets quoting style. Valid values for @var{style} argument are:
+literal, shell, shell-always, c, escape, locale, clocale.
+@end table
+
+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
+@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
+
+Here is how usual @command{ls} command would have listed them, if they
+had existed in the current working directory:
+
+@smallexample
+@group
+$ @kbd{ls}
+a\ttab
+a\nnewline
+a\ space
+a"double"quote
+a'single'quote
+a\\backslash
+@end group
+@end smallexample
+
+Quoting styles:
+
+@table @samp
+@item literal
+No quoting, display each character as is:
+
+@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
+
+@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:
+
+@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
+
+@item shell-always
+Same as @samp{shell}, but the names are always enclosed in single
+quotes:
+
+@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{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
+
+@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.
+
+@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
+
+@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 as right
+quotation marks. Any occurrences of the right quotation mark in a
+name are escaped with @samp{\}, for example:
+
+For example:
+
+@smallexample
+@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
+
+@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:
+
+@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
+
+You can specify which characters should be quoted in addition to those
+implied by the current quoting style:
+
+@table @option
+@item --quote-chars=@var{string}
+Always quote characters from @var{string}, even if the selected
+quoting style would not quote them.
+@end table
+
+For example, using @samp{escape} quoting (compare with the usual
+escape listing above):
+
+@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
+
+To disable quoting of such additional characters, use the following
+option:
+
+@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
+
+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 a file to an archive, its file name is recorded in it,
+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.
+
+@GNUTAR{} provides several options for these needs.
+
+@table @option
+@opindex strip-components
+@item --strip-components=@var{number}
+Strip given @var{number} of leading components from file names before
+extraction.
+@end table
+
+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 -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 the @option{--verbose} (@option{-v}) option to the invocation
+above, 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
+For example:
+
+@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
+
+Notice that in both cases the file @file{stdlib.h} is 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 -x --strip=@var{n}}
+@end smallexample
+
+@noindent
+it is often advisable to run
+
+@smallexample
+$ @kbd{tar -t -v --show-transformed --strip=@var{n}}
+@end smallexample
+
+@noindent
+to make sure the command will produce the intended results.
+
+In case you need to apply more complex modifications to the file name,
+@GNUTAR{} provides a general-purpose transformation option:
+
+@table @option
+@opindex transform
+@opindex xform
+@item --transform=@var{expression}
+@itemx --xform=@var{expression}
+Modify file names using supplied @var{expression}.
+@end table
+
+@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}.
+
+Any delimiter can be used in lieu of @samp{/}, the only requirement being
+that it be used consistently throughout the expression. For example,
+the following two expressions are equivalent:
+
+@smallexample
+@group
+s/one/two/
+s,one,two,
+@end group
+@end smallexample
+
+Changing delimiters is often useful when the @var{regex} contains
+slashes. For example, it is more convenient to write @code{s,/,-,} than
+@code{s/\//-/}.
+
+As in @command{sed}, you can give several replace expressions,
+separated by a semicolon.
+
+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 @acronym{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 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
+
+In addition, several @dfn{transformation scope} flags are supported,
+that control to what files transformations apply. These are:
+
+@table @samp
+@item r
+Apply transformation to regular archive members.
+
+@item R
+Do not apply transformation to regular archive members.
+
+@item s
+Apply transformation to symbolic link targets.
+
+@item S
+Do not apply transformation to symbolic link targets.
+
+@item h
+Apply transformation to hard link targets.
+
+@item H
+Do not apply transformation to hard link targets.
+@end table
+
+Default is @samp{rsh}, which means to apply transformations to both archive
+members and targets of symbolic and hard links.
+
+Default scope flags can also be changed using @samp{flags=} statement
+in the transform expression. The flags set this way remain in force
+until next @samp{flags=} statement or end of expression, whichever
+occurs first. For example:
+
+@smallexample
+ --transform 'flags=S;s|^|/usr/local/|'
+@end smallexample
+
+Here are several examples of @option{--transform} usage:
+
+@enumerate
+@item Extract @file{usr/} hierarchy into @file{usr/local/}:
+
+@smallexample
+$ @kbd{tar --transform='s,usr/,usr/local/,' -x -f arch.tar}
+@end smallexample
+
+@item Strip two leading directory components (equivalent to
+@option{--strip-components=2}):
+
+@smallexample
+$ @kbd{tar --transform='s,/*[^/]*/[^/]*/,,' -x -f arch.tar}
+@end smallexample
+
+@item Convert each file name to lower case:
+
+@smallexample
+$ @kbd{tar --transform 's/.*/\L&/' -x -f arch.tar}
+@end smallexample
+
+@item Prepend @file{/prefix/} to each file name:
+
+@smallexample
+$ @kbd{tar --transform 's,^,/prefix/,' -x -f arch.tar}
+@end smallexample
+
+@item Archive the @file{/lib} directory, prepending @samp{/usr/local}
+to each archive member:
+
+@smallexample
+$ @kbd{tar --transform 's,^,/usr/local/,S' -c -f arch.tar /lib}
+@end smallexample
+@end enumerate
+
+Notice the use of flags in the last example. The @file{/lib}
+directory often contains many symbolic links to files within it.
+It may look, for example, like this:
+
+@smallexample
+$ @kbd{ls -l}
+drwxr-xr-x root/root 0 2008-07-08 16:20 /lib/
+-rwxr-xr-x root/root 1250840 2008-05-25 07:44 /lib/libc-2.3.2.so
+lrwxrwxrwx root/root 0 2008-06-24 17:12 /lib/libc.so.6 -> libc-2.3.2.so
+...
+@end smallexample
+
+Using the expression @samp{s,^,/usr/local/,} would mean adding
+@samp{/usr/local} to both regular archive members and to link
+targets. In this case, @file{/lib/libc.so.6} would become:
+
+@smallexample
+ /usr/local/lib/libc.so.6 -> /usr/local/libc-2.3.2.so
+@end smallexample
+
+This is definitely not desired. To avoid this, the @samp{S} flag
+is used, which excludes symbolic link targets from filename
+transformations. The result is:
+
+@smallexample
+$ @kbd{tar --transform 's,^,/usr/local/,S', -c -v -f arch.tar \
+ --show-transformed /lib}
+drwxr-xr-x root/root 0 2008-07-08 16:20 /usr/local/lib/
+-rwxr-xr-x root/root 1250840 2008-05-25 07:44 /usr/local/lib/libc-2.3.2.so
+lrwxrwxrwx root/root 0 2008-06-24 17:12 /usr/local/lib/libc.so.6 \
+ -> libc-2.3.2.so
+@end smallexample
+
+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/}:
+
+@smallexample
+$ @kbd{tar -cf arch.tar --transform='s,^usr/,var/,' /}
+@end smallexample
+
+To test @option{--transform} effect we suggest using
+@option{--show-transformed-names} option:
+
+@smallexample
+$ @kbd{tar -cf arch.tar --transform='s,^usr/,var/,' \
+ --verbose --show-transformed-names /}
+@end smallexample
+
+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.
+
+You can use as many @option{--transform} options in a single command
+line as you want. The specified expressions will then be applied in
+order of their appearance. For example, the following two invocations
+are equivalent:
+
+@smallexample
+$ @kbd{tar -cf arch.tar --transform='s,/usr/var,/var/' \
+ --transform='s,/usr/local,/usr/,'}
+$ @kbd{tar -cf arch.tar \
+ --transform='s,/usr/var,/var/;s,/usr/local,/usr/,'}
+@end smallexample
+
+@node after
+@section Operating Only on New Files
+
+@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.
+
+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.
+
+@cindex --after-date and --update compared
+@cindex --newer-mtime and --update compared
+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
+@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
+
+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.)
+
+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.
+
+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 -cf foo.tar --newer-mtime '2 days ago'}
+@end smallexample
+
+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
+@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
+
+@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 recurse
+@section Descending into Directories
+@cindex Avoiding recursion in directories
+@cindex Descending directories, avoiding
+@cindex Directories, avoiding recursion
+@cindex Recursion in directories, avoiding
+
+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.
+
+@opindex no-recursion
+@cindex @command{find}, using with @command{tar}
+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} (@pxref{Top,, find, find, GNU Find Manual})
+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}.
+
+@table @option
+@item --no-recursion
+Prevents @command{tar} from recursively descending directories.
+
+@opindex recursion
+@item --recursion
+Requires @command{tar} to recursively descend directories.
+This is the default.
+@end table
+
+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}.
+
+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
+
+@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
+
+@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{red}.
+
+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
+--directory=/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
+
+The interpretation of options in file lists is disabled by
+@option{--verbatim-files-from} and @option{--null} options.
+
+@node absolute
+@subsection Absolute File Names
+@cindex absolute file names
+@cindex file names, absolute
+
+By default, @GNUTAR{} drops a leading @samp{/} on
+input or output, and complains about file names containing a @file{..}
+component. There is an option that turns off this behavior:
+
+@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
+
+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.}.
+
+Symbolic links containing @file{..} or leading @samp{/} can also cause
+problems when extracting, so @command{tar} normally extracts them last;
+it may create empty files as placeholders during extraction.
+
+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.}
+
+@table @option
+@item --absolute-names
+Preserves full file names (including superior directory names) when
+archiving and extracting files.
+
+@end table
+
+@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{tar -c -f archive.tar -C / home}
+@end smallexample
+
+@xref{Integrity}, for some of the security-related implications
+of using this option.
+
+@include parse-datetime.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 file names 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 @acronym{ID} is limited to 2097151 (7777777
+octal)
+@item V7 archives do not contain symbolic ownership information (user
+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 file names 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 file name can be split at a 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 accommodate
+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 file name 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 File 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
+* Compression:: Using Less Space through Compression
+* Attributes:: Handling File Attributes
+* Portability:: Making @command{tar} Archives More Portable
+* cpio:: Comparison of @command{tar} and @command{cpio}
+@end menu
+
+@node Compression
+@section Using Less Space through Compression
+
+@menu
+* gzip:: Creating and Reading Compressed Archives
+* sparse:: Archiving Sparse Files
+@end menu
+
+@node gzip
+@subsection Creating and Reading Compressed Archives
+@cindex Compressed archives
+@cindex Storing archives in compressed format
+
+@cindex gzip
+@cindex bzip2
+@cindex lzip
+@cindex lzma
+@cindex lzop
+@cindex compress
+@GNUTAR{} is able to create and read compressed archives. It supports
+a wide variety of compression programs, namely: @command{gzip},
+@command{bzip2}, @command{lzip}, @command{lzma}, @command{lzop},
+@command{xz} and traditional @command{compress}. The latter is
+supported mostly for backward compatibility, and we recommend
+against using it, because it is by far less effective than the other
+compression programs@footnote{It also had patent problems in the past.}.
+
+Creating a compressed archive is simple: you just specify a
+@dfn{compression option} along with the usual archive creation
+commands. The compression option is @option{-z} (@option{--gzip}) to
+create a @command{gzip} compressed archive, @option{-j}
+(@option{--bzip2}) to create a @command{bzip2} compressed archive,
+@option{--lzip} to create an @asis{lzip} compressed archive,
+@option{-J} (@option{--xz}) to create an @asis{XZ} archive,
+@option{--lzma} to create an @asis{LZMA} compressed
+archive, @option{--lzop} to create an @asis{LSOP} archive, and
+@option{-Z} (@option{--compress}) to use @command{compress} program.
+For example:
+
+@smallexample
+$ @kbd{tar czf archive.tar.gz .}
+@end smallexample
+
+You can also let @GNUTAR{} select the compression program based on
+the suffix of the archive file name. This is done using
+@option{--auto-compress} (@option{-a}) command line option. For
+example, the following invocation will use @command{bzip2} for
+compression:
+
+@smallexample
+$ @kbd{tar caf archive.tar.bz2 .}
+@end smallexample
+
+@noindent
+whereas the following one will use @command{lzma}:
+
+@smallexample
+$ @kbd{tar caf archive.tar.lzma .}
+@end smallexample
+
+For a complete list of file name suffixes recognized by @GNUTAR{},
+see @ref{auto-compress}.
+
+Reading compressed archive is even simpler: you don't need to specify
+any additional options as @GNUTAR{} recognizes its format
+automatically. Thus, the following commands will list and extract the
+archive created in previous example:
+
+@smallexample
+# List the compressed archive
+$ @kbd{tar tf archive.tar.gz}
+# Extract the compressed archive
+$ @kbd{tar xf archive.tar.gz}
+@end smallexample
+
+The format recognition algorithm is based on @dfn{signatures}, a
+special byte sequences in the beginning of file, that are specific for
+certain compression formats. If this approach fails, @command{tar}
+falls back to using archive name suffix to determine its format
+(@pxref{auto-compress}, for a list of recognized suffixes).
+
+@anchor{alternative decompression programs}
+@cindex alternative decompression programs
+Some compression programs are able to handle different compression
+formats. @GNUTAR{} uses this, if the principal decompressor for the
+given format is not available. For example, if @command{compress} is
+not installed, @command{tar} will try to use @command{gzip}. As of
+version @value{VERSION} the following alternatives are
+tried@footnote{To verbosely trace the decompressor selection, use the
+@option{--warning=decompress-program} option
+(@pxref{warnings,decompress-program}).}:
+
+@multitable @columnfractions 0.3 0.3 0.3
+@headitem Format @tab Main decompressor @tab Alternatives
+@item compress @tab compress @tab gzip
+@item lzma @tab lzma @tab xz
+@item bzip2 @tab bzip2 @tab lbzip2
+@end multitable
+
+The only case when you have to specify a decompression option while
+reading the archive is when reading from a pipe or from a tape drive
+that does not support random access. However, in this case @GNUTAR{}
+will indicate which option you should use. For example:
+
+@smallexample
+$ @kbd{cat archive.tar.gz | tar tf -}
+tar: Archive is compressed. Use -z option
+tar: Error is not recoverable: exiting now
+@end smallexample
+
+If you see such diagnostics, just add the suggested option to the
+invocation of @GNUTAR{}:
+
+@smallexample
+$ @kbd{cat archive.tar.gz | tar tzf -}
+@end smallexample
+
+Notice also, that there are several restrictions on operations on
+compressed archives. First of all, compressed archives cannot be
+modified, i.e., you cannot update (@option{--update}, alias @option{-u})
+them or delete (@option{--delete}) members from them or
+add (@option{--append}, alias @option{-r}) members to them. Likewise, you
+cannot append another @command{tar} archive to a compressed archive using
+@option{--concatenate} (@option{-A}). Secondly, multi-volume
+archives cannot be compressed.
+
+The following options allow to select a particular compressor program:
+
+@table @option
+@opindex gzip
+@opindex ungzip
+@item -z
+@itemx --gzip
+@itemx --ungzip
+Filter the archive through @command{gzip}.
+
+@opindex xz
+@item -J
+@itemx --xz
+Filter the archive through @code{xz}.
+
+@item -j
+@itemx --bzip2
+Filter the archive through @code{bzip2}.
+
+@opindex lzip
+@item --lzip
+Filter the archive through @command{lzip}.
+
+@opindex lzma
+@item --lzma
+Filter the archive through @command{lzma}.
+
+@opindex lzop
+@item --lzop
+Filter the archive through @command{lzop}.
+
+@opindex compress
+@opindex uncompress
+@item -Z
+@itemx --compress
+@itemx --uncompress
+Filter the archive through @command{compress}.
+@end table
+
+When any of these options is given, @GNUTAR{} searches the compressor
+binary in the current path and invokes it. The name of the compressor
+program is specified at compilation time using a corresponding
+@option{--with-@var{compname}} option to @command{configure}, e.g.
+@option{--with-bzip2} to select a specific @command{bzip2} binary.
+@xref{lbzip2}, for a detailed discussion.
+
+The output produced by @command{tar --help} shows the actual
+compressor names along with each of these options.
+
+You can use any of these options on physical devices (tape drives,
+etc.)@: and remote files as well as on normal files; data to or from
+such devices or remote files is reblocked by another copy of the
+@command{tar} program to enforce the specified (or default) record
+size. The default compression parameters are used.
+You can override them by using the @option{-I} option (see
+below), e.g.:
+
+@smallexample
+$ @kbd{tar -cf archive.tar.gz -I 'gzip -9 -n' subdir}
+@end smallexample
+
+@noindent
+A more traditional way to do this is to use a pipe:
+
+@smallexample
+$ @kbd{tar cf - subdir | gzip -9 -n > archive.tar.gz}
+@end smallexample
+
+@cindex corrupted archives
+Compressed archives are easily corrupted, because compressed files
+have little redundancy. The adaptive nature of the
+compression scheme means that the compression tables are implicitly
+spread all over the archive. If you lose a few blocks, the dynamic
+construction of the compression tables becomes unsynchronized, and there
+is little chance that you could recover later in the archive.
+
+Other compression options provide better control over creating
+compressed archives. These are:
+
+@table @option
+@anchor{auto-compress}
+@opindex auto-compress
+@item --auto-compress
+@itemx -a
+Select a compression program to use by the archive file name
+suffix. The following suffixes are recognized:
+
+@multitable @columnfractions 0.3 0.6
+@headitem Suffix @tab Compression program
+@item @samp{.gz} @tab @command{gzip}
+@item @samp{.tgz} @tab @command{gzip}
+@item @samp{.taz} @tab @command{gzip}
+@item @samp{.Z} @tab @command{compress}
+@item @samp{.taZ} @tab @command{compress}
+@item @samp{.bz2} @tab @command{bzip2}
+@item @samp{.tz2} @tab @command{bzip2}
+@item @samp{.tbz2} @tab @command{bzip2}
+@item @samp{.tbz} @tab @command{bzip2}
+@item @samp{.lz} @tab @command{lzip}
+@item @samp{.lzma} @tab @command{lzma}
+@item @samp{.tlz} @tab @command{lzma}
+@item @samp{.lzo} @tab @command{lzop}
+@item @samp{.xz} @tab @command{xz}
+@end multitable
+
+@anchor{use-compress-program}
+@opindex use-compress-program
+@item --use-compress-program=@var{command}
+@itemx -I=@var{command}
+Use external compression program @var{command}. Use this option if you
+want to specify options for the compression program, or if you
+are not happy with the compression program associated with the suffix
+at compile time, or if you have a compression program that @GNUTAR{}
+does not support. The @var{command} argument is a valid command
+invocation, as you would type it at the command line prompt, with any
+additional options as needed. Enclose it in quotes if it contains
+white space (@pxref{external, Running External Commands}).
+
+The @var{command} should follow two conventions:
+
+First, when invoked without additional options, it should read data
+from standard input, compress it and output it on standard output.
+
+Secondly, if invoked with the additional @option{-d} option, it should
+do exactly the opposite, i.e., read the compressed data from the
+standard input and produce uncompressed data on the standard output.
+
+The latter requirement means that you must not use the @option{-d}
+option as a part of the @var{command} itself.
+@end table
+
+@cindex gpg, using with tar
+@cindex gnupg, using with tar
+@cindex Using encrypted archives
+The @option{--use-compress-program} option, in particular, lets you
+implement your own filters, not necessarily dealing with
+compression/decompression. 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, GNU Privacy Guard
+Manual}). The following script does that:
+
+@smallexample
+@group
+#! /bin/sh
+case $1 in
+-d) gpg --decrypt - | gzip -d -c;;
+'') gzip -c | gpg -s;;
+*) echo "Unknown option $1">&2; exit 1;;
+esac
+@end group
+@end smallexample
+
+Suppose you name it @file{gpgz} and save it somewhere in your
+@env{PATH}. Then the following command will create a compressed
+archive signed with your private key:
+
+@smallexample
+$ @kbd{tar -cf foo.tar.gpgz -Igpgz .}
+@end smallexample
+
+@noindent
+Likewise, the command below will list its contents:
+
+@smallexample
+$ @kbd{tar -tf foo.tar.gpgz -Igpgz .}
+@end smallexample
+
+@ignore
+The above is based on the following discussion:
+
+ I have one question, or maybe it's a suggestion if there isn't a way
+ to do it now. I would like to use @option{--gzip}, but I'd also like
+ the output to be fed through a program like @acronym{GNU}
+ @command{ecc} (actually, right now that's @samp{exactly} what I'd like
+ to use :-)), basically adding ECC protection on top of compression.
+ It seems as if this should be quite easy to do, but I can't work out
+ exactly how to go about it. Of course, I can pipe the standard output
+ of @command{tar} through @command{ecc}, but then I lose (though I
+ haven't started using it yet, I confess) the ability to have
+ @command{tar} use @command{rmt} for it's I/O (I think).
+
+ I think the most straightforward thing would be to let me specify a
+ general set of filters outboard of compression (preferably ordered,
+ so the order can be automatically reversed on input operations, and
+ with the options they require specifiable), but beggars shouldn't be
+ choosers and anything you decide on would be fine with me.
+
+ By the way, I like @command{ecc} but if (as the comments say) it can't
+ deal with loss of block sync, I'm tempted to throw some time at adding
+ that capability. Supposing I were to actually do such a thing and
+ get it (apparently) working, do you accept contributed changes to
+ utilities like that? (Leigh Clayton @file{loc@@soliton.com}, May 1995).
+
+ Isn't that exactly the role of the
+ @option{--use-compress-prog=@var{program}} option?
+ I never tried it myself, but I suspect you may want to write a
+ @var{prog} script or program able to filter stdin to stdout to
+ way you want. It should recognize the @option{-d} option, for when
+ extraction is needed rather than creation.
+
+ It has been reported that if one writes compressed data (through the
+ @option{--gzip} or @option{--compress} options) to a DLT and tries to use
+ the DLT compression mode, the data will actually get bigger and one will
+ end up with less space on the tape.
+@end ignore
+
+@menu
+* lbzip2:: Using lbzip2 with @GNUTAR{}.
+@end menu
+
+@node lbzip2
+@subsubsection Using lbzip2 with @GNUTAR{}.
+@cindex lbzip2
+@cindex Laszlo Ersek
+ @command{Lbzip2} is a multithreaded utility for handling
+@samp{bzip2} compression, written by Laszlo Ersek. It makes use of
+multiple processors to speed up its operation and in general works
+considerably faster than @command{bzip2}. For a detailed description
+of @command{lbzip2} see @uref{http://freshmeat.net/@/projects/@/lbzip2} and
+@uref{http://www.linuxinsight.com/@/lbzip2-parallel-bzip2-utility.html,
+lbzip2: parallel bzip2 utility}.
+
+ Recent versions of @command{lbzip2} are mostly command line compatible
+with @command{bzip2}, which makes it possible to automatically invoke
+it via the @option{--bzip2} @GNUTAR{} command line option. To do so,
+@GNUTAR{} must be configured with the @option{--with-bzip2} command
+line option, like this:
+
+@smallexample
+$ @kbd{./configure --with-bzip2=lbzip2 [@var{other-options}]}
+@end smallexample
+
+ Once configured and compiled this way, @command{tar --help} will show the
+following:
+
+@smallexample
+@group
+$ @kbd{tar --help | grep -- --bzip2}
+ -j, --bzip2 filter the archive through lbzip2
+@end group
+@end smallexample
+
+@noindent
+which means that running @command{tar --bzip2} will invoke @command{lbzip2}.
+
+@node sparse
+@subsection Archiving Sparse Files
+@cindex Sparse Files
+
+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 reads as all zeros. On many operating systems,
+actual disk storage is not allocated for holes, but they are counted
+in the length of the file. If you archive such a file, @command{tar}
+could create an archive longer than the original. To have @command{tar}
+attempt to recognize the holes in a file, use @option{--sparse}
+(@option{-S}). When you use this option, then, for any file using
+less disk space than would be expected from its length, @command{tar}
+searches the file for holes. It then records in the archive for the file where
+the holes (consecutive stretches of zeros) are, and only archives the
+``real contents'' of the file. On extraction (using @option{--sparse} is not
+needed on extraction) any such files have also holes created wherever the holes
+were found. Thus, if you use @option{--sparse}, @command{tar} archives won't
+take more space than the original.
+
+@GNUTAR{} uses two methods for detecting holes in sparse files. These
+methods are described later in this subsection.
+
+@table @option
+@opindex sparse
+@item -S
+@itemx --sparse
+This option instructs @command{tar} to test each file for sparseness
+before attempting to archive it. If the file is found to be sparse it
+is treated specially, thus allowing to decrease the amount of space
+used by its image in the archive.
+
+This option is meaningful only when creating or updating archives. It
+has no effect on extraction.
+@end table
+
+Consider using @option{--sparse} when performing file system backups,
+to avoid archiving the expanded forms of files stored sparsely in the
+system.
+
+Even if your system has no sparse files currently, some may be
+created in the future. If you use @option{--sparse} while making file
+system backups as a matter of course, you can be assured the archive
+will never take more space on the media than the files take on disk
+(otherwise, archiving a disk filled with sparse files might take
+hundreds of tapes). @xref{Incremental Dumps}.
+
+However, be aware that @option{--sparse} option may present a serious
+drawback. Namely, in order to determine the positions of holes in a file
+@command{tar} may have to read it before trying to archive it, so in total
+the file may be read @strong{twice}. This may happen when your OS or your FS
+does not support @dfn{SEEK_HOLE/SEEK_DATA} feature in @dfn{lseek} (See
+@option{--hole-detection}, below).
+
+@cindex sparse formats, defined
+When using @samp{POSIX} archive format, @GNUTAR{} is able to store
+sparse files using in three distinct ways, called @dfn{sparse
+formats}. A sparse format is identified by its @dfn{number},
+consisting, as usual of two decimal numbers, delimited by a dot. By
+default, format @samp{1.0} is used. If, for some reason, you wish to
+use an earlier format, you can select it using
+@option{--sparse-version} option.
+
+@table @option
+@opindex sparse-version
+@item --sparse-version=@var{version}
+Select the format to store sparse files in. Valid @var{version} values
+are: @samp{0.0}, @samp{0.1} and @samp{1.0}. @xref{Sparse Formats},
+for a detailed description of each format.
+@end table
+
+Using @option{--sparse-format} option implies @option{--sparse}.
+
+@table @option
+@opindex hole-detection
+@cindex hole detection
+@item --hole-detection=@var{method}
+Enforce concrete hole detection method. Before the real contents of sparse
+file are stored, @command{tar} needs to gather knowledge about file
+sparseness. This is because it needs to have the file's map of holes
+stored into tar header before it starts archiving the file contents.
+Currently, two methods of hole detection are implemented:
+
+@itemize @bullet
+@item @option{--hole-detection=seek}
+Seeking the file for data and holes. It uses enhancement of the @code{lseek}
+system call (@code{SEEK_HOLE} and @code{SEEK_DATA}) which is able to
+reuse file system knowledge about sparse file contents - so the
+detection is usually very fast. To use this feature, your file system
+and operating system must support it. At the time of this writing
+(2015) this feature, in spite of not being accepted by POSIX, is
+fairly widely supported by different operating systems.
+
+@item @option{--hole-detection=raw}
+Reading byte-by-byte the whole sparse file before the archiving. This
+method detects holes like consecutive stretches of zeroes. Comparing to
+the previous method, it is usually much slower, although more
+portable.
+@end itemize
+@end table
+
+When no @option{--hole-detection} option is given, @command{tar} uses
+the @samp{seek}, if supported by the operating system.
+
+Using @option{--hole-detection} option implies @option{--sparse}.
+
+@node Attributes
+@section Handling File Attributes
+@cindex attributes, files
+@cindex file attributes
+
+When @command{tar} reads files, it updates their access times. To
+avoid this, use the @option{--atime-preserve[=METHOD]} option, which can either
+reset the access time retroactively or avoid changing it in the first
+place.
+
+@table @option
+@opindex atime-preserve
+@item --atime-preserve
+@itemx --atime-preserve=replace
+@itemx --atime-preserve=system
+Preserve the access times of files that are read. This works only for
+files that you own, unless you have superuser privileges.
+
+@option{--atime-preserve=replace} works on most systems, but it also
+restores the data modification time and updates the status change
+time. Hence it doesn't interact with incremental dumps nicely
+(@pxref{Incremental Dumps}), and it can set access or data modification times
+incorrectly if other programs access the file while @command{tar} is
+running.
+
+@option{--atime-preserve=system} avoids changing the access time in
+the first place, if the operating system supports this.
+Unfortunately, this may or may not work on any given operating system
+or file system. If @command{tar} knows for sure it won't work, it
+complains right away.
+
+Currently @option{--atime-preserve} with no operand defaults to
+@option{--atime-preserve=replace}, but this is intended to change to
+@option{--atime-preserve=system} when the latter is better-supported.
+
+@opindex touch
+@item -m
+@itemx --touch
+Do not extract data modification time.
+
+When this option is used, @command{tar} leaves the data modification times
+of the files it extracts as the times when the files were extracted,
+instead of setting it to the times recorded in the archive.
+
+This option is meaningless with @option{--list} (@option{-t}).
+
+@opindex same-owner
+@item --same-owner
+Create extracted files with the same ownership they have in the
+archive.
+
+This is the default behavior for the superuser,
+so this option is meaningful only for non-root users, when @command{tar}
+is executed on those systems able to give files away. This is
+considered as a security flaw by many people, at least because it
+makes quite difficult to correctly account users for the disk space
+they occupy. Also, the @code{suid} or @code{sgid} attributes of
+files are easily and silently lost when files are given away.
+
+When writing an archive, @command{tar} writes the user @acronym{ID} and user name
+separately. If it can't find a user name (because the user @acronym{ID} is not
+in @file{/etc/passwd}), then it does not write one. When restoring,
+it tries to look the name (if one was written) up in
+@file{/etc/passwd}. If it fails, then it uses the user @acronym{ID} stored in
+the archive instead.
+
+@opindex no-same-owner
+@item --no-same-owner
+@itemx -o
+Do not attempt to restore ownership when extracting. This is the
+default behavior for ordinary users, so this option has an effect
+only for the superuser.
+
+@opindex numeric-owner
+@item --numeric-owner
+The @option{--numeric-owner} option allows (ANSI) archives to be written
+without user/group name information or such information to be ignored
+when extracting. It effectively disables the generation and/or use
+of user/group name information. This option forces extraction using
+the numeric ids from the archive, ignoring the names.
+
+This is useful in certain circumstances, when restoring a backup from
+an emergency floppy with different passwd/group files for example.
+It is otherwise impossible to extract files with the right ownerships
+if the password file in use during the extraction does not match the
+one belonging to the file system(s) being extracted. This occurs,
+for example, if you are restoring your files after a major crash and
+had booted from an emergency floppy with no password file or put your
+disk into another machine to do the restore.
+
+The numeric ids are @emph{always} saved into @command{tar} archives.
+The identifying names are added at create time when provided by the
+system, unless @option{--format=oldgnu} is used. Numeric ids could be
+used when moving archives between a collection of machines using
+a centralized management for attribution of numeric ids to users
+and groups. This is often made through using the NIS capabilities.
+
+When making a @command{tar} file for distribution to other sites, it
+is sometimes cleaner to use a single owner for all files in the
+distribution, and nicer to specify the write permission bits of the
+files as stored in the archive independently of their actual value on
+the file system. The way to prepare a clean distribution is usually
+to have some Makefile rule creating a directory, copying all needed
+files in that directory, then setting ownership and permissions as
+wanted (there are a lot of possible schemes), and only then making a
+@command{tar} archive out of this directory, before cleaning
+everything out. Of course, we could add a lot of options to
+@GNUTAR{} for fine tuning permissions and ownership.
+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.
+
+@xopindex{same-permissions, short description}
+@xopindex{preserve-permissions, short description}
+@item -p
+@itemx --same-permissions
+@itemx --preserve-permissions
+Extract all protection information.
+
+This option causes @command{tar} to set the modes (access permissions) of
+extracted files exactly as recorded in the archive. If this option
+is not used, the current @code{umask} setting limits the permissions
+on extracted files. This option is by default enabled when
+@command{tar} is executed by a superuser.
+
+
+This option is meaningless with @option{--list} (@option{-t}).
+@end table
+
+@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
+* hard links:: Hard 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 @acronym{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.
+When @option{--dereference} (@option{-h}) is used with
+@option{--create} (@option{-c}), @command{tar} archives the files
+symbolic links point to, instead of
+the links themselves.
+
+When creating portable archives, use @option{--dereference}
+(@option{-h}): some systems do not support
+symbolic links, and moreover, your distribution might be unusable if
+it contains unresolved symbolic links.
+
+When reading from an archive, the @option{--dereference} (@option{-h})
+option causes @command{tar} to follow an already-existing symbolic
+link when @command{tar} writes or reads a file named in the archive.
+Ordinarily, @command{tar} does not follow such a link, though it may
+remove the link before writing a new file. @xref{Dealing with Old
+Files}.
+
+The @option{--dereference} option is unsafe if an untrusted user can
+modify directories while @command{tar} is running. @xref{Security}.
+
+@node hard links
+@subsection Hard Links
+@cindex File names, using hard links
+@cindex hard links, dereferencing
+@cindex dereferencing hard links
+
+Normally, when @command{tar} archives a hard link, it writes a
+block to the archive naming the target of the link (a @samp{1} type
+block). In that way, the actual file contents is stored in file only
+once. For example, consider the following two files:
+
+@smallexample
+@group
+$ ls -l
+-rw-r--r-- 2 gray staff 4 2007-10-30 15:11 one
+-rw-r--r-- 2 gray staff 4 2007-10-30 15:11 jeden
+@end group
+@end smallexample
+
+Here, @file{jeden} is a link to @file{one}. When archiving this
+directory with a verbose level 2, you will get an output similar to
+the following:
+
+@smallexample
+$ tar cvvf ../archive.tar .
+drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./
+-rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden
+hrw-r--r-- gray/staff 0 2007-10-30 15:11 ./one link to ./jeden
+@end smallexample
+
+The last line shows that, instead of storing two copies of the file,
+@command{tar} stored it only once, under the name @file{jeden}, and
+stored file @file{one} as a hard link to this file.
+
+It may be important to know that all hard links to the given file are
+stored in the archive. For example, this may be necessary for exact
+reproduction of the file system. The following option does that:
+
+@table @option
+@xopindex{check-links, described}
+@item --check-links
+@itemx -l
+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, print
+a warning message.
+@end table
+
+For example, trying to archive only file @file{jeden} with this option
+produces the following diagnostics:
+
+@smallexample
+$ tar -c -f ../archive.tar -l jeden
+tar: Missing links to 'jeden'.
+@end smallexample
+
+Although creating special records for hard links helps keep a faithful
+record of the file system contents and makes archives more compact, it
+may present some difficulties when extracting individual members from
+the archive. For example, trying to extract file @file{one} from the
+archive created in previous examples produces, in the absence of file
+@file{jeden}:
+
+@smallexample
+$ tar xf archive.tar ./one
+tar: ./one: Cannot hard link to './jeden': No such file or directory
+tar: Error exit delayed from previous errors
+@end smallexample
+
+The reason for this behavior is that @command{tar} cannot seek back in
+the archive to the previous member (in this case, @file{one}), to
+extract it@footnote{There are plans to fix this in future releases.}.
+If you wish to avoid such problems at the cost of a bigger archive,
+use the following option:
+
+@table @option
+@xopindex{hard-dereference, described}
+@item --hard-dereference
+Dereference hard links and store the files they refer to.
+@end table
+
+For example, trying this option on our two sample files, we get two
+copies in the archive, each of which can then be extracted
+independently of the other:
+
+@smallexample
+@group
+$ tar -c -vv -f ../archive.tar --hard-dereference .
+drwxr-xr-x gray/staff 0 2007-10-30 15:13 ./
+-rw-r--r-- gray/staff 4 2007-10-30 15:11 ./jeden
+-rw-r--r-- gray/staff 4 2007-10-30 15:11 ./one
+@end group
+@end smallexample
+
+@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 @option{--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. Notice,
+however, that @samp{ustar} format is a better alternative, as it is
+free from many of @samp{v7}'s drawbacks.
+
+@node ustar
+@subsection Ustar Archive Format
+
+@cindex ustar archive format
+The archive format defined by the @acronym{POSIX}.1-1988 specification is
+called @code{ustar}. Although it is more flexible than the V7 format, it
+still has many restrictions (@pxref{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 an archive in @code{ustar} format, use the @option{--format=ustar}
+option in conjunction with @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 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 file name.
+@item %f @tab The name of the file with the directory information
+stripped, equivalent to the result of the @command{basename} utility
+on the translated file name.
+@item %p @tab The process @acronym{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 exthdr.mtime=@var{value}
+
+This keyword defines the value of the @samp{mtime} field that
+is written into the ustar header blocks for the extended headers.
+By default, the @samp{mtime} field is set to the modification time
+of the archive member described by that extended header (or to the
+value of the @option{--mtime} option, if supplied).
+
+@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 @acronym{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 globexthdr.mtime=@var{value}
+
+This keyword defines the value of the @samp{mtime} field that
+is written into the ustar header blocks for the global extended headers.
+By default, the @samp{mtime} field is set to the time when
+@command{tar} was invoked.
+
+@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
+
+In any of the forms described above, the @var{value} may be
+a string enclosed in curly braces. In that case, the string
+between the braces is understood either as a textual time
+representation, as described in @ref{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.
+
+For example, to set all modification times to the current date, you
+use the following option:
+
+@smallexample
+--pax-option='mtime:=@{now@}'
+@end smallexample
+
+Note quoting of the option's argument.
+
+@cindex archives, binary equivalent
+@cindex binary equivalent archives, creating
+As another example, here is the option that ensures that any two
+archives created using it, will be binary equivalent if they have the
+same contents:
+
+@smallexample
+--pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0
+@end smallexample
+
+@noindent
+If you extract files from such an archive and recreate the archive
+from them, you will also need to eliminate changes due to ctime, as
+shown in examples below:
+
+@smallexample
+--pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,ctime:=0
+@end smallexample
+
+@noindent
+or
+
+@smallexample
+--pax-option=exthdr.name=%d/PaxHeaders/%f,atime:=0,delete=ctime
+@end smallexample
+
+@node Checksumming
+@subsection Checksumming Problems
+
+SunOS and HP-UX @command{tar} fail to accept archives created using
+@GNUTAR{} and containing non-@acronym{ASCII} file names, that
+is, file names having characters with the eighth 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 accepts either of them.
+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{} computes checksums both ways, and accepts either of them
+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 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.
+
+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.
+
+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.
+
+@FIXME{Describe how @acronym{POSIX} archives are extracted by non
+POSIX-aware tars.}
+
+@node Other Tars
+@subsection How to Extract GNU-Specific Data Using Other @command{tar} Implementations
+
+In previous sections you became acquainted with various quirks
+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.
+
+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.
+
+@menu
+* Split Recovery:: Members Split Between Volumes
+* Sparse Recovery:: Sparse Members
+@end menu
+
+@node Split Recovery
+@subsubsection Extracting Members Split Between Volumes
+
+@cindex Multi-volume archives, extracting using non-GNU tars
+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.html, @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-3.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
+
+@cindex Multi-volume archives in PAX format, extracting using non-GNU tars
+You could use this approach for most (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 to 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 preceded 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 @acronym{ID} of the @command{tar} process that
+created the archive.
+@item %n @tab Ordinal number of this particular part.
+@end multitable
+
+For example, if the file @file{var/longfile} was split during archive
+creation between three volumes, and the creator @command{tar} process
+had process @acronym{ID} @samp{27962}, then the member names will be:
+
+@smallexample
+var/longfile
+var/GNUFileParts.27962/longfile.1
+var/GNUFileParts.27962/longfile.2
+@end smallexample
+
+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:
+
+@smallexample
+@group
+$ @kbd{cd var}
+$ @kbd{cat GNUFileParts.27962/longfile.1 \
+ GNUFileParts.27962/longfile.2 >> longfile}
+$ rm -f GNUFileParts.27962
+@end group
+@end smallexample
+
+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 look like this:
+
+@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
+
+@noindent
+You can safely ignore these warnings.
+
+If your @command{tar} implementation is not PAX-aware, you will get
+more warnings and more files generated on your disk, e.g.:
+
+@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
+
+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 Sparse Recovery
+@subsubsection Extracting Sparse Members
+
+@cindex sparse files, extracting with non-GNU tars
+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 blocks (or
+@dfn{holes}) back to their original locations, we call this process
+@dfn{expanding} a compressed sparse file.
+
+@pindex xsparse
+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.html, @GNUTAR{}
+home page}.
+
+@cindex sparse files v.1.0, extracting with non-GNU tars
+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 @acronym{ID}} of the @command{tar} process which created the
+archive (@pxref{PAX keywords}).}.
+
+To expand a version 1.0 file, run @command{xsparse} as follows:
+
+@smallexample
+$ @kbd{xsparse @file{cond-file}}
+@end smallexample
+
+@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
+
+In the unlikely case when this algorithm does not suit your needs,
+you can explicitly specify output file name as a second argument to
+the command:
+
+@smallexample
+$ @kbd{xsparse @file{cond-file} @file{out-file}}
+@end smallexample
+
+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:
+
+@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 actually expand the file, you would run:
+
+@smallexample
+$ @kbd{xsparse /home/gray/GNUSparseFile.6058/sparsefile}
+@end smallexample
+
+@noindent
+The program behaves the same way all UNIX utilities do: it will keep
+quiet unless it has something 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, use @option{-v} option:
+
+@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
+
+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
+
+@anchor{extracting sparse v.0.x}
+@cindex sparse files v.0.1, extracting with non-GNU tars
+@cindex sparse files v.0.0, extracting with non-GNU tars
+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, the 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 @ref{Sparse
+Formats}.) So, for these formats, 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 of your @command{tar} implementation for an
+option that prints @dfn{block numbers} along with the archive
+listing (analogous to @GNUTAR{}'s @option{-R} option). For example,
+@command{star} has @option{-block-number}.
+
+@item
+Obtain verbose listing using the @samp{block number} option, and
+find block numbers of the sparse member in question and the member
+immediately following it. For example, running @command{star} on our
+archive we obtain:
+
+@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
+
+@noindent
+(as usual, ignore the warnings about unknown keywords.)
+
+@item
+Let @var{size} be the size of the sparse member, @var{Bs} be its block number
+and @var{Bn} be the block number of the next member.
+Compute:
+
+@smallexample
+@var{N} = @var{Bs} - @var{Bn} - @var{size}/512 - 2
+@end smallexample
+
+@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}.
+
+@item
+Use @command{dd} to extract the headers:
+
+@smallexample
+@kbd{dd if=@var{archive} of=@var{hname} bs=512 skip=@var{Bs} count=@var{N}}
+@end smallexample
+
+@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 our example, this command will be
+
+@smallexample
+$ @kbd{dd if=arc.tar of=xhdr bs=512 skip=56 count=7}
+@end smallexample
+@end enumerate
+
+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 cpio
+@section Comparison of @command{tar} and @command{cpio}
+@UNREVISED
+
+@FIXME{Reorganize the following material}
+
+The @command{cpio} archive formats, like @command{tar}, do have maximum
+file name lengths. The binary and old @acronym{ASCII} formats have a maximum file
+length of 256, and the new @acronym{ASCII} and @acronym{CRC ASCII} formats have a max
+file length of 1024. @acronym{GNU} @command{cpio} can read and write archives
+with arbitrary file name lengths, but other @command{cpio} implementations
+may crash unexplainedly trying to read them.
+
+@command{tar} handles symbolic links in the form in which it comes in @acronym{BSD};
+@command{cpio} doesn't handle symbolic links in the form in which it comes
+in System V prior to SVR4, and some vendors may have added symlinks
+to their system without enhancing @command{cpio} to know about them.
+Others may have enhanced it in a way other than the way I did it
+at Sun, and which was adopted by AT&T (and which is, I think, also
+present in the @command{cpio} that Berkeley picked up from AT&T and put
+into a later @acronym{BSD} release---I think I gave them my changes).
+
+(SVR4 does some funny stuff with @command{tar}; basically, its @command{cpio}
+can handle @command{tar} format input, and write it on output, and it
+probably handles symbolic links. They may not have bothered doing
+anything to enhance @command{tar} as a result.)
+
+@command{cpio} handles special files; traditional @command{tar} doesn't.
+
+@command{tar} comes with V7, System III, System V, and @acronym{BSD} source;
+@command{cpio} comes only with System III, System V, and later @acronym{BSD}
+(4.3-tahoe and later).
+
+@command{tar}'s way of handling multiple hard links to a file can handle
+file systems that support 32-bit i-numbers (e.g., the @acronym{BSD} file system);
+@command{cpio}s way requires you to play some games (in its ``binary''
+format, i-numbers are only 16 bits, and in its ``portable @acronym{ASCII}'' format,
+they're 18 bits---it would have to play games with the "file system @acronym{ID}"
+field of the header to make sure that the file system @acronym{ID}/i-number pairs
+of different files were always different), and I don't know which
+@command{cpio}s, if any, play those games. Those that don't might get
+confused and think two files are the same file when they're not, and
+make hard links between them.
+
+@command{tar}s way of handling multiple hard links to a file places only
+one copy of the link on the tape, but the name attached to that copy
+is the @emph{only} one you can use to retrieve the file; @command{cpio}s
+way puts one copy for every link, but you can retrieve it using any
+of the names.
+
+@quotation
+What type of check sum (if any) is used, and how is this calculated.
+@end quotation
+
+See the attached manual pages for @command{tar} and @command{cpio} format.
+@command{tar} uses a checksum which is the sum of all the bytes in the
+@command{tar} header for a file; @command{cpio} uses no checksum.
+
+@quotation
+If anyone knows why @command{cpio} was made when @command{tar} was present
+at the unix scene,
+@end quotation
+
+It wasn't. @command{cpio} first showed up in PWB/UNIX 1.0; no
+generally-available version of UNIX had @command{tar} at the time. I don't
+know whether any version that was generally available @emph{within AT&T}
+had @command{tar}, or, if so, whether the people within AT&T who did
+@command{cpio} knew about it.
+
+On restore, if there is a corruption on a tape @command{tar} will stop at
+that point, while @command{cpio} will skip over it and try to restore the
+rest of the files.
+
+The main difference is just in the command syntax and header format.
+
+@command{tar} is a little more tape-oriented in that everything is blocked
+to start on a record boundary.
+
+@quotation
+Is there any differences between the ability to recover crashed
+archives between the two of them. (Is there any chance of recovering
+crashed archives at all.)
+@end quotation
+
+Theoretically it should be easier under @command{tar} since the blocking
+lets you find a header with some variation of @samp{dd skip=@var{nn}}.
+However, modern @command{cpio}'s and variations have an option to just
+search for the next file header after an error with a reasonable chance
+of resyncing. However, lots of tape driver software won't allow you to
+continue past a media error which should be the only reason for getting
+out of sync unless a file changed sizes while you were writing the
+archive.
+
+@quotation
+If anyone knows why @command{cpio} was made when @command{tar} was present
+at the unix scene, please tell me about this too.
+@end quotation
+
+Probably because it is more media efficient (by not blocking everything
+and using only the space needed for the headers where @command{tar}
+always uses 512 bytes per file header) and it knows how to archive
+special files.
+
+You might want to look at the freely available alternatives. The
+major ones are @command{afio}, @GNUTAR{}, and
+@command{pax}, each of which have their own extensions with some
+backwards compatibility.
+
+Sparse files were @command{tar}red as sparse files (which you can
+easily test, because the resulting archive gets smaller, and
+@acronym{GNU} @command{cpio} can no longer read it).
+
+@node Media
+@chapter Tapes and Other Archive Media
+@UNREVISED
+
+A few special cases about tape handling warrant more detailed
+description. These special cases are discussed below.
+
+Many complexities surround the use of @command{tar} on tape drives. Since
+the creation and manipulation of archives located on magnetic tape was
+the original purpose of @command{tar}, it contains many features making
+such manipulation easier.
+
+Archives are usually written on dismountable media---tape cartridges,
+mag tapes, or floppy disks.
+
+The amount of data a tape or disk holds depends not only on its size,
+but also on how it is formatted. A 2400 foot long reel of mag tape
+holds 40 megabytes of data when formatted at 1600 bits per inch. The
+physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
+
+Magnetic media are re-usable---once the archive on a tape is no longer
+needed, the archive can be erased and the tape or disk used over.
+Media quality does deteriorate with use, however. Most tapes or disks
+should be discarded when they begin to produce data errors. EXABYTE
+tape cartridges should be discarded when they generate an @dfn{error
+count} (number of non-usable bits) of more than 10k.
+
+Magnetic media are written and erased using magnetic fields, and
+should be protected from such fields to avoid damage to stored data.
+Sticking a floppy disk to a filing cabinet using a magnet is probably
+not a good idea.
+
+@menu
+* Device:: Device selection and switching
+* Remote Tape Server::
+* Common Problems and Solutions::
+* Blocking:: Blocking
+* Many:: Many archives on one tape
+* Using Multiple Tapes:: Using Multiple Tapes
+* label:: Including a Label in the Archive
+* verify::
+* Write Protection::
+@end menu
+
+@node Device
+@section Device Selection and Switching
+@UNREVISED
+
+@table @option
+@item -f [@var{hostname}:]@var{file}
+@itemx --file=[@var{hostname}:]@var{file}
+Use archive file or device @var{file} on @var{hostname}.
+@end table
+
+This option is used to specify the file name of the archive @command{tar}
+works on.
+
+If the file name is @samp{-}, @command{tar} reads the archive from standard
+input (when listing or extracting), or writes it to standard output
+(when creating). If the @samp{-} file name is given when updating an
+archive, @command{tar} will read the original archive from its standard
+input, and will write the entire new archive to its standard output.
+
+If the file name contains a @samp{:}, it is interpreted as
+@samp{hostname:file name}. If the @var{hostname} contains an @dfn{at}
+sign (@samp{@@}), it is treated as @samp{user@@hostname:file name}. In
+either case, @command{tar} will invoke the command @command{rsh} (or
+@command{remsh}) to start up an @command{/usr/libexec/rmt} on the remote
+machine. If you give an alternate login name, it will be given to the
+@command{rsh}.
+Naturally, the remote machine must have an executable
+@command{/usr/libexec/rmt}. This program is free software from the
+University of California, and a copy of the source code can be found
+with the sources for @command{tar}; it's compiled and installed by default.
+The exact path to this utility is determined when configuring the package.
+It is @file{@var{prefix}/libexec/rmt}, where @var{prefix} stands for
+your installation prefix. This location may also be overridden at
+runtime by using the @option{--rmt-command=@var{command}} option (@xref{Option Summary,
+---rmt-command}, for detailed description of this option. @xref{Remote
+Tape Server}, for the description of @command{rmt} command).
+
+If this option is not given, but the environment variable @env{TAPE}
+is set, its value is used; otherwise, old versions of @command{tar}
+used a default archive name (which was picked when @command{tar} was
+compiled). The default is normally set up to be the @dfn{first} tape
+drive or other transportable I/O medium on the system.
+
+Starting with version 1.11.5, @GNUTAR{} uses
+standard input and standard output as the default device, and I will
+not try anymore supporting automatic device detection at installation
+time. This was failing really in too many cases, it was hopeless.
+This is now completely left to the installer to override standard
+input and standard output for default device, if this seems
+preferable. Further, I think @emph{most} actual usages of
+@command{tar} are done with pipes or disks, not really tapes,
+cartridges or diskettes.
+
+Some users think that using standard input and output is running
+after trouble. This could lead to a nasty surprise on your screen if
+you forget to specify an output file name---especially if you are going
+through a network or terminal server capable of buffering large amounts
+of output. We had so many bug reports in that area of configuring
+default tapes automatically, and so many contradicting requests, that
+we finally consider the problem to be portably intractable. We could
+of course use something like @samp{/dev/tape} as a default, but this
+is @emph{also} running after various kind of trouble, going from hung
+processes to accidental destruction of real tapes. After having seen
+all this mess, using standard input and output as a default really
+sounds like the only clean choice left, and a very useful one too.
+
+@GNUTAR{} reads and writes archive in records, I
+suspect this is the main reason why block devices are preferred over
+character devices. Most probably, block devices are more efficient
+too. The installer could also check for @samp{DEFTAPE} in
+@file{<sys/mtio.h>}.
+
+@table @option
+@xopindex{force-local, short description}
+@item --force-local
+Archive file is local even if it contains a colon.
+
+@opindex rsh-command
+@item --rsh-command=@var{command}
+Use remote @var{command} instead of @command{rsh}. This option exists
+so that people who use something other than the standard @command{rsh}
+(e.g., a Kerberized @command{rsh}) can access a remote device.
+
+When this command is not used, the shell command found when
+the @command{tar} program was installed is used instead. This is
+the first found of @file{/usr/ucb/rsh}, @file{/usr/bin/remsh},
+@file{/usr/bin/rsh}, @file{/usr/bsd/rsh} or @file{/usr/bin/nsh}.
+The installer may have overridden this by defining the environment
+variable @env{RSH} @emph{at installation time}.
+
+@item -[0-7][lmh]
+Specify drive and density.
+
+@xopindex{multi-volume, short description}
+@item -M
+@itemx --multi-volume
+Create/list/extract multi-volume archive.
+
+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}.
+
+@xopindex{tape-length, short description}
+@item -L @var{num}
+@itemx --tape-length=@var{size}[@var{suf}]
+Change tape after writing @var{size} units of data. Unless @var{suf} is
+given, @var{size} is treated as kilobytes, i.e. @samp{@var{size} x
+1024} bytes. The following suffixes alter this behavior:
+
+@float Table, size-suffixes
+@caption{Size Suffixes}
+@multitable @columnfractions 0.2 0.3 0.3
+@headitem Suffix @tab Units @tab Byte Equivalent
+@item b @tab Blocks @tab @var{size} x 512
+@item B @tab Kilobytes @tab @var{size} x 1024
+@item c @tab Bytes @tab @var{size}
+@item G @tab Gigabytes @tab @var{size} x 1024^3
+@item K @tab Kilobytes @tab @var{size} x 1024
+@item k @tab Kilobytes @tab @var{size} x 1024
+@item M @tab Megabytes @tab @var{size} x 1024^2
+@item P @tab Petabytes @tab @var{size} x 1024^5
+@item T @tab Terabytes @tab @var{size} x 1024^4
+@item w @tab Words @tab @var{size} x 2
+@end multitable
+@end float
+
+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.
+
+@xopindex{info-script, short description}
+@xopindex{new-volume-script, short description}
+@item -F @var{command}
+@itemx --info-script=@var{command}
+@itemx --new-volume-script=@var{command}
+Execute @var{command} at end of each tape. This implies
+@option{--multi-volume} (@option{-M}). @xref{info-script}, for a detailed
+description of this option.
+@end table
+
+@node Remote Tape Server
+@section Remote Tape Server
+
+@cindex remote tape drive
+@pindex rmt
+In order to access the tape drive on a remote machine, @command{tar}
+uses the remote tape server written at the University of California at
+Berkeley. The remote tape server must be installed as
+@file{@var{prefix}/libexec/rmt} on any machine whose tape drive you
+want to use. @command{tar} calls @command{rmt} by running an
+@command{rsh} or @command{remsh} to the remote machine, optionally
+using a different login name if one is supplied.
+
+A copy of the source for the remote tape server is provided. Its
+source code can be freely distributed. It is compiled and
+installed by default.
+
+@cindex absolute file names
+Unless you use the @option{--absolute-names} (@option{-P}) option,
+@GNUTAR{} will not allow you to create an archive that contains
+absolute file names (a file name beginning with @samp{/}). If you try,
+@command{tar} will automatically remove the leading @samp{/} from the
+file names it stores in the archive. It will also type a warning
+message telling you what it is doing.
+
+When reading an archive that was created with a different
+@command{tar} program, @GNUTAR{} automatically
+extracts entries in the archive which have absolute file names as if
+the file names were not absolute. This is an important feature. A
+visitor here once gave a @command{tar} tape to an operator to restore;
+the operator used Sun @command{tar} instead of @GNUTAR{},
+and the result was that it replaced large portions of
+our @file{/bin} and friends with versions from the tape; needless to
+say, we were unhappy about having to recover the file system from
+backup tapes.
+
+For example, if the archive contained a file @file{/usr/bin/computoy},
+@GNUTAR{} would extract the file to @file{usr/bin/computoy},
+relative to the current directory. If you want to extract the files in
+an archive to the same absolute names that they had when the archive
+was created, you should do a @samp{cd /} before extracting the files
+from the archive, or you should either use the @option{--absolute-names}
+option, or use the command @samp{tar -C / @dots{}}.
+
+@cindex Ultrix 3.1 and write failure
+Some versions of Unix (Ultrix 3.1 is known to have this problem),
+can claim that a short write near the end of a tape succeeded,
+when it actually failed. This will result in the -M option not
+working correctly. The best workaround at the moment is to use a
+significantly larger blocking factor than the default 20.
+
+In order to update an archive, @command{tar} must be able to backspace the
+archive in order to reread or rewrite a record that was just read (or
+written). This is currently possible only on two kinds of files: normal
+disk files (or any other file that can be backspaced with @samp{lseek}),
+and industry-standard 9-track magnetic tape (or any other kind of tape
+that can be backspaced with the @code{MTIOCTOP} @code{ioctl}).
+
+This means that the @option{--append}, @option{--concatenate}, and
+@option{--delete} commands will not work on any other kind of file.
+Some media simply cannot be backspaced, which means these commands and
+options will never be able to work on them. These non-backspacing
+media include pipes and cartridge tape drives.
+
+Some other media can be backspaced, and @command{tar} will work on them
+once @command{tar} is modified to do so.
+
+Archives created with the @option{--multi-volume}, @option{--label}, and
+@option{--incremental} (@option{-G}) options may not be readable by other version
+of @command{tar}. In particular, restoring a file that was split over
+a volume boundary will require some careful work with @command{dd}, if
+it can be done at all. Other versions of @command{tar} may also create
+an empty file whose name is that of the volume header. Some versions
+of @command{tar} may create normal files instead of directories archived
+with the @option{--incremental} (@option{-G}) option.
+
+@node Common Problems and Solutions
+@section Some Common Problems and their Solutions
+
+@ifclear PUBLISH
+
+@format
+errors from system:
+permission denied
+no such file or directory
+not owner
+
+errors from @command{tar}:
+directory checksum error
+header format error
+
+errors from media/system:
+i/o error
+device busy
+@end format
+
+@end ifclear
+
+@node Blocking
+@section Blocking
+@cindex block
+@cindex record
+
+@dfn{Block} and @dfn{record} terminology is rather confused, and it
+is also confusing to the expert reader. On the other hand, readers
+who are new to the field have a fresh mind, and they may safely skip
+the next two paragraphs, as the remainder of this manual uses those
+two terms in a quite consistent way.
+
+John Gilmore, the writer of the public domain @command{tar} from which
+@GNUTAR{} was originally derived, wrote (June 1995):
+
+@quotation
+The nomenclature of tape drives comes from IBM, where I believe
+they were invented for the IBM 650 or so. On IBM mainframes, what
+is recorded on tape are tape blocks. The logical organization of
+data is into records. There are various ways of putting records into
+blocks, including @code{F} (fixed sized records), @code{V} (variable
+sized records), @code{FB} (fixed blocked: fixed size records, @var{n}
+to a block), @code{VB} (variable size records, @var{n} to a block),
+@code{VSB} (variable spanned blocked: variable sized records that can
+occupy more than one block), etc. The @code{JCL} @samp{DD RECFORM=}
+parameter specified this to the operating system.
+
+The Unix man page on @command{tar} was totally confused about this.
+When I wrote @code{PD TAR}, I used the historically correct terminology
+(@command{tar} writes data records, which are grouped into blocks).
+It appears that the bogus terminology made it into @acronym{POSIX} (no surprise
+here), and now Fran@,{c}ois has migrated that terminology back
+into the source code too.
+@end quotation
+
+The term @dfn{physical block} means the basic transfer chunk from or
+to a device, after which reading or writing may stop without anything
+being lost. In this manual, the term @dfn{block} usually refers to
+a disk physical block, @emph{assuming} that each disk block is 512
+bytes in length. It is true that some disk devices have different
+physical blocks, but @command{tar} ignore these differences in its own
+format, which is meant to be portable, so a @command{tar} block is always
+512 bytes in length, and @dfn{block} always mean a @command{tar} block.
+The term @dfn{logical block} often represents the basic chunk of
+allocation of many disk blocks as a single entity, which the operating
+system treats somewhat atomically; this concept is only barely used
+in @GNUTAR{}.
+
+The term @dfn{physical record} is another way to speak of a physical
+block, those two terms are somewhat interchangeable. In this manual,
+the term @dfn{record} usually refers to a tape physical block,
+@emph{assuming} that the @command{tar} archive is kept on magnetic tape.
+It is true that archives may be put on disk or used with pipes,
+but nevertheless, @command{tar} tries to read and write the archive one
+@dfn{record} at a time, whatever the medium in use. One record is made
+up of an integral number of blocks, and this operation of putting many
+disk blocks into a single tape block is called @dfn{reblocking}, or
+more simply, @dfn{blocking}. The term @dfn{logical record} refers to
+the logical organization of many characters into something meaningful
+to the application. The term @dfn{unit record} describes a small set
+of characters which are transmitted whole to or by the application,
+and often refers to a line of text. Those two last terms are unrelated
+to what we call a @dfn{record} in @GNUTAR{}.
+
+When writing to tapes, @command{tar} writes the contents of the archive
+in chunks known as @dfn{records}. To change the default blocking
+factor, use the @option{--blocking-factor=@var{512-size}} (@option{-b
+@var{512-size}}) option. Each record will then be composed of
+@var{512-size} blocks. (Each @command{tar} block is 512 bytes.
+@xref{Standard}.) Each file written to the archive uses at least one
+full record. As a result, using a larger record size can result in
+more wasted space for small files. On the other hand, a larger record
+size can often be read and written much more efficiently.
+
+Further complicating the problem is that some tape drives ignore the
+blocking entirely. For these, a larger record size can still improve
+performance (because the software layers above the tape drive still
+honor the blocking), but not as dramatically as on tape drives that
+honor blocking.
+
+When reading an archive, @command{tar} can usually figure out the
+record size on itself. When this is the case, and a non-standard
+record size was used when the archive was created, @command{tar} will
+print a message about a non-standard blocking factor, and then operate
+normally@footnote{If this message is not needed, you can turn it off
+using the @option{--warning=no-record-size} option.}. On some tape
+devices, however, @command{tar} cannot figure out the record size
+itself. On most of those, you can specify a blocking factor (with
+@option{--blocking-factor}) larger than the actual blocking factor,
+and then use the @option{--read-full-records} (@option{-B}) option.
+(If you specify a blocking factor with @option{--blocking-factor} and
+don't use the @option{--read-full-records} option, then @command{tar}
+will not attempt to figure out the recording size itself.) On some
+devices, you must always specify the record size exactly with
+@option{--blocking-factor} when reading, because @command{tar} cannot
+figure it out. In any case, use @option{--list} (@option{-t}) before
+doing any extractions to see whether @command{tar} is reading the archive
+correctly.
+
+@command{tar} blocks are all fixed size (512 bytes), and its scheme for
+putting them into records is to put a whole number of them (one or
+more) into each record. @command{tar} records are all the same size;
+at the end of the file there's a block containing all zeros, which
+is how you tell that the remainder of the last record(s) are garbage.
+
+In a standard @command{tar} file (no options), the block size is 512
+and the record size is 10240, for a blocking factor of 20. What the
+@option{--blocking-factor} option does is sets the blocking factor,
+changing the record size while leaving the block size at 512 bytes.
+20 was fine for ancient 800 or 1600 bpi reel-to-reel tape drives;
+most tape drives these days prefer much bigger records in order to
+stream and not waste tape. When writing tapes for myself, some tend
+to use a factor of the order of 2048, say, giving a record size of
+around one megabyte.
+
+If you use a blocking factor larger than 20, older @command{tar}
+programs might not be able to read the archive, so we recommend this
+as a limit to use in practice. @GNUTAR{}, however,
+will support arbitrarily large record sizes, limited only by the
+amount of virtual memory or the physical characteristics of the tape
+device.
+
+@menu
+* Format Variations:: Format Variations
+* Blocking Factor:: The Blocking Factor of an Archive
+@end menu
+
+@node Format Variations
+@subsection Format Variations
+@cindex Format Parameters
+@cindex Format Options
+@cindex Options, archive format specifying
+@cindex Options, format specifying
+@UNREVISED
+
+Format parameters specify how an archive is written on the archive
+media. The best choice of format parameters will vary depending on
+the type and number of files being archived, and on the media used to
+store the archive.
+
+To specify format parameters when accessing or creating an archive,
+you can use the options described in the following sections.
+If you do not specify any format parameters, @command{tar} uses
+default parameters. You cannot modify a compressed archive.
+If you create an archive with the @option{--blocking-factor} option
+specified (@pxref{Blocking Factor}), you must specify that
+blocking-factor when operating on the archive. @xref{Formats}, for other
+examples of format parameter considerations.
+
+@node Blocking Factor
+@subsection The Blocking Factor of an Archive
+@cindex Blocking Factor
+@cindex Record Size
+@cindex Number of blocks per record
+@cindex Number of bytes per record
+@cindex Bytes per record
+@cindex Blocks per record
+@UNREVISED
+
+@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 (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.
+The default blocking factor is typically 20 (i.e., 10240 bytes), but
+can be specified at installation. To find out the blocking factor of
+an existing archive, use @samp{tar --list --file=@var{archive-name}}.
+This may not work on some devices.
+
+Records are separated by gaps, which waste space on the archive media.
+If you are archiving on magnetic tape, using a larger blocking factor
+(and therefore larger records) provides faster throughput and allows you
+to fit more data on a tape (because there are fewer gaps). If you are
+archiving on cartridge, a very large blocking factor (say 126 or more)
+greatly increases performance. A smaller blocking factor, on the other
+hand, may be useful when archiving small files, to avoid archiving lots
+of nulls as @command{tar} fills out the archive to the end of the record.
+In general, the ideal record size depends on the size of the
+inter-record gaps on the tape you are using, and the average size of the
+files you are archiving. @xref{create}, for information on
+writing archives.
+
+@FIXME{Need example of using a cartridge with blocking factor=126 or more.}
+
+Archives with blocking factors larger than 20 cannot be read
+by very old versions of @command{tar}, or by some newer versions
+of @command{tar} running on old machines with small address spaces.
+With @GNUTAR{}, the blocking factor of an archive is limited
+only by the maximum record size of the device containing the archive,
+or by the amount of available virtual memory.
+
+Also, on some systems, not using adequate blocking factors, as sometimes
+imposed by the device drivers, may yield unexpected diagnostics. For
+example, this has been reported:
+
+@smallexample
+Cannot write to /dev/dlt: Invalid argument
+@end smallexample
+
+@noindent
+In such cases, it sometimes happen that the @command{tar} bundled by
+the system is aware of block size idiosyncrasies, while @GNUTAR{}
+requires an explicit specification for the block size,
+which it cannot guess. This yields some people to consider
+@GNUTAR{} is misbehaving, because by comparison,
+@cite{the bundle @command{tar} works OK}. Adding @w{@kbd{-b 256}},
+for example, might resolve the problem.
+
+If you use a non-default blocking factor when you create an archive, you
+must specify the same blocking factor when you modify that archive. Some
+archive devices will also require you to specify the blocking factor when
+reading that archive, however this is not typically the case. Usually, you
+can use @option{--list} (@option{-t}) without specifying a blocking factor---@command{tar}
+reports a non-default record size and then lists the archive members as
+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
+(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.
+
+@table @option
+@item --blocking-factor=@var{number}
+@itemx -b @var{number}
+Specifies the blocking factor of an archive. Can be used with any
+operation, but is usually not necessary with @option{--list} (@option{-t}).
+@end table
+
+Device blocking
+
+@table @option
+@item -b @var{blocks}
+@itemx --blocking-factor=@var{blocks}
+Set record size to @math{@var{blocks}*512} bytes.
+
+This option is used to specify a @dfn{blocking factor} for the archive.
+When reading or writing the archive, @command{tar}, will do reads and writes
+of the archive in records of @math{@var{block}*512} bytes. This is true
+even when the archive is compressed. Some devices requires that all
+write operations be a multiple of a certain size, and so, @command{tar}
+pads the archive out to the next record boundary.
+
+The default blocking factor is set when @command{tar} is compiled, and is
+typically 20. Blocking factors larger than 20 cannot be read by very
+old versions of @command{tar}, or by some newer versions of @command{tar}
+running on old machines with small address spaces.
+
+With a magnetic tape, larger records give faster throughput and fit
+more data on a tape (because there are fewer inter-record gaps).
+If the archive is in a disk file or a pipe, you may want to specify
+a smaller blocking factor, since a large one will result in a large
+number of null bytes at the end of the archive.
+
+When writing cartridge or other streaming tapes, a much larger
+blocking factor (say 126 or more) will greatly increase performance.
+However, you must specify the same blocking factor when reading or
+updating the archive.
+
+Apparently, Exabyte drives have a physical block size of 8K bytes.
+If we choose our blocksize as a multiple of 8k bytes, then the problem
+seems to disappear. Id est, we are using block size of 112 right
+now, and we haven't had the problem since we switched@dots{}
+
+With @GNUTAR{} the blocking factor is limited only
+by the maximum record size of the device containing the archive, or by
+the amount of available virtual memory.
+
+However, deblocking or reblocking is virtually avoided in a special
+case which often occurs in practice, but which requires all the
+following conditions to be simultaneously true:
+@itemize @bullet
+@item
+the archive is subject to a compression option,
+@item
+the archive is not handled through standard input or output, nor
+redirected nor piped,
+@item
+the archive is directly handled to a local disk, instead of any special
+device,
+@item
+@option{--blocking-factor} is not explicitly specified on the @command{tar}
+invocation.
+@end itemize
+
+If the output goes directly to a local disk, and not through
+stdout, then the last write is not extended to a full record size.
+Otherwise, reblocking occurs. Here are a few other remarks on this
+topic:
+
+@itemize @bullet
+
+@item
+@command{gzip} will complain about trailing garbage if asked to
+uncompress a compressed archive on tape, there is an option to turn
+the message off, but it breaks the regularity of simply having to use
+@samp{@var{prog} -d} for decompression. It would be nice if gzip was
+silently ignoring any number of trailing zeros. I'll ask Jean-loup
+Gailly, by sending a copy of this message to him.
+
+@item
+@command{compress} does not show this problem, but as Jean-loup pointed
+out to Michael, @samp{compress -d} silently adds garbage after
+the result of decompression, which tar ignores because it already
+recognized its end-of-file indicator. So this bug may be safely
+ignored.
+
+@item
+@samp{gzip -d -q} will be silent about the trailing zeros indeed,
+but will still return an exit status of 2 which tar reports in turn.
+@command{tar} might ignore the exit status returned, but I hate doing
+that, as it weakens the protection @command{tar} offers users against
+other possible problems at decompression time. If @command{gzip} was
+silently skipping trailing zeros @emph{and} also avoiding setting the
+exit status in this innocuous case, that would solve this situation.
+
+@item
+@command{tar} should become more solid at not stopping to read a pipe at
+the first null block encountered. This inelegantly breaks the pipe.
+@command{tar} should rather drain the pipe out before exiting itself.
+@end itemize
+
+@xopindex{ignore-zeros, short description}
+@item -i
+@itemx --ignore-zeros
+Ignore blocks of zeros in archive (means EOF).
+
+The @option{--ignore-zeros} (@option{-i}) option causes @command{tar} to ignore blocks
+of zeros in the archive. Normally a block of zeros indicates the
+end of the archive, but when reading a damaged archive, or one which
+was created by concatenating several archives together, this option
+allows @command{tar} to read the entire archive. This option is not on
+by default because many versions of @command{tar} write garbage after
+the zeroed blocks.
+
+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.
+
+@xopindex{read-full-records, short description}
+@item -B
+@itemx --read-full-records
+Reblock as we read (for reading 4.2@acronym{BSD} pipes).
+
+If @option{--read-full-records} is used, @command{tar}
+will not panic if an attempt to read a record from the archive does
+not return a full record. Instead, @command{tar} will keep reading
+until it has obtained a full
+record.
+
+This option is turned on by default when @command{tar} is reading
+an archive from standard input, or from a remote machine. This is
+because on @acronym{BSD} Unix systems, a read of a pipe will return however
+much happens to be in the pipe, even if it is less than @command{tar}
+requested. If this option was not used, @command{tar} would fail as
+soon as it read an incomplete record from the pipe.
+
+This option is also useful with the commands for updating an archive.
+
+@end table
+
+Tape blocking
+
+@FIXME{Appropriate options should be moved here from elsewhere.}
+
+@cindex blocking factor
+@cindex tape blocking
+
+When handling various tapes or cartridges, you have to take care of
+selecting a proper blocking, that is, the number of disk blocks you
+put together as a single tape block on the tape, without intervening
+tape gaps. A @dfn{tape gap} is a small landing area on the tape
+with no information on it, used for decelerating the tape to a
+full stop, and for later regaining the reading or writing speed.
+When the tape driver starts reading a record, the record has to
+be read whole without stopping, as a tape gap is needed to stop the
+tape motion without losing information.
+
+@cindex Exabyte blocking
+@cindex DAT blocking
+Using higher blocking (putting more disk blocks per tape block) will use
+the tape more efficiently as there will be less tape gaps. But reading
+such tapes may be more difficult for the system, as more memory will be
+required to receive at once the whole record. Further, if there is a
+reading error on a huge record, this is less likely that the system will
+succeed in recovering the information. So, blocking should not be too
+low, nor it should be too high. @command{tar} uses by default a blocking of
+20 for historical reasons, and it does not really matter when reading or
+writing to disk. Current tape technology would easily accommodate higher
+blockings. Sun recommends a blocking of 126 for Exabytes and 96 for DATs.
+We were told that for some DLT drives, the blocking should be a multiple
+of 4Kb, preferably 64Kb (@w{@kbd{-b 128}}) or 256 for decent performance.
+Other manufacturers may use different recommendations for the same tapes.
+This might also depends of the buffering techniques used inside modern
+tape controllers. Some imposes a minimum blocking, or a maximum blocking.
+Others request blocking to be some exponent of two.
+
+So, there is no fixed rule for blocking. But blocking at read time
+should ideally be the same as blocking used at write time. At one place
+I know, with a wide variety of equipment, they found it best to use a
+blocking of 32 to guarantee that their tapes are fully interchangeable.
+
+I was also told that, for recycled tapes, prior erasure (by the same
+drive unit that will be used to create the archives) sometimes lowers
+the error rates observed at rewriting time.
+
+I might also use @option{--number-blocks} instead of
+@option{--block-number}, so @option{--block} will then expand to
+@option{--blocking-factor} unambiguously.
+
+@node Many
+@section Many Archives on One Tape
+
+@FIXME{Appropriate options should be moved here from elsewhere.}
+
+@findex ntape @r{device}
+Most tape devices have two entries in the @file{/dev} directory, or
+entries that come in pairs, which differ only in the minor number for
+this device. Let's take for example @file{/dev/tape}, which often
+points to the only or usual tape device of a given system. There might
+be a corresponding @file{/dev/nrtape} or @file{/dev/ntape}. The simpler
+name is the @emph{rewinding} version of the device, while the name
+having @samp{nr} in it is the @emph{no rewinding} version of the same
+device.
+
+A rewinding tape device will bring back the tape to its beginning point
+automatically when this device is opened or closed. Since @command{tar}
+opens the archive file before using it and closes it afterwards, this
+means that a simple:
+
+@smallexample
+$ @kbd{tar cf /dev/tape @var{directory}}
+@end smallexample
+
+@noindent
+will reposition the tape to its beginning both prior and after saving
+@var{directory} contents to it, thus erasing prior tape contents and
+making it so that any subsequent write operation will destroy what has
+just been saved.
+
+@cindex tape positioning
+So, a rewinding device is normally meant to hold one and only one file.
+If you want to put more than one @command{tar} archive on a given tape, you
+will need to avoid using the rewinding version of the tape device. You
+will also have to pay special attention to tape positioning. Errors in
+positioning may overwrite the valuable data already on your tape. Many
+people, burnt by past experiences, will only use rewinding devices and
+limit themselves to one file per tape, precisely to avoid the risk of
+such errors. Be fully aware that writing at the wrong position on a
+tape loses all information past this point and most probably until the
+end of the tape, and this destroyed information @emph{cannot} be
+recovered.
+
+To save @var{directory-1} as a first archive at the beginning of a
+tape, and leave that tape ready for a second archive, you should use:
+
+@smallexample
+$ @kbd{mt -f /dev/nrtape rewind}
+$ @kbd{tar cf /dev/nrtape @var{directory-1}}
+@end smallexample
+
+@cindex tape marks
+@dfn{Tape marks} are special magnetic patterns written on the tape
+media, which are later recognizable by the reading hardware. These
+marks are used after each file, when there are many on a single tape.
+An empty file (that is to say, two tape marks in a row) signal the
+logical end of the tape, after which no file exist. Usually,
+non-rewinding tape device drivers will react to the close request issued
+by @command{tar} by first writing two tape marks after your archive, and by
+backspacing over one of these. So, if you remove the tape at that time
+from the tape drive, it is properly terminated. But if you write
+another file at the current position, the second tape mark will be
+erased by the new information, leaving only one tape mark between files.
+
+So, you may now save @var{directory-2} as a second archive after the
+first on the same tape by issuing the command:
+
+@smallexample
+$ @kbd{tar cf /dev/nrtape @var{directory-2}}
+@end smallexample
+
+@noindent
+and so on for all the archives you want to put on the same tape.
+
+Another usual case is that you do not write all the archives the same
+day, and you need to remove and store the tape between two archive
+sessions. In general, you must remember how many files are already
+saved on your tape. Suppose your tape already has 16 files on it, and
+that you are ready to write the 17th. You have to take care of skipping
+the first 16 tape marks before saving @var{directory-17}, say, by using
+these commands:
+
+@smallexample
+$ @kbd{mt -f /dev/nrtape rewind}
+$ @kbd{mt -f /dev/nrtape fsf 16}
+$ @kbd{tar cf /dev/nrtape @var{directory-17}}
+@end smallexample
+
+In all the previous examples, we put aside blocking considerations, but
+you should do the proper things for that as well. @xref{Blocking}.
+
+@menu
+* Tape Positioning:: Tape Positions and Tape Marks
+* mt:: The @command{mt} Utility
+@end menu
+
+@node Tape Positioning
+@subsection Tape Positions and Tape Marks
+@UNREVISED
+
+Just as archives can store more than one file from the file system,
+tapes can store more than one archive file. To keep track of where
+archive files (or any other type of file stored on tape) begin and
+end, tape archive devices write magnetic @dfn{tape marks} on the
+archive media. Tape drives write one tape mark between files,
+two at the end of all the file entries.
+
+If you think of data as a series of records "rrrr"'s, and tape marks as
+"*"'s, a tape might look like the following:
+
+@smallexample
+rrrr*rrrrrr*rrrrr*rr*rrrrr**-------------------------
+@end smallexample
+
+Tape devices read and write tapes using a read/write @dfn{tape
+head}---a physical part of the device which can only access one
+point on the tape at a time. When you use @command{tar} to read or
+write archive data from a tape device, the device will begin reading
+or writing from wherever on the tape the tape head happens to be,
+regardless of which archive or what part of the archive the tape
+head is on. Before writing an archive, you should make sure that no
+data on the tape will be overwritten (unless it is no longer needed).
+Before reading an archive, you should make sure the tape head is at
+the beginning of the archive you want to read. You can do it manually
+via @code{mt} utility (@pxref{mt}). The @code{restore} script does
+that automatically (@pxref{Scripted Restoration}).
+
+If you want to add new archive file entries to a tape, you should
+advance the tape to the end of the existing file entries, backspace
+over the last tape mark, and write the new archive file. If you were
+to add two archives to the example above, the tape might look like the
+following:
+
+@smallexample
+rrrr*rrrrrr*rrrrr*rr*rrrrr*rrr*rrrr**----------------
+@end smallexample
+
+@node mt
+@subsection The @command{mt} Utility
+@UNREVISED
+
+@FIXME{Is it true that this only works on non-block devices?
+should explain the difference, (fixed or variable).}
+@xref{Blocking Factor}.
+
+You can use the @command{mt} utility to advance or rewind a tape past a
+specified number of archive files on the tape. This will allow you
+to move to the beginning of an archive before extracting or reading
+it, or to the end of all the archives before writing a new one.
+@FIXME{Why isn't there an "advance 'til you find two tape marks
+together"?}
+
+The syntax of the @command{mt} command is:
+
+@smallexample
+@kbd{mt [-f @var{tapename}] @var{operation} [@var{number}]}
+@end smallexample
+
+where @var{tapename} is the name of the tape device, @var{number} is
+the number of times an operation is performed (with a default of one),
+and @var{operation} is one of the following:
+
+@FIXME{is there any use for record operations?}
+
+@table @option
+@item eof
+@itemx weof
+Writes @var{number} tape marks at the current position on the tape.
+
+@item fsf
+Moves tape position forward @var{number} files.
+
+@item bsf
+Moves tape position back @var{number} files.
+
+@item rewind
+Rewinds the tape. (Ignores @var{number}.)
+
+@item offline
+@itemx rewoff1
+Rewinds the tape and takes the tape device off-line. (Ignores @var{number}.)
+
+@item status
+Prints status information about the tape unit.
+
+@end table
+
+If you don't specify a @var{tapename}, @command{mt} uses the environment
+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
+failed.
+
+@node Using Multiple Tapes
+@section Using Multiple Tapes
+
+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} 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 archive, @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 until 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 file.
+
+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}[@var{suf}]
+@itemx -L @var{size}[@var{suf}]
+Set maximum length of a volume. The @var{suf}, if given, specifies
+units in which @var{size} is expressed, e.g. @samp{2M} mean 2
+megabytes (@pxref{size-suffixes}, for a list of allowed size
+suffixes). Without @var{suf}, units of 1024 bytes (kilobyte) are
+assumed.
+
+This option selects @option{--multi-volume} automatically. For example:
+
+@smallexample
+$ @kbd{tar --create --tape-length=41943040 --file=/dev/tape @var{files}}
+@end smallexample
+
+@noindent
+or, which is equivalent:
+
+@smallexample
+$ @kbd{tar --create --tape-length=4G --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.}:
+
+@smallexample
+Prepare volume #@var{n} for '@var{archive}' and hit return:
+@end smallexample
+
+@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:
+
+@table @kbd
+@item ?
+Request @command{tar} to explain possible responses.
+@item q
+Request @command{tar} to exit immediately.
+@item n @var{file-name}
+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}@footnote{@xref{--restrict}, for more information about
+this option.}.
+@item y
+Request @command{tar} to begin writing the next volume.
+@end table
+
+(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 non-existing 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, 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{command}
+@itemx --new-volume-script=@var{command}
+@itemx -F @var{command}
+Specify the command to invoke when switching volumes. The @var{command}
+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{command} can contain additional options, if such are needed.
+@xref{external, Running External Commands}, for a detailed discussion
+of the way @GNUTAR{} runs external commands. It inherits
+@command{tar}'s shell environment. Additional data is passed to it
+via the following environment variables:
+
+@table @env
+@vrindex TAR_VERSION, info script environment variable
+@item TAR_VERSION
+@GNUTAR{} version number.
+
+@vrindex TAR_ARCHIVE, info script environment variable
+@item TAR_ARCHIVE
+The name of the archive @command{tar} is processing.
+
+@vrindex TAR_BLOCKING_FACTOR, info script environment variable
+@item TAR_BLOCKING_FACTOR
+Current blocking factor (@pxref{Blocking}).
+
+@vrindex TAR_VOLUME, info script environment variable
+@item TAR_VOLUME
+Ordinal number of the volume @command{tar} is about to start.
+
+@vrindex TAR_SUBCOMMAND, info script environment variable
+@item TAR_SUBCOMMAND
+A 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
+@item TAR_FORMAT
+Format of the archive being processed. @xref{Formats}, for a complete
+list of archive format names.
+
+@vrindex TAR_FD, info script environment variable
+@item TAR_FD
+File descriptor which can be used to communicate the new volume
+name to @command{tar}.
+@end table
+
+These variables can be used in the @var{command} itself, provided that
+they are properly quoted to prevent them from being expanded by the
+shell that invokes @command{tar}.
+
+The volume script can instruct @command{tar} to use new archive name,
+by writing in to file descriptor @env{$TAR_FD} (see below for an example).
+
+If the info script fails, @command{tar} exits; otherwise, it begins
+writing the next volume.
+
+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
+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). 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 -cM -f /dev/tape0 -f /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 @env{$TAR_FD}. 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
+#! /bin/bash
+# For this script it's advisable to use a shell, such as Bash,
+# that supports a TAR_FD value greater than 9.
+
+echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
+
+name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
+case $TAR_SUBCOMMAND in
+-c) ;;
+-d|-x|-t) test -r $@{name:-$TAR_ARCHIVE@}-$TAR_VOLUME || exit 1
+ ;;
+*) exit 1
+esac
+
+echo $@{name:-$TAR_ARCHIVE@}-$TAR_VOLUME >&$TAR_FD
+@end group
+@end smallexample
+
+The same script can be used while listing, comparing or extracting
+from the created archive. For example:
+
+@smallexample
+@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
+
+@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
+volume, use @option{--list}, without @option{--multi-volume} specified.
+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 (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
+@samp{tar --extract --multi-volume}---@command{tar} will prompt for later
+volumes as it needs them. @xref{extracting archives}, for more
+information about extracting archives.
+
+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}} (@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.
+
+Notice that multi-volume support is a GNU extension and the archives
+created in this mode should be read only using @GNUTAR{}. If you
+absolutely have to process such archives using a third-party @command{tar}
+implementation, read @ref{Split Recovery}.
+
+@node Tape Files
+@subsection Tape Files
+@cindex labeling archives
+@opindex label
+@UNREVISED
+
+To give the archive a name which will be recorded in it, use the
+@option{--label=@var{volume-label}} (@option{-V @var{volume-label}})
+option. This will write a special block identifying
+@var{volume-label} as the name of the archive to the front of the
+archive which will be displayed when the archive is listed with
+@option{--list}. If you are creating a multi-volume archive with
+@option{--multi-volume} (@pxref{Using Multiple Tapes}), then the
+volume label will have @samp{Volume @var{nnn}} appended to the name
+you give, where @var{nnn} is the number of the volume of the archive.
+If you use the @option{--label=@var{volume-label}} option when
+reading an archive, it checks to make sure the label on the tape
+matches the one you gave. @xref{label}.
+
+When @command{tar} writes an archive to tape, it creates a single
+tape file. If multiple archives are written to the same tape, one
+after the other, they each get written as separate tape files. When
+extracting, it is necessary to position the tape at the right place
+before running @command{tar}. To do this, use the @command{mt} command.
+For more information on the @command{mt} command and on the organization
+of tapes into a sequence of tape files, see @ref{mt}.
+
+People seem to often do:
+
+@smallexample
+@kbd{--label="@var{some-prefix} `date +@var{some-format}`"}
+@end smallexample
+
+or such, for pushing a common date in all volumes or an archive set.
+
+@node Tarcat
+@subsection Concatenate Volumes into a Single Archive
+
+@pindex tarcat
+ Sometimes it is necessary to convert existing @GNUTAR{} multi-volume
+archive to a single @command{tar} archive. Simply concatenating all
+volumes into one will not work, since each volume carries an additional
+information at the beginning. @GNUTAR{} is shipped with the shell
+script @command{tarcat} designed for this purpose.
+
+ The script takes a list of files comprising a multi-volume archive
+and creates the resulting archive at the standard output. For example:
+
+@smallexample
+@kbd{tarcat vol.1 vol.2 vol.3 | tar tf -}
+@end smallexample
+
+ The script implements a simple heuristics to determine the format of
+the first volume file and to decide how to process the rest of the
+files. However, it makes no attempt to verify whether the files are
+given in order or even if they are valid @command{tar} archives.
+It uses @command{dd} and does not filter its standard error, so you
+will usually see lots of spurious messages.
+
+@FIXME{The script is not installed. Should we install it?}
+
+@node label
+@section Including a Label in the Archive
+@cindex Labeling an archive
+@cindex Labels on the archive media
+@cindex Labeling multi-volume archives
+
+@opindex label
+ To avoid problems caused by misplaced paper labels on the archive
+media, you can include a @dfn{label} entry --- an archive member which
+contains the name of the archive --- in the archive itself. Use the
+@option{--label=@var{archive-label}} (@option{-V @var{archive-label}})
+option@footnote{Until version 1.10, that option was called
+@option{--volume}, but is not available under that name anymore.} in
+conjunction with the @option{--create} operation to include a label
+entry in the archive as it is being created.
+
+@table @option
+@item --label=@var{archive-label}
+@itemx -V @var{archive-label}
+Includes an @dfn{archive-label} at the beginning of the archive when
+the archive is being created, when used in conjunction with the
+@option{--create} operation. Checks to make sure the archive label
+matches the one specified (when used in conjunction with any other
+operation).
+@end table
+
+ If you create an archive using both
+@option{--label=@var{archive-label}} (@option{-V @var{archive-label}})
+and @option{--multi-volume} (@option{-M}), each volume of the archive
+will have an archive label of the form @samp{@var{archive-label}
+Volume @var{n}}, where @var{n} is 1 for the first volume, 2 for the
+next, and so on. @xref{Using Multiple Tapes}, for information on
+creating multiple volume archives.
+
+@cindex Volume label, listing
+@cindex Listing volume label
+ The volume label will be displayed by @option{--list} along with
+the file contents. If verbose display is requested, it will also be
+explicitly marked as in the example below:
+
+@smallexample
+@group
+$ @kbd{tar --verbose --list --file=iamanarchive}
+V--------- 0/0 0 1992-03-07 12:01 iamalabel--Volume Header--
+-rw-r--r-- ringo/user 40 1990-05-21 13:30 iamafilename
+@end group
+@end smallexample
+
+@opindex test-label
+@anchor{--test-label option}
+ However, @option{--list} option will cause listing entire
+contents of the archive, which may be undesirable (for example, if the
+archive is stored on a tape). You can request checking only the volume
+label by specifying @option{--test-label} option. This option reads only the
+first block of an archive, so it can be used with slow storage
+devices. For example:
+
+@smallexample
+@group
+$ @kbd{tar --test-label --file=iamanarchive}
+iamalabel
+@end group
+@end smallexample
+
+ If @option{--test-label} is used with one or more command line
+arguments, @command{tar} compares the volume label with each
+argument. It exits with code 0 if a match is found, and with code 1
+otherwise@footnote{Note that @GNUTAR{} versions up to 1.23 indicated
+mismatch with an exit code 2 and printed a spurious diagnostics on
+stderr.}. No output is displayed, unless you also used the
+@option{--verbose} option. For example:
+
+@smallexample
+@group
+$ @kbd{tar --test-label --file=iamanarchive 'iamalabel'}
+@result{} 0
+$ @kbd{tar --test-label --file=iamanarchive 'alabel'}
+@result{} 1
+@end group
+@end smallexample
+
+ When used with the @option{--verbose} option, @command{tar}
+prints the actual volume label (if any), and a verbose diagnostics in
+case of a mismatch:
+
+@smallexample
+@group
+$ @kbd{tar --test-label --verbose --file=iamanarchive 'iamalabel'}
+iamalabel
+@result{} 0
+$ @kbd{tar --test-label --verbose --file=iamanarchive 'alabel'}
+iamalabel
+tar: Archive label mismatch
+@result{} 1
+@end group
+@end smallexample
+
+ If you request any operation, other than @option{--create}, along
+with using @option{--label} option, @command{tar} will first check if
+the archive label matches the one specified and will refuse to proceed
+if it does not. Use this as a safety precaution to avoid accidentally
+overwriting existing archives. For example, if you wish to add files
+to @file{archive}, presumably labeled with string @samp{My volume},
+you will get:
+
+@smallexample
+@group
+$ @kbd{tar -rf archive --label 'My volume' .}
+tar: Archive not labeled to match 'My volume'
+@end group
+@end smallexample
+
+@noindent
+in case its label does not match. This will work even if
+@file{archive} is not labeled at all.
+
+ Similarly, @command{tar} will refuse to list or extract the
+archive if its label doesn't match the @var{archive-label}
+specified. In those cases, @var{archive-label} argument is interpreted
+as a globbing-style pattern which must match the actual magnetic
+volume label. @xref{exclude}, for a precise description of how match
+is attempted@footnote{Previous versions of @command{tar} used full
+regular expression matching, or before that, only exact string
+matching, instead of wildcard matchers. We decided for the sake of
+simplicity to use a uniform matching device through
+@command{tar}.}. If the switch @option{--multi-volume} (@option{-M}) is being used,
+the volume label matcher will also suffix @var{archive-label} by
+@w{@samp{ Volume [1-9]*}} if the initial match fails, before giving
+up. Since the volume numbering is automatically added in labels at
+creation time, it sounded logical to equally help the user taking care
+of it when the archive is being read.
+
+ You can also use @option{--label} to get a common information on
+all tapes of a series. For having this information different in each
+series created through a single script used on a regular basis, just
+manage to get some date string as part of the label. For example:
+
+@smallexample
+@group
+$ @kbd{tar -cM -f /dev/tape -V "Daily backup for `date +%Y-%m-%d`"}
+$ @kbd{tar --create --file=/dev/tape --multi-volume \
+ --label="Daily backup for `date +%Y-%m-%d`"}
+@end group
+@end smallexample
+
+ Some more notes about volume labels:
+
+@itemize @bullet
+@item Each label has its own date and time, which corresponds
+to the time when @GNUTAR{} initially attempted to write it,
+often soon after the operator launches @command{tar} or types the
+carriage return telling that the next tape is ready.
+
+@item Comparing date labels to get an idea of tape throughput is
+unreliable. It gives correct results only if the delays for rewinding
+tapes and the operator switching them were negligible, which is
+usually not the case.
+@end itemize
+
+@node verify
+@section Verifying Data as It is Stored
+@cindex Verifying a write operation
+@cindex Double-checking a write operation
+
+@table @option
+@item -W
+@itemx --verify
+@opindex verify, short description
+Attempt to verify the archive after writing.
+@end table
+
+This option causes @command{tar} to verify the archive after writing it.
+Each volume is checked after it is written, and any discrepancies
+are recorded on the standard error output.
+
+Verification requires that the archive be on a back-space-able medium.
+This means pipes, some cartridge tape drives, and some other devices
+cannot be verified.
+
+You can insure the accuracy of an archive by comparing files in the
+system with archive members. @command{tar} can compare an archive to the
+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.
+
+@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
+specified, @command{tar} checks archive members against their counterparts
+in the file system, and reports discrepancies on the standard error.
+
+To verify an archive, you must be able to read it from before the end
+of the last written entry. This option is useful for detecting data
+errors on some tapes. Archives written to pipes, some cartridge tape
+drives, and some other devices cannot be verified.
+
+One can explicitly compare an already made archive with the file
+system by using the @option{--compare} (@option{--diff}, @option{-d})
+option, instead of using the more automatic @option{--verify} option.
+@xref{compare}.
+
+Note that these two options have a slightly different intent. The
+@option{--compare} option checks how identical are the logical contents of some
+archive with what is on your disks, while the @option{--verify} option is
+really for checking if the physical contents agree and if the recording
+media itself is of dependable quality. So, for the @option{--verify}
+operation, @command{tar} tries to defeat all in-memory cache pertaining to
+the archive, while it lets the speed optimization undisturbed for the
+@option{--compare} option. If you nevertheless use @option{--compare} for
+media verification, you may have to defeat the in-memory cache yourself,
+maybe by opening and reclosing the door latch of your recording unit,
+forcing some doubt in your operating system about the fact this is really
+the same volume as the one just written or read.
+
+The @option{--verify} option would not be necessary if drivers were indeed
+able to detect dependably all write failures. This sometimes require many
+magnetic heads, some able to read after the writes occurred. One would
+not say that drivers unable to detect all cases are necessarily flawed,
+as long as programming is concerned.
+
+The @option{--verify} (@option{-W}) option will not work in
+conjunction with the @option{--multi-volume} (@option{-M}) option or
+the @option{--append} (@option{-r}), @option{--update} (@option{-u})
+and @option{--delete} operations. @xref{Operations}, for more
+information on these operations.
+
+Also, since @command{tar} normally strips leading @samp{/} from file
+names (@pxref{absolute}), a command like @samp{tar --verify -cf
+/tmp/foo.tar /etc} will work as desired only if the working directory is
+@file{/}, as @command{tar} uses the archive's relative member names
+(e.g., @file{etc/motd}) when verifying the archive.
+
+@node Write Protection
+@section Write Protection
+
+Almost all tapes and diskettes, and in a few rare cases, even disks can
+be @dfn{write protected}, to protect data on them from being changed.
+Once an archive is written, you should write protect the media to prevent
+the archive from being accidentally overwritten or deleted. (This will
+protect the archive from being changed with a tape or floppy drive---it
+will not protect it from magnet fields or other physical hazards.)
+
+The write protection device itself is usually an integral part of the
+physical media, and can be a two position (write enabled/write
+disabled) switch, a notch which can be popped out or covered, a ring
+which can be removed from the center of a tape reel, or some other
+changeable feature.
+
+@node Reliability and security
+@chapter Reliability and Security
+
+The @command{tar} command reads and writes files as any other
+application does, and is subject to the usual caveats about
+reliability and security. This section contains some commonsense
+advice on the topic.
+
+@menu
+* Reliability::
+* Security::
+@end menu
+
+@node Reliability
+@section Reliability
+
+Ideally, when @command{tar} is creating an archive, it reads from a
+file system that is not being modified, and encounters no errors or
+inconsistencies while reading and writing. If this is the case, the
+archive should faithfully reflect what was read. Similarly, when
+extracting from an archive, ideally @command{tar} ideally encounters
+no errors and the extracted files faithfully reflect what was in the
+archive.
+
+However, when reading or writing real-world file systems, several
+things can go wrong; these include permissions problems, corruption of
+data, and race conditions.
+
+@menu
+* Permissions problems::
+* Data corruption and repair::
+* Race conditions::
+@end menu
+
+@node Permissions problems
+@subsection Permissions Problems
+
+If @command{tar} encounters errors while reading or writing files, it
+normally reports an error and exits with nonzero status. The work it
+does may therefore be incomplete. For example, when creating an
+archive, if @command{tar} cannot read a file then it cannot copy the
+file into the archive.
+
+@node Data corruption and repair
+@subsection Data Corruption and Repair
+
+If an archive becomes corrupted by an I/O error, this may corrupt the
+data in an extracted file. Worse, it may corrupt the file's metadata,
+which may cause later parts of the archive to become misinterpreted.
+An tar-format archive contains a checksum that most likely will detect
+errors in the metadata, but it will not detect errors in the data.
+
+If data corruption is a concern, you can compute and check your own
+checksums of an archive by using other programs, such as
+@command{cksum}.
+
+When attempting to recover from a read error or data corruption in an
+archive, you may need to skip past the questionable data and read the
+rest of the archive. This requires some expertise in the archive
+format and in other software tools.
+
+@node Race conditions
+@subsection Race conditions
+
+If some other process is modifying the file system while @command{tar}
+is reading or writing files, the result may well be inconsistent due
+to race conditions. For example, if another process creates some
+files in a directory while @command{tar} is creating an archive
+containing the directory's files, @command{tar} may see some of the
+files but not others, or it may see a file that is in the process of
+being created. The resulting archive may not be a snapshot of the
+file system at any point in time. If an application such as a
+database system depends on an accurate snapshot, restoring from the
+@command{tar} archive of a live file system may therefore break that
+consistency and may break the application. The simplest way to avoid
+the consistency issues is to avoid making other changes to the file
+system while tar is reading it or writing it.
+
+When creating an archive, several options are available to avoid race
+conditions. Some hosts have a way of snapshotting a file system, or
+of temporarily suspending all changes to a file system, by (say)
+suspending the only virtual machine that can modify a file system; if
+you use these facilities and have @command{tar -c} read from a
+snapshot when creating an archive, you can avoid inconsistency
+problems. More drastically, before starting @command{tar} you could
+suspend or shut down all processes other than @command{tar} that have
+access to the file system, or you could unmount the file system and
+then mount it read-only.
+
+When extracting from an archive, one approach to avoid race conditions
+is to create a directory that no other process can write to, and
+extract into that.
+
+@node Security
+@section Security
+
+In some cases @command{tar} may be used in an adversarial situation,
+where an untrusted user is attempting to gain information about or
+modify otherwise-inaccessible files. Dealing with untrusted data
+(that is, data generated by an untrusted user) typically requires
+extra care, because even the smallest mistake in the use of
+@command{tar} is more likely to be exploited by an adversary than by a
+race condition.
+
+@menu
+* Privacy::
+* Integrity::
+* Live untrusted data::
+* Security rules of thumb::
+@end menu
+
+@node Privacy
+@subsection Privacy
+
+Standard privacy concerns apply when using @command{tar}. For
+example, suppose you are archiving your home directory into a file
+@file{/archive/myhome.tar}. Any secret information in your home
+directory, such as your SSH secret keys, are copied faithfully into
+the archive. Therefore, if your home directory contains any file that
+should not be read by some other user, the archive itself should be
+not be readable by that user. And even if the archive's data are
+inaccessible to untrusted users, its metadata (such as size or
+last-modified date) may reveal some information about your home
+directory; if the metadata are intended to be private, the archive's
+parent directory should also be inaccessible to untrusted users.
+
+One precaution is to create @file{/archive} so that it is not
+accessible to any user, unless that user also has permission to access
+all the files in your home directory.
+
+Similarly, when extracting from an archive, take care that the
+permissions of the extracted files are not more generous than what you
+want. Even if the archive itself is readable only to you, files
+extracted from it have their own permissions that may differ.
+
+@node Integrity
+@subsection Integrity
+
+When creating archives, take care that they are not writable by a
+untrusted user; otherwise, that user could modify the archive, and
+when you later extract from the archive you will get incorrect data.
+
+When @command{tar} extracts from an archive, by default it writes into
+files relative to the working directory. If the archive was generated
+by an untrusted user, that user therefore can write into any file
+under the working directory. If the working directory contains a
+symbolic link to another directory, the untrusted user can also write
+into any file under the referenced directory. When extracting from an
+untrusted archive, it is therefore good practice to create an empty
+directory and run @command{tar} in that directory.
+
+When extracting from two or more untrusted archives, each one should
+be extracted independently, into different empty directories.
+Otherwise, the first archive could create a symbolic link into an area
+outside the working directory, and the second one could follow the
+link and overwrite data that is not under the working directory. For
+example, when restoring from a series of incremental dumps, the
+archives should have been created by a trusted process, as otherwise
+the incremental restores might alter data outside the working
+directory.
+
+If you use the @option{--absolute-names} (@option{-P}) option when
+extracting, @command{tar} respects any file names in the archive, even
+file names that begin with @file{/} or contain @file{..}. As this
+lets the archive overwrite any file in your system that you can write,
+the @option{--absolute-names} (@option{-P}) option should be used only
+for trusted archives.
+
+Conversely, with the @option{--keep-old-files} (@option{-k}) and
+@option{--skip-old-files} options, @command{tar} refuses to replace
+existing files when extracting. The difference between the two
+options is that the former treats existing files as errors whereas the
+latter just silently ignores them.
+
+Finally, with the @option{--no-overwrite-dir} option, @command{tar}
+refuses to replace the permissions or ownership of already-existing
+directories. These options may help when extracting from untrusted
+archives.
+
+@node Live untrusted data
+@subsection Dealing with Live Untrusted Data
+
+Extra care is required when creating from or extracting into a file
+system that is accessible to untrusted users. For example, superusers
+who invoke @command{tar} must be wary about its actions being hijacked
+by an adversary who is reading or writing the file system at the same
+time that @command{tar} is operating.
+
+When creating an archive from a live file system, @command{tar} is
+vulnerable to denial-of-service attacks. For example, an adversarial
+user could create the illusion of an indefinitely-deep directory
+hierarchy @file{d/e/f/g/...} by creating directories one step ahead of
+@command{tar}, or the illusion of an indefinitely-long file by
+creating a sparse file but arranging for blocks to be allocated just
+before @command{tar} reads them. There is no easy way for
+@command{tar} to distinguish these scenarios from legitimate uses, so
+you may need to monitor @command{tar}, just as you'd need to monitor
+any other system service, to detect such attacks.
+
+While a superuser is extracting from an archive into a live file
+system, an untrusted user might replace a directory with a symbolic
+link, in hopes that @command{tar} will follow the symbolic link and
+extract data into files that the untrusted user does not have access
+to. Even if the archive was generated by the superuser, it may
+contain a file such as @file{d/etc/passwd} that the untrusted user
+earlier created in order to break in; if the untrusted user replaces
+the directory @file{d/etc} with a symbolic link to @file{/etc} while
+@command{tar} is running, @command{tar} will overwrite
+@file{/etc/passwd}. This attack can be prevented by extracting into a
+directory that is inaccessible to untrusted users.
+
+Similar attacks via symbolic links are also possible when creating an
+archive, if the untrusted user can modify an ancestor of a top-level
+argument of @command{tar}. For example, an untrusted user that can
+modify @file{/home/eve} can hijack a running instance of @samp{tar -cf
+- /home/eve/Documents/yesterday} by replacing
+@file{/home/eve/Documents} with a symbolic link to some other
+location. Attacks like these can be prevented by making sure that
+untrusted users cannot modify any files that are top-level arguments
+to @command{tar}, or any ancestor directories of these files.
+
+@node Security rules of thumb
+@subsection Security Rules of Thumb
+
+This section briefly summarizes rules of thumb for avoiding security
+pitfalls.
+
+@itemize @bullet
+
+@item
+Protect archives at least as much as you protect any of the files
+being archived.
+
+@item
+Extract from an untrusted archive only into an otherwise-empty
+directory. This directory and its parent should be accessible only to
+trusted users. For example:
+
+@example
+@group
+$ @kbd{chmod go-rwx .}
+$ @kbd{mkdir -m go-rwx dir}
+$ @kbd{cd dir}
+$ @kbd{tar -xvf /archives/got-it-off-the-net.tar.gz}
+@end group
+@end example
+
+As a corollary, do not do an incremental restore from an untrusted archive.
+
+@item
+Do not let untrusted users access files extracted from untrusted
+archives without checking first for problems such as setuid programs.
+
+@item
+Do not let untrusted users modify directories that are ancestors of
+top-level arguments of @command{tar}. For example, while you are
+executing @samp{tar -cf /archive/u-home.tar /u/home}, do not let an
+untrusted user modify @file{/}, @file{/archive}, or @file{/u}.
+
+@item
+Pay attention to the diagnostics and exit status of @command{tar}.
+
+@item
+When archiving live file systems, monitor running instances of
+@command{tar} to detect denial-of-service attacks.
+
+@item
+Avoid unusual options such as @option{--absolute-names} (@option{-P}),
+@option{--dereference} (@option{-h}), @option{--overwrite},
+@option{--recursive-unlink}, and @option{--remove-files} unless you
+understand their security implications.
+
+@end itemize
+
+@node Changes
+@appendix Changes
+
+This appendix lists some important user-visible changes between
+version @GNUTAR{} @value{VERSION} and previous versions. An up-to-date
+version of this document is available at
+@uref{http://www.gnu.org/@/software/@/tar/manual/changes.html,the
+@GNUTAR{} documentation page}.
+
+@table @asis
+@item Use of globbing patterns when listing and extracting.
+
+Previous versions of GNU tar assumed shell-style globbing when
+extracting from or listing an archive. For example:
+
+@smallexample
+$ @kbd{tar xf foo.tar '*.c'}
+@end smallexample
+
+would extract all files whose names end in @samp{.c}. This behavior
+was not documented and was incompatible with traditional tar
+implementations. Therefore, starting from version 1.15.91, GNU tar
+no longer uses globbing by default. For example, the above invocation
+is now interpreted as a request to extract from the archive the file
+named @file{*.c}.
+
+To facilitate transition to the new behavior for those users who got
+used to the previous incorrect one, @command{tar} will print a warning
+if it finds out that a requested member was not found in the archive
+and its name looks like a globbing pattern. For example:
+
+@smallexample
+$ @kbd{tar xf foo.tar '*.c'}
+tar: Pattern matching characters used in file names. Please,
+tar: use --wildcards to enable pattern matching, or --no-wildcards to
+tar: suppress this warning.
+tar: *.c: Not found in archive
+tar: Error exit delayed from previous errors
+@end smallexample
+
+To treat member names as globbing patterns, use the @option{--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
+patterns by @GNUTAR{}.
+
+@item Use of short option @option{-o}.
+
+Earlier versions of @GNUTAR{} understood @option{-o} command line
+option as a synonym for @option{--old-archive}.
+
+@GNUTAR{} starting from version 1.13.90 understands this option as
+a synonym for @option{--no-same-owner}. This is compatible with
+UNIX98 @command{tar} implementations.
+
+However, to facilitate transition, @option{-o} option retains its
+old semantics when it is used with one of archive-creation commands.
+Users are encouraged to use @option{--format=oldgnu} instead.
+
+It is especially important, since versions of @acronym{GNU} Automake
+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.
+
+@xref{Options, tar-formats, Changing Automake's Behavior,
+automake, GNU Automake}, for a description on how to use various
+archive formats with @command{automake}.
+
+Future versions of @GNUTAR{} will understand @option{-o} only as a
+synonym for @option{--no-same-owner}.
+
+@item Use of short option @option{-l}
+
+Earlier versions of @GNUTAR{} understood @option{-l} option as a
+synonym for @option{--one-file-system}. Since such usage contradicted
+to UNIX98 specification and harmed compatibility with other
+implementations, it was declared deprecated in version 1.14. However,
+to facilitate transition to its new semantics, it was supported by
+versions 1.15 and 1.15.90. The present use of @option{-l} as a short
+variant of @option{--check-links} was introduced in version 1.15.91.
+
+@item Use of options @option{--portability} and @option{--old-archive}
+
+These options are deprecated. Please use @option{--format=v7} instead.
+
+@item Use of option @option{--posix}
+
+This option is deprecated. Please use @option{--format=posix} instead.
+@end table
+
+@node Configuring Help Summary
+@appendix Configuring Help Summary
+
+Running @kbd{tar --help} displays the short @command{tar} option
+summary (@pxref{help}). This summary is organized by @dfn{groups} of
+semantically close options. The options within each group are printed
+in the following order: a short option, eventually followed by a list
+of corresponding long option names, followed by a short description of
+the option. For example, here is an excerpt from the actual @kbd{tar
+--help} output:
+
+@verbatim
+ Main operation mode:
+
+ -A, --catenate, --concatenate append tar files to an archive
+ -c, --create create a new archive
+ -d, --diff, --compare find differences between archive and
+ file system
+ --delete delete from the archive
+@end verbatim
+
+@vrindex ARGP_HELP_FMT, environment variable
+The exact visual representation of the help output is configurable via
+@env{ARGP_HELP_FMT} environment variable. The value of this variable
+is a comma-separated list of @dfn{format variable} assignments. There
+are two kinds of format variables. An @dfn{offset variable} keeps the
+offset of some part of help output text from the leftmost column on
+the screen. A @dfn{boolean} variable is a flag that toggles some
+output feature on or off. Depending on the type of the corresponding
+variable, there are two kinds of assignments:
+
+@table @asis
+@item Offset assignment
+
+The assignment to an offset variable has the following syntax:
+
+@smallexample
+@var{variable}=@var{value}
+@end smallexample
+
+@noindent
+where @var{variable} is the variable name, and @var{value} is a
+numeric value to be assigned to the variable.
+
+@item Boolean assignment
+
+To assign @code{true} value to a variable, simply put this variable name. To
+assign @code{false} value, prefix the variable name with @samp{no-}. For
+example:
+
+@smallexample
+@group
+# Assign @code{true} value:
+dup-args
+# Assign @code{false} value:
+no-dup-args
+@end group
+@end smallexample
+@end table
+
+Following variables are declared:
+
+@deftypevr {Help Output} boolean dup-args
+If true, arguments for an option are shown with both short and long
+options, even when a given option has both forms, for example:
+
+@smallexample
+ -f ARCHIVE, --file=ARCHIVE use archive file or device ARCHIVE
+@end smallexample
+
+If false, then if an option has both short and long forms, the
+argument is only shown with the long one, for example:
+
+@smallexample
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+@end smallexample
+
+@noindent
+and a message indicating that the argument is applicable to both
+forms is printed below the options. This message can be disabled
+using @code{dup-args-note} (see below).
+
+The default is false.
+@end deftypevr
+
+@deftypevr {Help Output} boolean dup-args-note
+If this variable is true, which is the default, the following notice
+is displayed at the end of the help output:
+
+@quotation
+Mandatory or optional arguments to long options are also mandatory or
+optional for any corresponding short options.
+@end quotation
+
+Setting @code{no-dup-args-note} inhibits this message. Normally, only one of
+variables @code{dup-args} or @code{dup-args-note} should be set.
+@end deftypevr
+
+@deftypevr {Help Output} offset short-opt-col
+Column in which short options start. Default is 2.
+
+@smallexample
+@group
+$ @kbd{tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+$ @kbd{ARGP_HELP_FMT=short-opt-col=6 tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+@end group
+@end smallexample
+@end deftypevr
+
+@deftypevr {Help Output} offset long-opt-col
+Column in which long options start. Default is 6. For example:
+
+@smallexample
+@group
+$ @kbd{tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+$ @kbd{ARGP_HELP_FMT=long-opt-col=16 tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+@end group
+@end smallexample
+@end deftypevr
+
+@deftypevr {Help Output} offset doc-opt-col
+Column in which @dfn{doc options} start. A doc option isn't actually
+an option, but rather an arbitrary piece of documentation that is
+displayed in much the same manner as the options. For example, in
+the description of @option{--format} option:
+
+@smallexample
+@group
+ -H, --format=FORMAT create archive of the given format.
+
+ FORMAT is one of the following:
+
+ gnu GNU tar 1.13.x format
+ oldgnu GNU format as per tar <= 1.12
+ pax POSIX 1003.1-2001 (pax) format
+ posix same as pax
+ ustar POSIX 1003.1-1988 (ustar) format
+ v7 old V7 tar format
+@end group
+@end smallexample
+
+@noindent
+the format names are doc options. Thus, if you set
+@kbd{ARGP_HELP_FMT=doc-opt-col=6} the above part of the help output
+will look as follows:
+
+@smallexample
+@group
+ -H, --format=FORMAT create archive of the given format.
+
+ FORMAT is one of the following:
+
+ gnu GNU tar 1.13.x format
+ oldgnu GNU format as per tar <= 1.12
+ pax POSIX 1003.1-2001 (pax) format
+ posix same as pax
+ ustar POSIX 1003.1-1988 (ustar) format
+ v7 old V7 tar format
+@end group
+@end smallexample
+@end deftypevr
+
+@deftypevr {Help Output} offset opt-doc-col
+Column in which option description starts. Default is 29.
+
+@smallexample
+@group
+$ @kbd{tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+$ @kbd{ARGP_HELP_FMT=opt-doc-col=19 tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE use archive file or device ARCHIVE
+$ @kbd{ARGP_HELP_FMT=opt-doc-col=9 tar --help|grep ARCHIVE}
+ -f, --file=ARCHIVE
+ use archive file or device ARCHIVE
+@end group
+@end smallexample
+
+@noindent
+Notice, that the description starts on a separate line if
+@code{opt-doc-col} value is too small.
+@end deftypevr
+
+@deftypevr {Help Output} offset header-col
+Column in which @dfn{group headers} are printed. A group header is a
+descriptive text preceding an option group. For example, in the
+following text:
+
+@verbatim
+ Main operation mode:
+
+ -A, --catenate, --concatenate append tar files to
+ an archive
+ -c, --create create a new archive
+@end verbatim
+@noindent
+@samp{Main operation mode:} is the group header.
+
+The default value is 1.
+@end deftypevr
+
+@deftypevr {Help Output} offset usage-indent
+Indentation of wrapped usage lines. Affects @option{--usage}
+output. Default is 12.
+@end deftypevr
+
+@deftypevr {Help Output} offset rmargin
+Right margin of the text output. Used for wrapping.
+@end deftypevr
+
+@node Fixing Snapshot Files
+@appendix Fixing Snapshot Files
+@include tar-snapshot-edit.texi
+
+@node Tar Internals
+@appendix Tar Internals
+@include intern.texi
+
+@node Genfile
+@appendix Genfile
+@include genfile.texi
+
+@node Free Software Needs Free Documentation
+@appendix Free Software Needs Free Documentation
+@include freemanuals.texi
+
+@node GNU Free Documentation License
+@appendix GNU Free Documentation License
+
+@include fdl.texi
+
+@node Index of Command Line Options
+@appendix Index of Command Line Options
+
+This appendix contains an index of all @GNUTAR{} long command line
+options. The options are listed without the preceding double-dash.
+For a cross-reference of short command line options, see
+@ref{Short Option Summary}.
+
+@printindex op
+
+@node Index
+@appendix Index
+
+@printindex cp
+
+@summarycontents
+@contents
+@bye
+
+@c Local variables:
+@c texinfo-column-for-description: 32
+@c End:
diff --git a/doc/texify.sed b/doc/texify.sed
new file mode 100644
index 0000000..fed0d4e
--- /dev/null
+++ b/doc/texify.sed
@@ -0,0 +1,27 @@
+# Copyright 2006-2007, 2013-2014, 2016 Free Software Foundation, Inc.
+
+# This file is part of GNU tar.
+
+# GNU tar is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# GNU tar is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+1{s,/\*,@comment ,
+b
+}
+2,/.*\*\//{s,\*/,,;s/^/@comment/
+b
+}
+/\/* END \*\//,$d
+s/\([{}]\)/@\1/g
+s,/\*,&@r{,
+s,\*/,}&,
diff --git a/doc/untabify.el b/doc/untabify.el
new file mode 100644
index 0000000..77dd5c0
--- /dev/null
+++ b/doc/untabify.el
@@ -0,0 +1,13 @@
+;;;; Untabify the sources.
+;;;; Usage: emacs -batch -l untabify.el [file ...]
+
+(defun global-untabify (buflist)
+ (mapcar
+ (lambda (bufname)
+ (set-buffer (find-file bufname))
+ (untabify (point-min) (point-max))
+ (save-buffer)
+ (kill-buffer (current-buffer)))
+ buflist))
+
+(global-untabify command-line-args-left)
diff --git a/doc/value.texi b/doc/value.texi
new file mode 100644
index 0000000..1f47c83
--- /dev/null
+++ b/doc/value.texi
@@ -0,0 +1,20 @@
+@c This is part of GNU tar manual.
+@c Copyright 1992, 1994-1997, 1999-2006, 2013-2014, 2016 Free Software
+@c Foundation, Inc.
+@c See file tar.texi for copying conditions.
+
+@macro GNUTAR
+@acronym{GNU} @command{tar}
+@end macro
+
+@macro xopindex{option,text}
+@opindex \option\@r{, \text\}
+@end macro
+
+@macro opsummary{option}
+@ifclear ANCHOR--\option\
+@set ANCHOR--\option\ 1
+@anchor{--\option\}
+@end ifclear
+@xopindex{\option\, summary}
+@end macro
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..eacd45d
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@set UPDATED 14 April 2016
+@set UPDATED-MONTH April 2016
+@set EDITION 1.29
+@set VERSION 1.29