summaryrefslogtreecommitdiff
path: root/doc/tar.info-1
diff options
context:
space:
mode:
Diffstat (limited to 'doc/tar.info-1')
-rw-r--r--doc/tar.info-17890
1 files changed, 7890 insertions, 0 deletions
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'.
+