1 \input texinfo @c -*-texinfo-*-
4 @settitle The Tar Manual: DRAFT
8 @c Note: the edition number and date is listed in *two* places; please update.
9 @c subtitle and top node; search for !!set
11 @c Search for comments marked with !! or <<< (or >>>)
20 This file documents @code{tar}, a utility used to store, backup, and
23 Copyright (C) 1992 Free Software Foundation, Inc. DRAFT!
24 @c Need to put distribution information here when ready.
27 @c !!set edition number and date here
30 @subtitle The GNU Tape Archiver
31 @subtitle Edition 0.01, for @code{tar} Version 1.10
33 @c remove preceding today line when ready
36 @c subtitle insert month here when ready
38 @author Michael I. Bushnell and Amy Gorin
41 @vskip 0pt plus 1filll
42 Copyright @copyright{} 1992 Free Software Foundation, Inc.
45 This draft is not yet ready for distribution.
49 @node Top, Introduction, (dir), (dir)
52 This file documents @code{tar}, a utility used to store, backup, and
55 @c !!set edition number and date here
56 This is DRAFT Edition 0.01 of the @code{tar} documentation, @today{}, for @code{tar}
60 @c <<< The menus need to be gone over, and node names fixed.
62 * Introduction:: @code{tar}: The GNU Tape Archiver
63 * Invoking @code{tar}:: How to invoke @code{tar}
64 * Tutorial:: Getting started
65 * Wizardry:: Some More Advanced Uses for @code{tar}
66 * Archive Structure:: The structure of an archive
67 * Reading and Writing:: Reading and writing archives
68 * Insuring Accuracy:: How to insure the accuracy of an archive
69 * Selecting Archive Members:: How to select archive members
70 * User Interaction:: How @code{tar} interacts with people.
71 * Backups and Restoration:: How to restore files and perform backups
72 * Media:: Using tapes and other archive media
73 * Quick Reference:: A quick reference guide to
74 @code{tar} operations and options
75 * Data Format Details:: Details of the archive data format
76 * Concept Index:: Concept Index
79 @chapter Tutorial Introduction to @code{tar}
81 This chapter guides you through some basic examples of @code{tar}
82 operations. If you already know how to use some other version of
83 @code{tar}, then you probably don't need to read this chapter. This
84 chapter omits complicated details about many of the ways @code{tar}
85 works. See later chapters for full information.
88 * Creating Archives:: Creating Archives
89 * Extracting Files:: Extracting Files from an Archive
90 * Listing Archive Contents:: Listing the Contents of an Archive
91 * Comparing Files:: Comparing Archives with the File System
92 * Adding to Archives:: Adding Files to Existing Archives
93 * Concatenate:: Concatenating Archives
94 * Deleting Files:: Deleting Files From an Archive
97 @section What @code{tar} Does
99 The @code{tar} program is used to create and manipulate @code{tar}
100 archives. An @dfn{archive} is a single file which contains within it
101 the contents of many files. In addition, the archive identifies the
102 names of the files, their owner, and so forth.
104 You can use @code{tar} archives in many ways. Initially, @code{tar}
105 archives were used to store files conveniently on magnetic tape. The
106 name @samp{tar} comes from this use; it stands for Tape ARchiver.
107 Often, @code{tar} archives are used to store related files for
108 convenient file transfer over a network. For example, the GNU Project
109 distributes its software bundled into @code{tar} archives, so that all
110 the files relating to a particular program (or set of related programs)
111 can be transferred as a single unit.
113 The files inside an archive are called @dfn{members}. Within this
114 manual, we use the term @dfn{file} to refer only to files accessible in
115 the normal ways (by @code{ls}, @code{cat}, and so forth), and the term
116 @dfn{members} to refer only to the members of an archive. Similarly, a
117 @dfn{file name} is the name of a file, as it resides in the filesystem,
118 and a @dfn{member name} is the name of an archive member within the
121 The @code{tar} program provides the ability to create @code{tar}
122 archives, as well as for various other kinds of manipulation. The term
123 @dfn{extraction} is used to refer to the process of copying an archive
124 member into a file in the filesystem. One might speak of extracting a
125 single member. Extracting all the members of an archive is often called
126 extracting the archive. Often the term @dfn{unpack} is used to refer to
127 the extraction of many or all the members of an archive.
129 Conventionally, @code{tar} archives are given names ending with
130 @samp{.tar}. This is not necessary for @code{tar} to operate properly,
131 but this manual follows the convention in order to get the reader used
134 Occasionally archive members are referred to as files. For people
135 familiar with the operation of @code{tar}, this causes no difficulty.
136 However, this manual consistently uses the terminology above in
137 referring to files and archive members, to make it easier to learn how
140 @section How to Create Archives
142 To create a new archive, use @samp{tar --create}. You should generally
143 use the @samp{--file} option to specify the name the tar archive will
144 have. Then specify the names of the files you wish to place in the new
145 archive. For example, to place the files @file{apple}, @file{angst},
146 and @file{asparagus} into an archive named @file{afiles.tar}, use the
150 tar --create --file=afiles.tar apple angst asparagus
153 The order of the arguments is not important. You could also say:
156 tar apple --create angst --file=afiles.tar asparagus
159 This order is harder to understand however. In this manual, we will
160 list the arguments in a reasonable order to make the commands easier to
161 understand, but you can type them in any order you wish.
163 If you don't specify the names of any files to put in the archive, then
164 tar will create an empty archive. So, the following command will create
165 an archive with nothing in it:
168 tar --create --file=empty-archive.tar
171 Whenever you use @samp{tar --create}, @code{tar} will erase the current
172 contents of the file named by @samp{--file} if it exists. To add files
173 to an existing archive, you need to use a different option.
174 @xref{Adding to Archives} for information on how to do this.
176 When @samp{tar --create} creates an archive, the member names of the
177 members of the archive are exactly the same as the file names as you
178 typed them in the @code{tar} command. So, the member names of
179 @file{afiles} (as created by the first example above) are @file{apple},
180 @file{angst}, and @file{asparagus}. However, suppose an archive were
181 created with this command:
184 tar --create --file=bfiles.tar ./balloons baboon ./bodacious
187 Then, the three files @file{balloons}, @file{baboon}, and
188 @file{bodacious} would get placed in the archive (because @file{./} is a
189 synonym for the current directory), but their member names would be
190 @file{./balloons}, @file{baboon}, and @file{./bodacious}.
192 If you want to see the progress of tar as it writes files into the
193 archive, you can use the @samp{--verbose} option.
195 If one of the files named to @samp{tar --create} is a directory, then
196 the operation of tar is more complicated. @xref{Tar and Directories},
197 the last section of this tutorial, for more information.
199 If you don't specify the @samp{--file} option, then @code{tar} will use
200 a default. Usually this default is some physical tape drive attached to
201 your machine. If there is no tape drive attached, or the default is not
202 meaningful, then tar will print an error message. This error message
203 might look roughly like one of the following:
206 tar: can't open /dev/rmt8 : No such device or address
207 tar: can't open /dev/rsmt0 : I/O error
210 If you get an error like this, mentioning a file you didn't specify
211 (@file{/dev/rmt8} or @file{/dev/rsmt0} in the examples above), then @code{tar}
212 is using a default value for @samp{--file}. You should generally specify a
213 @samp{--file} argument whenever you use @code{tar}, rather than relying
216 @section How to List Archives
218 Use @samp{tar --list} to print the names of members stored in an
219 archive. Use a @samp{--file} option just as with @samp{tar --create} to
220 specify the name of the archive. For example, the archive
221 @file{afiles.tar} created in the last section could be examined with the
222 command @samp{tar --list --file=afiles.tar}. The output of tar would
231 The archive @file{bfiles.tar} would list as follows:
239 (Of course, @samp{tar --list --file=empty-archive.tar} would produce no
242 If you use the @samp{--verbose} option with @samp{tar --list}, then tar
243 will print out a listing reminiscent of @samp{ls -l}, showing owner,
244 file size, and so forth.
246 You can also specify member names when using @samp{tar --list}. In this
247 case, tar will only list the names of members you identify. For
248 example, @samp{tar --list --file=afiles.tar apple} would only print
249 @samp{apple}. It is essential when specifying member names to tar that
250 you give the exact member names. For example, @samp{tar --list
251 --file=bfiles baloons} would produce no output, because there is no
252 member named @file{baloons}, only one named @file{./baloons}. While the
253 file names @file{baloons} and @file{./baloons} name the same file,
254 member names are compared using a simplistic name comparison, in which
255 an exact match is necessary.
257 @section How to Extract Members from an Archive
259 In order to extract members from an archive, use @samp{tar --extract}.
260 Specify the name of the archive with @samp{--file}. To extract specific
261 archive members, give their member names as arguments. It essential to
262 give their exact member name, as printed by @samp{tar --list}. This
263 will create a copy of the archive member, with a file name the same as
264 its name in the archive.
266 Keeping the example of the two archives created at the beginning of this
267 tutorial, @samp{tar --extract --file=afiles.tar apple} would create a
268 file @file{apple} in the current directory with the contents of the
269 archive member @file{apple}. It would remove any file named
270 @file{apple} already present in the directory, but it would not change
271 the archive in any way.
273 Remember that specifying the exact member name is important. @samp{tar
274 --extract --file=bfiles.tar baloons} will fail, because there is no
275 member named @file{baloons}. To extract the member named
276 @file{./baloons} you would need to specify @samp{tar --extract
277 --file=bfiles.tar ./baloons}. To find the exact member names of the
278 members of an archive, use @samp{tar --list} (@pxref{Listing
281 If you do not list any archive member names, then @samp{tar --extract}
282 will extract all the members of the archive.
284 If you give the @samp{--verbose} option, then @samp{tar --extract} will
285 print the names of the archive members as it extracts them.
287 @section How to Add Files to Existing Archives
289 If you want to add files to an existing archive, then don't use
290 @samp{tar --create}. That will erase the archive and create a new one
291 in its place. Instead, use @samp{tar --append}. The command @samp{tar
292 --append --file=afiles.tar arbalest} would add the file @file{arbalest}
293 to the existing archive @file{afiles.tar}. The archive must already
294 exist in order to use @samp{tar --append}.
296 As with @samp{tar --create}, the member names of the newly added files
297 will be the exact same as their names given on the command line. The
298 @samp{--verbose} option will print out the names of the files as they
299 are written into the archive.
301 If you add a file to an archive using @samp{tar --append} with the
302 same name as an archive member already present in the archive, then the
303 old member is not deleted. What does happen, however, is somewhat
304 complex. @xref{Multiple Members with the Same Name}. If you want to
305 replace an archive member, use @samp{tar --delete} first, and then use
308 @section How to Delete Members from Archives
310 You can delete members from an archive using @samp{tar --delete}.
311 Specify the name of the archive with @samp{--file}. List the member
312 names of the members to be deleted. (If you list no member names, then
313 nothing will be deleted.) The @samp{--verbose} option will cause
314 @code{tar} to print the names of the members as they are deleted. As
315 with @samp{tar --extract}, it is important that you give the exact
316 member names when using @samp{tar --delete}. Use @samp{tar --list} to
317 find out the exact member names in an archive (@pxref{Listing
320 The @samp{tar --delete} command only works with archives stored on disk.
321 You cannot delete members from an archive stored on a tape.
323 @section How to Archive Directories
325 When the names of files or members specify directories, the operation of
326 @code{tar} is more complex. Generally, when a directory is named,
327 @code{tar} also operates on all the contents of the directory,
328 recursively. Thus, to @code{tar}, the file name @file{/} names the
331 To archive the entire contents of a directory, use @samp{tar --create}
332 (or @samp{tar --append}) as usual, and specify the name of the
333 directory. For example, to archive all the contents of the current
334 directory, use @samp{tar --create --file=@var{archive-name} .}. Doing
335 this will give the archive members names starting with @samp{./}. To
336 archive the contents of a directory named @file{foodir}, use @samp{tar
337 --create --file=@var{archive-name} foodir}. In this case, the member
338 names will all start with @samp{foodir/}.
340 If you give @code{tar} a command such as @samp{tar --create
341 --file=foo.tar .}, it will report @samp{tar: foo.tar is the archive; not
342 dumped}. This happens because the archive @file{foo.tar} is created
343 before putting any files into it. Then, when @code{tar} attempts to add
344 all the files in the directory @file{.} to the archive, it notices that
345 the file @file{foo.tar} is the same as the archive, and skips it. (It
346 makes no sense to put an archive into itself.) GNU @code{tar} will
347 continue in this case, and create the archive as normal, except for the
348 exclusion of that one file. Other versions of @code{tar}, however, are
349 not so clever, and will enter an infinite loop when this happens, so you
350 should not depend on this behavior. In general, make sure that the
351 archive is not inside a directory being dumped.
353 When extracting files, you can also name directory archive members on
354 the command line. In this case, @code{tar} extracts all the archive
355 members whose names begin with the name of the directory. As usual,
356 @code{tar} is not particularly clever about interpreting member names.
357 The command @samp{tar --extract --file=@var{archive-name} .} will not
358 extract all the contents of the archive, but only those members whose
359 member names begin with @samp{./}.
361 @section Shorthand Names
363 Most of the options to @code{tar} come in both long forms and short
364 forms. The options described in this tutorial have the following
365 abbreviations (except @samp{--delete}, which has no shorthand form):
378 @item --file=@var{archive-name}
379 @samp{-f @var{archive-name}}
382 These options make typing long @code{tar} commands easier. For example,
385 tar --create --file=/tmp/afiles.tar --verbose apple angst asparagus
389 tar -c -f /tmp/afiles.tar -v apple angst asparagus
392 For more information on option syntax, @ref{Invoking @code{tar}}. In
393 the remainder of this manual, short forms and long forms are given
394 together when an option is discussed.
396 @chapter Invoking @code{tar}
398 The usual way to invoke tar is
401 @code{tar} @var{options}... [@var{file-or-member-names}...]
404 All the options start with @samp{-}. You can actually type in arguments
405 in any order, but in this manual the options always precede the other
406 arguments, to make examples easier to understand.
409 * Option Form:: The Forms of Arguments
410 * Argument Functions:: The Functions of Arguments
411 * Old Syntax for Commands:: An Old, but Still Supported, Syntax
412 for @code{tar} Commands
415 @section The Forms of Arguments
417 Most options of @code{tar} have a single letter form (a single letter
418 preceded by @samp{-}), and at least one mnemonic form (a word or
419 abbreviation preceded by @samp{--}). The forms are absolutely
420 identical in function. For example, you can use either @samp{tar -t}
421 or @samp{tar --list} to list the contents of an archive. In addition,
422 mnemonic names can be given unique abbreviations. For example,
423 @samp{--cre} can be used in place of @samp{--create} because there is
424 no other option which begins with @samp{cre}.
426 Some options require an additional argument. Single letter options
427 which require arguments use the immediately following argument.
428 Mnemonic options are separated from their arguments by an @samp{=}
429 sign. For example, to create an an archive file named
430 @file{george.tar}, use either @samp{tar --create --file=george.tar} or
431 @samp{tar --create -f george.tar}. Both
432 @samp{--file=@var{archive-name}} and @samp{-f @var{archive-name}} denote
433 the option to give the archive a non-default name, which in the example
434 is @file{george.tar}.
436 You can mix single letter and mnemonic forms in the same command. You
437 could type the above example as @samp{tar -c --file=george} or
438 @samp{tar --create -f george}. However, @code{tar} operations and
439 options are case sensitive. You would not type the above example as
440 @samp{tar -C --file=george}, because @samp{-C} is an option that
441 causes @code{tar} to change directories, not an operation that creates
442 an archive. In fact, @samp{-C} requires a further argument (the name
443 of the directory which to change to). In this case, tar would think
444 it needs to change to a directory named @samp{--file=george}, and
445 wouldn't interpret @samp{--file-george} as an option at all!
447 @section The Functions of Arguments
449 You must give exactly one option from the following list to tar. This
450 option specifies the basic operation for @code{tar} to perform.
454 Print a summary of the options to @code{tar} and do nothing else
463 Add the contents of one or more archives to another archive
467 Add files to an existing archive
471 List the members in an archive
474 Delete members from an archive
479 Extract members from an archive
484 Compare members in an archive with files in the file system
488 Update an archive by appending newer versions of already stored files
491 The remaining options to @code{tar} change details of the operation,
492 such as archive format, archive name, or level of user interaction.
493 You can specify more than one option.
495 The remaining arguments are interpreted either as file names or as
496 member names, depending on the basic operation @code{tar} is
497 performing. For @samp{--append} and @samp{--create} these arguments
498 specify the names of files (which must already exist) to place in the
499 archive. For the remaining operation types, the additional arguments
500 specify archive members to compare, delete, extract, list, or update.
501 When naming archive members, you must give the exact name of the member
502 in the archive, as it is printed by @code{tar --list}. When naming
503 files, the normal file name rules apply.
505 If you don't use any additional arguments, @samp{--append},
506 @samp{--catenate}, and @samp{--delete} will do nothing. Naturally,
507 @samp{--create} will make an empty archive if given no files to add.
508 The other operations of @code{tar} (@samp{--list}, @samp{--extract},
509 @samp{--compare}, and @samp{--update}) will act on the entire contents
512 If you give the name of a directory as either a file name or a member
513 name, then @code{tar} acts recursively on all the files and directories
514 beneath that directory. For example, the name @file{/} identifies all
515 the files in the filesystem to @code{tar}.
517 @section An Old, but Still Supported, Syntax for @code{tar} Commands
519 For historical reasons, GNU @code{tar} also accepts a syntax for
520 commands which splits options that require additional arguments into
521 two parts. That syntax is of the form:
524 @code{tar} @var{option-letters}... [@var{option-arguments}...] [@var{file-names}...]@refill
528 where arguments to the options appear in the same order as the letters
529 to which they correspond, and the operation and all the option letters
530 appear as a single argument, without separating spaces.
532 This command syntax is useful because it lets you type the single
533 letter forms of the operation and options as a single argument to
534 @code{tar}, without writing preceding @samp{-}s or inserting spaces
535 between letters. @samp{tar cv} or @samp{tar -cv} are equivalent to
538 On the other hand, this old style syntax makes it difficult to match
539 option letters with their corresponding arguments, and is often
540 confusing. In the command @samp{tar cvbf 20 /dev/rmt0}, for example,
541 @samp{20} is the argument for @samp{-b}, @samp{/dev/rmt0} is the
542 argument for @samp{-f}, and @samp{-v} does not have a corresponding
543 argument. The modern syntax---@samp{tar -c -v -b 20 -f
544 /dev/rmt0}---is clearer.
546 @chapter Basic @code{tar} Operations
548 This chapter describes the basic operations supported by the @code{tar}
549 program. A given invocation of @code{tar} will do exactly one of these
552 @section Creating a New Archive
554 The @samp{--create} (@code{-c}) option causes @code{tar} to create a new
555 archive. The files to be archived are then named on the command line.
556 Each file will be added to the archive with a member name exactly the
557 same as the name given on the command line. (When you give an absolute
558 file name @code{tar} actually modifies it slightly, @ref{Absolute
559 Paths}.) If you list no files to be archived, then an empty archive is
562 If there are two many files to conveniently list on the command line,
563 you can list the names in a file, and @code{tar} will read that file.
564 @xref{Reading Names from a File}.
566 If you name a directory, then @code{tar} will archive not only the
567 directory, but all its contents, recursively. For example, if you name
568 @file{/}, then @code{tar} will archive the entire filesystem.
570 Do not use the option to add files to an existing archive; it will
571 delete the archive and write a new one. Use @samp{--append} instead.
572 (@xref{Adding to an Existing Archive}.)
574 There are various ways of causing @code{tar} to skip over some files,
575 and not archive them. @xref{Specifying Names to @code{tar}}.
577 @section Adding to an Existing Archive
579 The @samp{--append} (@code{-r}) option will case @code{tar} to add new
580 files to an existing archive. It interprets file names and member names
581 in exactly the same manner as @samp{--create}. Nothing happens if you
582 don't list any names.
584 This option never deletes members. If a new member is added under the
585 same name as an existing member, then both will be in the archive, with
586 the new member after the old one. For information on how this affects
587 reading the archive, @ref{Multiple Members with the Same Name}.
589 This operation cannot be performed on some tape drives, unfortunately,
590 due to deficiencies in the formats thoes tape drives use.
592 @section Combining Archives
594 The @samp{--catenate} (or @code{--concatenate}, or @code{-A}) causes
595 @code{tar} to add the contents of several archives to an existing
598 Name the archives to be catenated on the command line. (Nothing happens
599 if you don't list any.) The members, and their member names, will be
600 copied verbatim from those archives. If this causes multiple members to
601 have the same name, it does not delete either; all the members with the
602 same name coexist. For information on how this affects reading the
603 archive, @ref{Multiple Members with the Same Name}.
605 You must use this option to concatenate archives. If you just combine
606 them with @code{cat}, the result will not be a valid @code{tar} format
609 This operation cannot be performed on some tape drives, unfortunately,
610 due to deficiencies in the formats thoes tape drives use.
612 @section Removing Archive Members
614 You can use the @samp{--delete} option to remove members from an
615 archive. Name the members on the command line to be deleted. This
616 option will rewrite the archive; because of this, it does not work on
617 tape drives. If you list no members to be deleted, nothing happens.
619 @section Listing Archive Members
621 The @samp{--list} (@samp{-t}) option will list the names of members of
622 the archive. Name the members to be listed on the command line (to
623 modify the way these names are interpreted, @pxref{Specifying Names to
624 @code{tar}}). If you name no members, then @samp{--list} will list the
625 names of all the members of the archive.
627 To see more than just the names of the members, use the @samp{--verbose}
628 option to cause @code{tar} to print out a listing similar to that of
631 @section Extracting Archive Members
633 Use @samp{--extract} (or @samp{--get}, or @samp{-x}) to extract members
634 from an archive. For each member named (or for the entire archive if no
635 members are named) on the command line (or with @samp{--files-from}) the
636 a file is created with the contents of the archive member. The name of
637 the file is the same as the member name.
639 Various options cause @code{tar} to extract more than just file
640 contents, such as the owner, the permissions, the modification date, and
644 The @samp{--same-permissions} (or @samp{--preserve-permissions}, or
645 @samp{-p}) options cause @code{tar} to cause the new file to have the
646 same permissions as the original file did when it was placed in the
647 archive. Without this option, the current @code{umask} is used to
648 affect the permissions.
650 When extrating, @code{tar} normally sets the modification time of the
651 file to the value recorded in the archive. The
652 @samp{--modification-time} option causes @code{tar} to omit doing this.
655 @section Updating an Archive
657 The @samp{--update} (or @samp{-u}) option updates a @code{tar} archive
658 by comparing the date of the specified archive members against the date
659 of the file with the same name. If the file has been modified more
660 recently than the archive member, then the archive member is deleted (as
661 with @samp{--delete}) and then the file is added to the archive (as with
662 @samp{--append}). On media where the @samp{--delete} option cannot be
663 performed (such as magnetic tapes), the @samp{--update} option similarly
666 If no archive members are named (either on the command line or via
667 @samp{--files-from}), then the entire archive is processed in this
670 @section Comparing Archives Members with Files
672 The @samp{--compare} (or @samp{--diff}, or @samp{-d}) option compares
673 the contents of the specified archive members against the files with the
674 same names, and reports its findings. If no members are named on the
675 command line (or through @samp{--files-from}), then the entire archive
678 @chapter Specifying Names to @code{tar}
680 When specifying the names of files or members to @code{tar}, it by
681 default takes the names of the files from the command line. There are
682 other ways, however, to specify file or member names, or to modify the
683 manner in which @code{tar} selects the files or members upon which to
684 operate. In general, these methods work both for specifying the names
685 of files and archive members.
687 @section Reading Names from a File
689 Instead of giving the names of files or archive members on the command
690 line, you can put the names into a file, and then use the
691 @samp{--files-from=@var{file-name-list}} (@samp{-T
692 @var{file-name-list}}) option to @code{tar}. Give the name of the file
693 which contains the list as the argument to @samp{--files-from}. The
694 file names should be separated by newlines in the list. If you give a
695 single dash as a filename for @samp{--files-from} (that is, you specify
696 @samp{--files-from=-} or @samp{-T -}), then the filenames are read from
699 If you want to specify names that might contain newlines, use the
700 @samp{--null} option. Then, the filenames should be separated by NUL
701 characters (ASCII 000) instead of newlines. In addition, the
702 @samp{--null} option turns off the @samp{-C} option (@pxref{Changing
705 @section Excluding Some Files
707 The @samp{--exclude=@var{pattern}} option will prevent any file or
708 member which matches the regular expression @var{pattern} from being
709 operated on. For example, if you want to create an archive with all the
710 contents of @file{/tmp} except the file @file{/tmp/foo}, you can use the
711 command @samp{tar --create --file=arch.tar --exclude=foo}.
713 If there are many files you want to exclude, you can use the
714 @samp{--exclude-from=@var{exclude-list}} (@samp{-X @var{exclude-list}})
715 option. This works just like the
716 @samp{--files-from=@var{file-name-list}} option: specify the name of a
717 file as @var{exclude-list} which contains the list of patterns you want
720 @xref{Regular Expressions} for more information on the syntax and
721 meaning of regular expressions.
723 @section Operating Only on New Files
725 The @samp{--newer=@var{date}} (@samp{--after-date=@var{date}} or
726 @samp{-N @var{date}}) limits @code{tar} to only operating on files which
727 have been modified after the date specified. (For more information on
728 how to specify a date, @xref{Date Formats}.) A file is considered to
729 have changed if the contents have been modified, or if the owner,
730 permissions, and so forth, have been changed.
732 If you only want @code{tar} make the date comparison on the basis of the
733 actual contents of the file's modification, then use the
734 @samp{--newer-mtime=@var{date}} option.
736 You should never use this option for making incremental dumps. To learn
737 how to use @code{tar} to make backups, @ref{Making Backups}.
739 @section Crossing Filesystem Boundaries
741 The @samp{--one-file-system} option causes @code{tar} to modify its
742 normal behavior in archiving the contents of directories. If a file in
743 a directory is not on the same filesystem as the directory itself
744 (because it is a mounted filesystem in its own right), then @code{tar}
745 will not archive that file, or (if it is a directory itself) anything
748 This does not necessarily limit @code{tar} to only archiving the
749 contents of a single filesystem, because all files named on the command
750 line (or through the @samp{--files-from} option) will always be
753 @chapter Changing the Names of Members when Archiving
755 @section Changing Directory
757 The @samp{--directory=@var{directory}} (@samp{-C @var{directory}})
758 option causes @code{tar} to change its current working directory to
759 @var{directory}. Unlike most options, this one is processed at the
760 point it occurs within the list of files to be processed. Consider the
763 tar --create --file=foo.tar -C /etc passwd hosts -C /lib libc.a
766 This command will place the files @file{/etc/passwd}, @file{/etc/hosts},
767 and @file{/lib/libc.a} into the archive. However, the names of the
768 archive members will be exactly what they were on the command line:
769 @file{passwd}, @file{hosts}, and @file{libc.a}. The @samp{--directory}
770 option is frequently used to make the archive independent of the
771 original name of the directory holding the files.
773 Note that @samp{--directory} options are interpreted consecutively. If
774 @samp{--directory} option specifies a relative pathname, it is
775 interpreted relative to the then current directory, which might not be
776 the same as the original current working directory of @code{tar}, due to
777 a previous @samp{--directory} option.
779 When using @samp{--files-from} (@pxref{Reading Names from a File}), you
780 can put @samp{-C} options in the file list. Unfortunately, you cannot
781 put @samp{--directory} options in the file list. (This interpretation
782 can be disabled by using the @samp{--null} option.)
784 @section Absolute Path Names
786 When @code{tar} extracts archive members from an archive, it strips any
787 leading slashes (@code{/}) from the member name. This causes absolute
788 member names in the archive to be treated as relative file names. This
789 allows you to have such members extracted wherever you want, instead of
790 being restricted to extracting the member in the exact directory named
791 in the archive. For example, if the archive member has the name
792 @file{/etc/passwd}, @code{tar} will extract it as if the name were
793 really @file{etc/passwd}.
795 Other @code{tar} programs do not do this. As a result, if you create an
796 archive whose member names start with a slash, they will be difficult
797 for other people with an inferior @code{tar} program to use. Therefore,
798 GNU @code{tar} also strips leading slashes from member names when
799 putting members into the archive. For example, if you ask @code{tar} to
800 add the file @file{/bin/ls} to an archive, it will do so, but the member
801 name will be @file{bin/ls}.
803 If you use the @samp{--absolute-paths} option, @code{tar} will do
804 neither of these transformations.
806 @section Symbolic Links
808 Normally, when @code{tar} archives a symbolic link, it writes a record
809 to the archive naming the target of the link. In that way, the
810 @code{tar} archive is a faithful record of the filesystem contents.
811 However, if you want @code{tar} to actually dump the contents of the
812 target of the symbolic link, then use the @samp{--dereference} option.
814 @chapter Making @code{tar} More Verbose
816 Various options cause @code{tar} to print information as it progresses
819 The @samp{--verbose} (or @samp{-v}) option causes @code{tar} to print
820 the name of each archive member or file as it is processed. Since
821 @samp{--list} already prints the names of the members, @samp{--verbose}
822 used with @samp{--list} causes @code{tar} to print a longer listing
823 (reminiscent of @samp{ls -l}) for each member.
825 To see the progress of @code{tar} through the archive, the
826 @samp{--record-number} option prints a message for each record read or
827 writted. (@xref{Archive Structure}.)
829 The @samp{--totals} option (which is only meaningful when used with
830 @samp{--create}) causes @code{tar} to print the total amount written to
831 the archive, after it has been fully created.
833 The @samp{--checkpoint} option prints an occasional message as
834 @code{tar} reads or writes the archive. It is designed for those who
835 don't need the more detailed (and voluminous) output of
836 @samp{--record-number}, but do want visual confirmation that @code{tar}
837 is actually making forward progress.
839 @chapter Input and Output
841 @section Changing the Archive Name
843 By default, @code{tar} uses an archive file name compiled in when
844 @code{tar} was built. Usually this refers to some physical tape drive
845 on the machine. Often, the installer of @code{tar} didn't set the
846 default to anything meaningful at all.
848 As a result, most uses of @code{tar} need to tell @code{tar} where to
849 find (or create) the archive. The @samp{--file=@var{archive-name}} (or
850 @samp{-f @var{archive-name}} option selects another file to use as the
853 If the archive file name includes a colon (@samp{:}), then it is assumed
854 to be a file on another machine. If the archive file is
855 @samp{@var{user}@@@var{host}:@var{file}}, then @var{file} is used on the
856 host @var{host}. The remote host is accessed using the @code{rsh}
857 program, with a username of @var{user}. If the username is omitted
858 (along with the @samp{@@} sign), then your user name will be used.
859 (This is the normal @code{rsh} behavior.) It is necessary for the
860 remote machine, in addition to permitting your @code{rsh} access, to
861 have the @code{/usr/ucb/rmt} program installed. If you need to use a
862 file whose name includes a colon, then the remote tape drive behavior
863 can be inhibited by using the @samp{--force-local} option.
865 If the filename you give to @samp{--file} is a single dash (@samp{-}),
866 then @code{tar} will read the archive from (or write it to) standard
867 input (or standard output).
869 @section Extracting Members to Standard Output
871 An archive member in normally extracted into a file with the same name
872 as the archive member. However, you can use the @samp{--to-stdout} to
873 cause @code{tar} to write extracted archive members to standard output.
874 If you extract multiple members, they appear on standard output
875 concatenated, in the order they are found in the archive.
877 @chapter Being More Careful
879 When using @code{tar} with many options, particularly ones with
880 complicated or difficult-to-predict behavior, it is possible to make
881 serious mistakes. As a result, @code{tar} provides several options that
882 make observing @code{tar} easier.
884 The @samp{--verbose} option (@pxref{Making @code{tar} More Verbose})
885 causes @code{tar} to print the name of each file or archive member as it
888 If you use @samp{--interactive} (or {@samp--confirm}), then @code{tar}
889 will ask you for confirmation before each operation. For example, when
890 extracting, it will prompt you before each archive member is extracted,
891 and you can select that member for extraction or pass over to the next.
893 The @samp{--verify} option, when using @samp{--create}, causes
894 @code{tar}, after having finished creating the archive, to go back over
895 it and compare its contents against the files that were placed in the
898 The @samp{--show-omitted-dirs} option, when reading an archive (with
899 @samp{--list} or @samp{--extract}, for example), causes a message to be
900 printed for each directory in the archive which is skipped. This
901 happens regardless of the reason for skipping: the directory might not
902 have been named on the command line (implicitly or explicitly), it might
903 be excluded by the use of the @samp{--exclude} option, or some other
906 @chapter Using Real Tape Drives
908 Many complexities surround the use of @code{tar} on tape drives. Since
909 the creation and manipulation of archives located on magnetic tape was
910 the original purpose of @code{tar}, it contains many features making
911 such manipulation easier.
915 When writing to tapes, @code{tar} writes the contents of the archive in
916 chunks known as @dfn{blocks}. To change the default blocksize, use the
917 @samp{--block-size=@var{blocking-factor}} (@samp{-b
918 @var{blocking-factor}) option. Each block will then be composed of
919 @var{blocking-factor} records. (Each @code{tar} record is 512 bytes.
920 @xref{Archive Format}.) Each file written to the archive uses at least
921 one full block. As a result, using a larger block size can result in
922 more wasted space for small files. On the other hand, a larger block
923 size can ofter be read and written much more efficiently.
925 Further complicating the problem is that some tape drives ignore the
926 blocking entirely. For these, a larger block size can still improve
927 performance (because the software layers above the tape drive still
928 honor the blocking), but not as dramatically as on tape drives that
939 @node Wizardry, Archive Structure, Tutorial, Top
942 <<<This section needs to be written -ringo
944 @strong{To come:} using Unix file linking capability to recreate directory
945 structures---linking files into one subdirectory and then tarring that
948 @strong{to come:} nice hairy example using absolute-paths, newer, etc.
951 Piping one @code{tar} to another is an easy way to copy a directory's
952 contents from one disk to another, while preserving the dates, modes, owners
953 and link-structure of all the files therein.
956 cd sourcedirectory; tar cf - . | (cd targetdir; tar xf -)
962 <<< the following using standard input/output correct??
964 cd sourcedirectory; tar --create --file=- . | (cd targetdir; tar --extract --file=-)
969 Archive files can be used for transporting a group of files from one system
970 to another: put all relevant files into an archive on one computer system,
971 transfer the archive to another, and extract the contents there. The basic
972 transfer medium might be magnetic tape, Internet FTP, or even electronic
973 mail (though you must encode the archive with @code{uuencode} in order to
974 transport it properly by mail). Both machines do not have to use the same
975 operating system, as long as they both support the @code{tar} program.
977 <<< mention uuencode on a paragraph of its own
979 <<<<<end construction>>>>>
981 @node Archive Structure, Reading and Writing, Wizardry, Top
982 @chapter The Structure of an Archive
984 While an archive may contain many files, the archive itself is a
985 single ordinary file. Like any other file, an archive file can be
986 written to a storage device such as a tape or disk, sent through a
987 pipe or over a network, saved on the active file system, or even
988 stored in another archive. An archive file is not easy to read or
989 manipulate without using the @code{tar} utility or Tar mode in Emacs.
992 Physically, an archive consists of a series of file entries terminated
993 by an end-of-archive entry, which consists of 512 zero bytes. A file
994 entry usually describes one of the files in the archive (an
995 @dfn{archive member}), and consists of a file header and the contents
996 of the file. File headers contain file names and statistics, checksum
997 information which @code{tar} uses to detect file corruption, and
998 information about file types.
1000 More than archive member can have the same file name. One way this
1001 situation can occur is if more than one version of a file has been
1002 stored in the archive. For information about adding new versions of a
1003 file to an archive, @pxref{Modifying}.
1005 In addition to entries describing archive members, an archive may contain
1006 entries which @code{tar} itself uses to store information.
1007 @xref{Archive Label}, for an example of such an archive entry.
1010 * Old Style File Information:: Old Style File Information
1012 * Format Variations::
1015 @node Old Style File Information, Archive Label, Archive Structure, Archive Structure
1016 @section Old Style File Information
1017 @cindex Format, old style
1018 @cindex Old style format
1019 @cindex Old style archives
1021 Archives record not only an archive member's contents, but also its
1022 file name or names, its access permissions, user and group, size in
1023 bytes, and last modification time. Some archives also record the file
1024 names in each archived directory, as well as other file and directory
1027 Certain old versions of @code{tar} cannot handle additional
1028 information recorded by newer @code{tar} programs. To create an
1029 archive which can be read by these old versions, specify the
1030 @samp{--old-archive} option in conjunction with the @samp{tar --create}
1031 operation. When you specify this option, @code{tar} leaves out
1032 information about directories, pipes, fifos, contiguous files, and
1033 device files, and specifies file ownership by group and user ids
1036 The @samp{--old-archive} option is needed only if the archive must be
1037 readable by an older tape archive program which cannot handle the new format.
1038 Most @code{tar} programs do not have this limitation, so this option
1046 @c has portability been changed to portable?
1047 Creates an archive that can be read by an old @code{tar} program.
1048 Used in conjunction with the @samp{tar --create} operation.
1051 @node Archive Label, Format Variations, Old Style File Information, Archive Structure
1052 @section Including a Label in the Archive
1053 @cindex Labeling an archive
1054 @cindex Labels on the archive media
1056 @c !! Should the arg to --label be a quoted string?? no - ringo
1057 To avoid problems caused by misplaced paper labels on the archive
1058 media, you can include a @dfn{label} entry---an archive member which
1059 contains the name of the archive---in the archive itself. Use the
1060 @samp{--label=@var{archive-label}} option in conjunction with the
1061 @samp{--create} operation to include a label entry in the archive as it
1064 If you create an archive using both @samp{--label=@var{archive-label}}
1065 and @samp{--multi-volume}, each volume of the archive will have an
1066 archive label of the form @samp{@var{archive-label} Volume @var{n}},
1067 where @var{n} is 1 for the first volume, 2 for the next, and so on.
1068 @xref{Multi-Volume Archives}, for information on creating multiple
1071 If you extract an archive using @samp{--label=@var{archive-label}},
1072 @code{tar} will print an error if the archive label doesn't match the
1073 @var{archive-label} specified, and will then not extract the archive.
1074 You can include a regular expression in @var{archive-label}, in this
1076 @c >>> why is a reg. exp. useful here? (to limit extraction to a
1077 @c >>>specific group? ie for multi-volume??? -ringo
1079 To find out an archive's label entry (or to find out if an archive has
1080 a label at all), use @samp{tar --list --verbose}. @code{tar} will print the
1081 label first, and then print archive member information, as in the
1085 % tar --verbose --list --file=iamanarchive
1086 V--------- 0/0 0 Mar 7 12:01 1992 iamalabel--Volume Header--
1087 -rw-rw-rw- ringo/user 40 May 21 13:30 1990 iamafilename
1091 @item --label=@var{archive-label}
1092 @itemx -V @var{archive-label}
1093 Includes an @dfn{archive-label} at the beginning of the archive when
1094 the archive is being created (when used in conjunction with the
1095 @samp{tar --create} operation). Checks to make sure the archive label
1096 matches the one specified (when used in conjunction with the @samp{tar
1097 --extract} operation.
1101 @node Format Variations, , Archive Label, Archive Structure
1102 @section Format Variations
1103 @cindex Format Parameters
1104 @cindex Format Options
1105 @cindex Options to specify archive format.
1107 Format parameters specify how an archive is written on the archive
1108 media. The best choice of format parameters will vary depending on
1109 the type and number of files being archived, and on the media used to
1112 To specify format parameters when accessing or creating an archive,
1113 you can use the options described in the following sections. If you
1114 do not specify any format parameters, @code{tar} uses default
1115 parameters. You cannot modify a compressed archive. If you create an
1116 archive with the @samp{--block-size} option specified (@pxref{Blocking
1117 Factor}), you must specify that block-size when operating on the
1118 archive. @xref{Matching Format Parameters}, for other examples of
1119 format parameter considerations.
1123 * Multi-Volume Archives::
1126 * Compressed Archives::
1129 @node Multi-Volume Archives, Sparse Files, Format Variations, Format Variations
1130 @subsection Archives Longer than One Tape or Disk
1131 @cindex Multi-volume archives
1133 To create an archive that is larger than will fit on a single unit of
1134 the media, use the @samp{--multi-volume} option in conjunction with the
1135 @samp{tar --create} operation (@pxref{Creating Archives}). A
1136 @dfn{multi-volume} archive can be manipulated like any other archive
1137 (provided the @samp{--multi-volume} option is specified), but is stored
1138 on more than one tape or disk.
1140 When you specify @samp{--multi-volume}, @code{tar} does not report an
1141 error when it comes to the end of an archive volume (when reading), or
1142 the end of the media (when writing). Instead, it prompts you to load
1143 a new storage volume. If the archive is on a magnetic tape, you
1144 should change tapes when you see the prompt; if the archive is on a
1145 floppy disk, you should change disks; etc.
1147 You can read each individual volume of a multi-volume archive as if it
1148 were an archive by itself. For example, to list the contents of one
1149 volume, use @samp{tar --list}, without @samp{--multi-volume} specified.
1150 To extract an archive member from one volume (assuming it is described
1151 that volume), use @samp{tar --extract}, again without
1152 @samp{--multi-volume}.
1154 If an archive member is split across volumes (ie. its entry begins on
1155 one volume of the media and ends on another), you need to specify
1156 @samp{--multi-volume} to extract it successfully. In this case, you
1157 should load the volume where the archive member starts, and use
1158 @samp{tar --extract --multi-volume}---@code{tar} will prompt for later
1159 volumes as it needs them. @xref{Extracting From Archives} for more
1160 information about extracting archives.
1162 @samp{--info-script=@var{program-file}} is like @samp{--multi-volume},
1163 except that @code{tar} does not prompt you directly to change media
1164 volumes when a volume is full---instead, @code{tar} runs commands you
1165 have stored in @var{program-file}. This option can be used to
1166 broadcast messages such as @samp{someone please come change my tape}
1167 when performing unattended backups. When @var{program-file} is done,
1168 @code{tar} will assume that the media has been changed.
1171 <<< There should be a sample program here, including an exit before
1175 @item --multi-volume
1177 Creates a multi-volume archive, when used in conjunction with
1178 @samp{tar --create}. To perform any other operation on a multi-volume
1179 archive, specify @samp{--multi-volume} in conjunction with that
1182 @item --info-script=@var{program-file}
1183 @itemx -F @var{program-file}
1184 Creates a multi-volume archive via a script. Used in conjunction with
1185 @samp{tar --create}.
1188 @node Sparse Files, Blocking Factor, Multi-Volume Archives, Format Variations
1189 @subsection Archiving Sparse Files
1190 @cindex Sparse Files
1192 A file is sparse if it contains blocks of zeros whose existance is
1193 recorded, but that have no space allocated on disk. When you specify
1194 the @samp{--sparse} option in conjunction with the @samp{--create}
1195 operation, @code{tar} tests all files for sparseness while archiving.
1196 If @code{tar} finds a file to be sparse, it uses a sparse
1197 representation of the file in the archive. @xref{Creating Archives},
1198 for more information about creating archives.
1200 @samp{--sparse} is useful when archiving files, such as dbm files,
1201 likely to contain many nulls. This option dramatically
1202 decreases the amount of space needed to store such an archive.
1205 @strong{Please Note:} Always use @samp{--sparse} when performing file
1206 system backups, to avoid archiving the expanded forms of files stored
1207 sparsely in the system.@refill
1209 Even if your system has no no sparse files currently, some may be
1210 created in the future. If you use @samp{--sparse} while making file
1211 system backups as a matter of course, you can be assured the archive
1212 will always take no more space on the media than the files take on
1213 disk (otherwise, archiving a disk filled with sparse files might take
1214 hundreds of tapes).@refill
1215 <<< xref incremental when node name is set.
1218 @code{tar} ignores the @samp{--sparse} option when reading an archive.
1223 Files stored sparsely in the file system are represented sparsely in
1224 the archive. Use in conjunction with write operations.
1227 @node Blocking Factor, Compressed Archives, Sparse Files, Format Variations
1228 @subsection The Blocking Factor of an Archive
1229 @cindex Blocking Factor
1231 @cindex Number of records per block
1232 @cindex Number of bytes per block
1233 @cindex Bytes per block
1234 @cindex Records per block
1236 The data in an archive is grouped into records, which are 512 bytes.
1237 Records are read and written in whole number multiples called
1238 @dfn{blocks}. The number of records in a block (ie. the size of a
1239 block in units of 512 bytes) is called the @dfn{blocking factor}. The
1240 @samp{--block-size=@var{number}} option specifies the blocking factor
1241 of an archive. The default blocking factor is typically 20 (ie.@:
1242 10240 bytes), but can be specified at installation. To find out the
1243 blocking factor of an existing archive, use @samp {tar --list
1244 --file=@var{archive-name}}. This may not work on some devices.
1246 Blocks are seperated by gaps, which waste space on the archive media.
1247 If you are archiving on magnetic tape, using a larger blocking factor
1248 (and therefore larger blocks) provides faster throughput and allows
1249 you to fit more data on a tape (because there are fewer gaps). If you
1250 are archiving on cartridge, a very large blocking factor (say 126 or
1251 more) greatly increases performance. A
1252 smaller blocking factor, on the other hand, may be usefull when
1253 archiving small files, to avoid archiving lots of nulls as @code{tar}
1254 fills out the archive to the end of the block. In general, the ideal block size
1255 depends on the size of the inter-block gaps on the tape you are using,
1256 and the average size of the files you are archiving. @xref{Creating
1257 Archives}, for information on writing archives.
1259 Archives with blocking factors larger than 20 cannot be read by very
1260 old versions of @code{tar}, or by some newer versions of @code{tar}
1261 running on old machines with small address spaces. With GNU
1262 @code{tar}, the blocking factor of an archive is limited only by the
1263 maximum block size of the device containing the archive, or by the
1264 amount of available virtual memory.
1266 If you use a non-default blocking factor when you create an archive,
1267 you must specify the same blocking factor when you modify that
1268 archive. Some archive devices will also require you to specify the
1269 blocking factor when reading that archive, however this is not
1270 typically the case. Usually, you can use @samp{tar --list} without
1271 specifying a blocking factor---@code{tar} reports a non-default block
1272 size and then lists the archive members as it would normally. To
1273 extract files from an archive with a non-standard blocking factor
1274 (particularly if you're not sure what the blocking factor is), you can
1275 usually use the {--read-full-blocks} option while specifying a blocking
1276 factor larger then the blocking factor of the archive (ie. @samp{tar
1277 --extract --read-full-blocks --block-size=300}. @xref{Listing Contents}
1278 for more information on the @samp{--list} operation.
1279 @xref{read-full-blocks} for a more detailed explanation of that
1283 @item --block-size=@var{number}
1284 @itemx -b @var{number}
1285 Specifies the blocking factor of an archive. Can be used with any
1286 operation, but is usually not necessary with @samp{tar --list}.
1289 @node Compressed Archives, , Blocking Factor, Format Variations
1290 @subsection Creating and Reading Compressed Archives
1291 @cindex Compressed archives
1292 @cindex Storing archives in compressed format
1294 @samp{--compress} indicates an archive stored in compressed format.
1295 The @samp{--compress} option is useful in saving time over networks and
1296 space in pipes, and when storage space is at a premium.
1297 @samp{--compress} causes @code{tar} to compress when writing the
1298 archive, or to uncompress when reading the archive.
1300 To perform compression and uncompression on the archive, @code{tar}
1301 runs the @code{compress} utility. @code{tar} uses the default
1302 compression parameters; if you need to override them, avoid the
1303 @samp{--compress} option and run the @code{compress} utility
1304 explicitly. It is useful to be able to call the @code{compress}
1305 utility from within @code{tar} because the @code{compress} utility by
1306 itself cannot access remote tape drives.
1308 The @samp{--compress} option will not work in conjunction with the
1309 @samp{--multi-volume} option or the @samp{--add-file}, @samp{--update},
1310 @samp{--add-file} and @samp{--delete} operations. @xref{Modifying}, for
1311 more information on these operations.
1313 If there is no compress utility available, @code{tar} will report an
1316 @samp{--compress-block} is like @samp{--compress}, but when used in
1317 conjunction with @samp{--create} also causes @code{tar} to pad the last
1318 block of the archive out to the next block boundary as it is written.
1319 This is useful with certain devices which require all write operations
1320 be a multiple of a specific size.
1323 @strong{Please Note:} The @code{compress} program may be covered by a patent,
1324 and therefore we recommend you stop using it. We hope to have a
1325 different compress program in the future. We may change the name of
1326 this option at that time.
1334 When this option is specified, @code{tar} will compress (when writing
1335 an archive), or uncompress (when reading an archive). Used in
1336 conjunction with the @samp{--create}, @samp{--extract}, @samp{--list} and
1337 @samp{--compare} operations.
1339 @item --compress-block
1341 Acts like @samp{--compress}, but pads the archive out to the next block
1342 boundary as it is written when used in conjunction with the
1343 @samp{--create} operation.
1346 @c >>> MIB -- why not use -Z instead of -z -z ? -ringo
1348 @node Reading and Writing, Insuring Accuracy, Archive Structure, Top
1349 @chapter Reading and Writing Archives
1351 The @samp{--create} operation writes a new archive, and the
1352 @samp{--extract} operation reads files from an archive and writes them
1353 into the file system. You can use other @code{tar} operations to
1354 write new information into an existing archive (adding files to it,
1355 adding another archive to it, or deleting files from it), and you can
1356 read a list of the files in an archive without extracting it using the
1357 @samp{--list} operation.
1360 * Archive Name:: The name of an archive
1361 * Creating in Detail:: Creating in detail
1362 * Modifying:: Modifying archives
1363 * Listing Contents:: Listing the contents of an archive
1364 * Extracting From Archives:: Extracting files from an archive
1367 @node Archive Name, Creating in Detail, Reading and Writing, Reading and Writing
1368 @section The Name of an Archive
1369 @cindex Naming an archive
1370 @cindex Archive Name
1371 @cindex Directing output
1372 @cindex Where is the archive?
1374 An archive can be saved as a file in the file system, sent through a
1375 pipe or over a network, or written to an I/O device such as a tape or
1376 disk drive. To specify the name of the archive, use the
1377 @samp{--file=@var{archive-name}} option.
1379 An archive name can be the name of an ordinary file or the name of an
1380 I/O device. @code{tar} always needs an archive name---if you do not
1381 specify an archive name, the archive name comes from the environment
1382 variable @code{TAPE} or, if that variable is not specified, a default
1383 archive name, which is usually the name of tape unit zero (ie.
1386 If you use @file{-} as an @var{archive-name}, @code{tar} reads the
1387 archive from standard input (when listing or extracting files), or
1388 writes it to standard output (when creating an archive). If you use
1389 @file{-} as an @var{archive-name} when modifying an archive,
1390 @code{tar} reads the original archive from its standard input and
1391 writes the entire new archive to its standard output.
1393 @c >>> MIB--does standard input and output redirection work with all
1395 @c >>> need example for standard input and output (screen and keyboard?)
1397 @cindex Standard input and output
1398 @cindex tar to standard input and output
1400 To specify an archive file on a device attached to a remote machine,
1404 --file=@var{hostname}:/@var{dev}/@var{file name}
1408 @code{tar} will complete the remote connection, if possible, and
1409 prompt you for a username and password. If you use
1410 @samp{--file=@@@var{hostname}:/@var{dev}/@var{file-name}}, @code{tar}
1411 will complete the remote connection, if possible, using your username
1412 as the username on the remote machine.
1414 @c >>>MIB --- is this clear?
1417 @item --file=@var{archive-name}
1418 @itemx -f @var{archive-name}
1419 Names the archive to create or operate on. Use in conjunction with
1423 @node Creating in Detail, Modifying, Archive Name, Reading and Writing
1424 @section Creating in Detail
1425 @c operations should probably have examples, not tables.
1426 @cindex Writing new archives
1427 @cindex Archive creation
1429 To create an archive, use @samp{tar --create}. To name the archive,
1430 use @samp{--file=@var{archive-name}} in conjunction with the
1431 @samp{--create} operation (@pxref{Archive Name}). If you do not name
1432 the archive, @code{tar} uses the value of the environment variable
1433 @code{TAPE} as the file name for the archive, or, if that is not
1434 available, @code{tar} uses a default archive name, usually that for tape
1435 unit zero. @xref{Archive Name}, for more information about specifying
1438 The following example creates an archive named @file{stooges},
1439 containing the files @file{larry}, @file{moe} and @file{curley}:
1442 tar --create --file=stooges larry moe curley
1445 If you specify a directory name as a file-name argument, @code{tar}
1446 will archive all the files in that directory. The following example
1447 creates an archive named @file{hail/hail/fredonia}, containing the
1448 contents of the directory @file{marx}:
1451 tar --create --file=hail/hail/fredonia marx
1454 If you don't specify files to put in the archive, @code{tar} archives
1455 all the files in the working directory. The following example creates
1456 an archive named @file{home} containing all the files in the working
1460 tar --create --file=home
1463 @xref{File Name Lists}, for other ways to specify files to archive.
1465 Note: In the example above, an archive containing all the files in the
1466 working directory is being written to the working directory. GNU
1467 @code{tar} stores files in the working directory in an archive which
1468 is itself in the working directory without falling into an infinite
1469 loop. Other versions of @code{tar} may fall into this trap.
1471 @node Modifying, Listing Contents, Creating in Detail, Reading and Writing
1472 @section Modifying Archives
1473 @cindex Modifying archives
1475 Once an archive is created, you can add new archive members to it, add
1476 the contents of another archive, add newer versions of members already
1477 stored, or delete archive members already stored.
1479 To find out what files are already stored in an archive, use @samp{tar
1480 --list --file=@var{archive-name}}. @xref{Listing Contents}.
1484 * Appending Archives::
1485 * Deleting Archive Files:: Deleting Files From an Archive
1486 * Matching Format Parameters::
1489 @node Adding Files, Appending Archives, Modifying, Modifying
1490 @subsection Adding Files to an Archive
1491 @cindex Adding files to an archive
1492 @cindex Updating an archive
1494 To add files to an archive, use @samp{tar --add-file}. The archive to
1495 be added to must already exist and be in proper archive format (which
1496 normally means it was created previously using @code{tar}). If the
1497 archive was created with a different block size than now specified,
1498 @code{tar} will report an error (@pxref{Blocking Factor}). If the
1499 archive is not a valid @code{tar} archive, the results will be
1500 unpredictable. You cannot add files to a compressed archive, however
1501 you can add files to the last volume of a multi-volume archive.
1502 @xref{Matching Format Parameters}.
1504 The following example adds the file @file{shemp} to the archive
1505 @file{stooges} created above:
1508 tar --add-file --file=stooges shemp
1511 You must specify the files to be added; there is no default.
1513 @samp{tar --update} acts like @samp{tar --add-file}, but does not add
1514 files to the archive if there is already a file entry with that name
1515 in the archive that has the same modification time.
1517 Both @samp{--update} and @samp{--add-file} work by adding to the end of
1518 the archive. When you extract a file from the archive, only the
1519 version stored last will wind up in the file system. Because
1520 @samp{tar --extract} extracts files from an archive in sequence, and
1521 overwrites files with the same name in the file system, if a file name
1522 appears more than once in an archive the last version of the file will
1523 overwrite the previous versions which have just been extracted. You
1524 should avoid storing older versions of a file later in the archive.
1526 Note: @samp{--update} is not suitable for performing backups, because
1527 it doesn't change directory content entries, and because it lengthens
1528 the archive every time it is used.
1529 @c <<< xref to scripted backup, listed incremental, for info on backups.
1531 @node Appending Archives, Deleting Archive Files, Adding Files, Modifying
1532 @subsection Appending One Archive's Contents to Another Archive
1533 @cindex Adding archives to an archive
1534 @cindex Concatenating Archives
1536 To append copies of an archive or archives to the end of another
1537 archive, use @samp{tar --add-archive}. The source and target archives
1538 must already exist and have been created using compatable format
1539 parameters (@pxref{Matching Format Parameters}).
1541 @code{tar} will stop reading an archive if it encounters an
1542 end-of-archive marker. The @code{cat} utility does not remove
1543 end-of-archive markers, and is therefore unsuitable for concatenating
1544 archives. @samp{tar --add-archive} removes the end-of-archive marker
1545 from the target archive before each new archive is appended.
1546 @c <<< xref ignore-zeros
1548 You must specify the source archives using
1549 @samp{--file=@var{archive-name}} (@pxref{Archive Name}). If you do not
1550 specify the target archive , @code{tar} uses the value of the
1551 environment variable @code{TAPE}, or, if this has not been set, the
1552 default archive name.
1554 The following example adds the contents of the archive
1555 @file{hail/hail/fredonia} to the archive @file{stooges} (both archives
1556 were created in examples above):
1559 tar --add-archive --file=stooges hail/hail/fredonia
1562 If you need to retrieve files from an archive that was added to using
1563 the @code{cat} utility, use the @samp{--ignore-zeros} option
1564 (@pxref{Archive Reading Options}).
1566 @node Deleting Archive Files, Matching Format Parameters, Appending Archives, Modifying
1567 @subsection Deleting Files From an Archive
1568 @cindex Deleting files from an archive
1569 @cindex Removing files from an archive
1571 To delete archive members from an archive, use @samp{tar --delete}.
1572 You must specify the file names of the members to be deleted. All
1573 archive members with the specified file names will be removed from the
1576 The following example removes the file @file{curley} from the archive
1580 tar --delete --file=stooges curley
1583 You can only use @samp{tar --delete} on an archive if the archive
1584 device allows you to write to any point on the media.
1587 @strong{Warning:} Don't try to delete an archive member from a
1588 magnetic tape, lest you scramble the archive. There is no safe way
1589 (except by completely re-writing the archive) to delete files from
1590 most kinds of magnetic tape.
1593 @c <<< MIB -- how about automatic detection of archive media? give error
1594 @c <<< unless the archive device is either an ordinary file or different
1595 @c <<< input and output (--file=-).
1597 @node Matching Format Parameters, , Deleting Archive Files, Modifying
1598 @subsection Matching the Format Parameters
1600 Some format parameters must be taken into consideration when modifying
1603 Compressed archives cannot be modified.
1605 You have to specify the block size of the archive when modifying an
1606 archive with a non-default block size.
1608 Multi-volume archives can be modified like any other archive. To add
1609 files to a multi-volume archive, you need to only mount the last
1610 volume of the archive media (and new volumes, if needed). For all
1611 other operations, you need to use the entire archive.
1613 If a multi-volume archive was labeled using @samp{--label}
1614 (@pxref{Archive Label}) when it was created, @code{tar} will not
1615 automatically label volumes which are added later. To label
1616 subsequent volumes, specify @samp{--label=@var{archive-label}} again in
1617 conjunction with the @samp{--add-file}, @samp{--update} or
1618 @samp{--add-archive} operation.
1619 @cindex Labelling multi-volume archives
1622 @c <<< xref somewhere, for more information about format parameters.
1624 @node Listing Contents, Extracting From Archives, Modifying, Reading and Writing
1625 @section Listing the Contents of an Archive
1626 @cindex Names of the files in an archive
1627 @cindex Archive contents, list of
1628 @cindex Archive members, list of
1630 @samp{tar --list} prints a list of the file names of the archive
1631 members on the standard output. If you specify @var{file-name}
1632 arguments on the command line (or using the @samp{--files-from} option,
1633 @pxref{File Name Lists}), only the files you specify will be listed,
1634 and only if they exist in the archive. Files not specified will be
1635 ignored, unless they are under a specific directory.
1637 If you include the @samp{--verbose} option, @code{tar} prints an
1638 @samp{ls -l} type listing for the archive. @pxref{Additional
1639 Information}, for a description of the @samp{--verbose} option.
1641 If the blocking factor of the archive differs from the default,
1642 @code{tar} reports this. @xref{Blocking Factor}.
1644 @xref{Archive Reading Options} for a list of options which can be used
1645 to modify @samp{--list}'s operation.
1647 This example prints a list of the archive members of the archive
1651 tar --list --file=stooges
1655 @code{tar} responds:
1666 This example generates a verbose list of the archive members of the
1667 archive file @file{dwarves}, which has a blocking factor of two:
1670 tar --list -v --file=blocks
1674 @code{tar} responds:
1677 tar: Blocksize = 2 records
1678 -rw------- ringo/user 42 May 1 13:29 1990 .bashful
1679 -rw-rw-rw- ringo/user 42 Oct 4 13:29 1990 doc
1680 -rw-rw-rw- ringo/user 42 Jul 20 18:01 1969 dopey
1681 -rw-rw---- ringo/user 42 Nov 26 13:42 1963 grumpy
1682 -rw-rw-rw- ringo/user 42 May 5 13:29 1990 happy
1683 -rw-rw-rw- ringo/user 42 May 1 12:00 1868 sleepy
1684 -rw-rw-rw- ringo/user 42 Jul 4 17:29 1776 sneezy
1687 @node Extracting From Archives, , Listing Contents, Reading and Writing
1688 @section Extracting Files from an Archive
1690 @cindex Retrieving files from an archive
1691 @cindex Resurrecting files from an archive
1693 To read archive members from the archive and write them into the file
1694 system, use @samp{tar --extract}. The archive itself is left
1697 If you do not specify the files to extract, @code{tar} extracts all
1698 the files in the archive. If you specify the name of a directory as a
1699 file-name argument, @code{tar} will extract all files which have been
1700 stored as part of that directory. If a file was stored with a
1701 directory name as part of its file name, and that directory does not
1702 exist under the working directory when the file is extracted,
1703 @code{tar} will create the directory. @xref{Selecting Archive
1704 Members}, for information on specifying files to extract.
1706 The following example shows the extraction of the archive
1707 @file{stooges} into an empty directory:
1710 tar --extract --file=stooges
1714 Generating a listing of the directory (@samp{ls}) produces:
1724 The subdirectory @file{marx} contains the files @file{julius},
1725 @file{alexander} and @file{karl}.
1727 If you wanted to just extract the files in the subdirectory
1728 @file{marx}, you could specify that directory as a file-name argument
1729 in conjunction with the @samp{--extract} operation:
1732 tar --extract --file=stooges marx
1736 @strong{Warning:} Extraction can overwrite files in the file system.
1737 To avoid losing files in the file system when extracting files from
1738 the archive with the same name, use the @samp{--keep-old-files} option
1739 (@pxref{File Writing Options}).
1742 If the archive was created using @samp{--block-size}, @samp{--compress}
1743 or @samp{--multi-volume}, you must specify those format options again
1744 when extracting files from the archive (@pxref{Format Variations}).
1747 * Archive Reading Options::
1748 * File Writing Options::
1749 * Scarce Disk Space:: Recovering From Scarce Disk Space
1752 @node Archive Reading Options, File Writing Options, Extracting From Archives, Extracting From Archives
1753 @subsection Options to Help Read Archives
1754 @cindex Options when reading archives
1755 @cindex Reading incomplete blocks
1756 @cindex Blocks, incomplete
1757 @cindex End of archive markers, ignoring
1758 @cindex Ignoring end of archive markers
1759 @cindex Large lists of file names on small machines
1760 @cindex Small memory
1761 @cindex Running out of space
1763 @c <<< each option wants its own node. summary after menu
1765 Normally, @code{tar} will request data in full block increments from
1766 an archive storage device. If the device cannot return a full block,
1767 @code{tar} will report an error. However, some devices do not always
1768 return full blocks, or do not require the last block of an archive to
1769 be padded out to the next block boundary. To keep reading until you
1770 obtain a full block, or to accept an incomplete block if it contains
1771 an end-of-archive marker, specify the @samp{--read-full-blocks} option
1772 in conjunction with the @samp{--extract} or @samp{--list} operations.
1773 @xref{Listing Contents}.
1775 The @samp{--read-full-blocks} option is turned on by default when
1776 @code{tar} reads an archive from standard input, or from a remote
1777 machine. This is because on BSD Unix systems, attempting to read a
1778 pipe returns however much happens to be in the pipe, even if it is
1779 less than was requested. If this option were not enabled, @code{tar}
1780 would fail as soon as it read an incomplete block from the pipe.
1782 If you're not sure of the blocking factor of an archive, you can read
1783 the archive by specifying @samp{--read-full-blocks} and
1784 @samp{--block-size=@var{n}}, where @var{n} is a blocking factor larger
1785 than the blocking factor of the archive. This lets you avoid having
1786 to determine the blocking factor of an archive. @xref{Blocking
1790 @item --read-full-blocks
1792 Use in conjunction with @samp{tar --extract} to read an archive which
1793 contains incomplete blocks, or one which has a blocking factor less
1794 than the one specified.
1797 Normally @code{tar} stops reading when it encounters a block of zeros
1798 between file entries (which usually indicates the end of the archive).
1799 @samp{--ignore-zeros} allows @code{tar} to completely read an archive
1800 which contains a block of zeros before the end (i.e.@: a damaged
1801 archive, or one which was created by @code{cat}-ing several archives
1804 The @samp{--ignore-zeros} option is turned off by default because many
1805 versions of @code{tar} write garbage after the end of archive entry,
1806 since that part of the media is never supposed to be read. GNU
1807 @code{tar} does not write after the end of an archive, but seeks to
1808 maintain compatablity among archiving utilities.
1811 @item --ignore-zeros
1813 To ignore blocks of zeros (ie.@: end-of-archive entries) which may be
1814 encountered while reading an archive. Use in conjunction with
1815 @samp{tar --extract} or @samp{tar --list}.
1818 If you are using a machine with a small amount of memory, and you need
1819 to process large list of file-names, you can reduce the amount of
1820 space @code{tar} needs to process the list. To do so, specify the
1821 @samp{--same-order} option and provide an ordered list of file names.
1822 This option tells @code{tar} that the @file{file-name} arguments
1823 (provided on the command line, or read from a file using the
1824 @samp{--files-from} option) are listed in the same order as the files
1827 You can create a file containing an ordered list of files in the
1828 archive by storing the output produced by @samp{tar --list
1829 --file=@var{archive-name}}. @xref{Listing Contents}, for information
1830 on the @samp{--list} operation.
1832 This option is probably never needed on modern computer systems.
1836 @itemx --preserve-order
1838 To process large lists of file-names on machines with small amounts of
1839 memory. Use in conjunction with @samp{tar --compare}, @samp{tar --list}
1840 or @samp{tar --extract}.
1843 @c we don't need/want --preserve to exist any more
1845 @node File Writing Options, Scarce Disk Space, Archive Reading Options, Extracting From Archives
1846 @subsection Changing How @code{tar} Writes Files
1847 @c <<< find a better title
1848 @cindex Overwriting old files, prevention
1849 @cindex Protecting old files
1850 @cindex Modification times of extracted files
1851 @cindex Permissions of extracted files
1852 @cindex Modes of extracted files
1853 @cindex Writing extracted files to standard output
1854 @cindex Standard output, writing extracted files to
1856 Normally, @code{tar} writes extracted files into the file system
1857 without regard to the files already on the system---files with the
1858 same name as archive members are overwritten. To prevent @code{tar}
1859 from extracting an archive member from an archive, if doing so will
1860 overwrite a file in the file system, use @samp{--keep-old-files} in
1861 conjunction with the @samp{--extract} operation. When this option is
1862 specified, @code{tar} reports an error stating the name of the files
1863 in conflict, instead of writing the file from the archive.
1866 @item --keep-old files
1868 Prevents @code{tar} from overwriting files in the file system during
1872 Normally, @code{tar} sets the modification times of extracted files to
1873 the modification times recorded for the files in the archive, but
1874 limits the permissions of extracted files by the current @code{umask}
1877 To set the modification times of extracted files to the time when
1878 the files were extracted, use the @samp{--modification-time} option in
1879 conjunction with @samp{tar --extract}.
1882 @item --modification-time
1884 Sets the modification time of extracted archive members to the time
1885 they were extracted, not the time recorded for them in the archive.
1886 Use in conjunction with @samp{--extract}.
1889 To set the modes (access permissions) of extracted files to those
1890 recorded for those files in the archive, use the
1891 @samp{--preserve-permissions} option in conjunction with the
1892 @samp{--extract} operation.
1893 @c <<<mib --- should be aliased to ignore-umask.
1896 @item --preserve-permission
1897 @itemx --same-permission
1898 @itemx --ignore-umask
1900 Set modes of extracted archive members to those recorded in the
1901 archive, instead of current umask settings. Use in conjunction with
1905 @c <<< following paragraph needs to be rewritten:
1906 @c <<< why doesnt' this cat files together, why is this useful. is it
1907 @c <<< really useful with more than one file?
1908 To write the files extracted to the standard output, instead of
1909 creating the files on the file system, use @samp{--to-stdout} in
1910 conjunction with @samp{tar --extract}. This option is useful if you
1911 are extracting files to send them through a pipe, and do not need to
1912 preserve them in the file system.
1917 Writes files to the standard output. Used in conjunction with
1921 @c <<< why would you want to do such a thing, how are files separated on
1922 @c <<< the standard output? is this useful with more that one file? are
1923 @c <<< pipes the real reason?
1925 @node Scarce Disk Space, , File Writing Options, Extracting From Archives
1926 @subsection Recovering From Scarce Disk Space
1927 @cindex Middle of the archive, starting in the
1928 @cindex Running out of space during extraction
1929 @cindex Disk space, running out of
1930 @cindex Space on the disk, recovering from lack of
1932 If a previous attempt to extract files failed due to lack of disk
1933 space, you can use @samp{--starting-file=@var{file-name}} to start
1934 extracting only after file @var{file-name} when extracting files from
1935 the archive. This assumes, of course, that there is now free space,
1936 or that you are now extracting into a different file system.
1939 @item --starting-file=@var{file-name}
1940 @itemx -K @var{file-name}
1941 Starts an operation in the middle of an archive. Use in conjunction
1942 with @samp{--extract} or @samp{--list}.
1945 If you notice you are running out of disk space during an extraction
1946 operation, you can also suspend @code{tar}, remove unnecessary files
1947 from the file system, and then restart the same @code{tar} operation.
1948 In this case, @samp{--starting-file} is not necessary.
1950 @c <<< xref incremental, xref --interactive, xref --exclude
1952 @node Insuring Accuracy, Selecting Archive Members, Reading and Writing, Top
1953 @chapter Insuring the Accuracy of an Archive
1955 You can insure the accuracy of an archive by comparing files in the
1956 system with archive members. @code{tar} can compare an archive to the
1957 file system as the archive is being written, to verify a write
1958 operation, or can compare a previously written archive, to insure that
1962 * Write Verification::
1966 @node Write Verification, Comparing, Insuring Accuracy, Insuring Accuracy
1967 @section Verifying Data as It is Stored
1968 @cindex Verifying a write operation
1969 @cindex Double-checking a write operation
1971 To check for discrepancies in an archive immediately after it is
1972 written, use the @samp{--verify} option in conjunction with the
1973 @samp{tar --create} operation. When this option is specified,
1974 @code{tar} checks archive members against their counterparts in the file
1975 system, and reports discrepancies on the standard error. In
1976 multi-volume archives, each volume is verified after it is written,
1977 before the next volume is written.
1979 To verify an archive, you must be able to read it from before the end
1980 of the last written entry. This option is useful for detecting data
1981 errors on some tapes. Archives written to pipes, some cartridge tape
1982 drives, and some other devices cannot be verified.
1987 Checks for discrepancies in the archive immediately after it is
1988 written. Use in conjunction with @samp{tar --create}.
1991 @node Comparing, , Write Verification, Insuring Accuracy
1992 @section Comparing an Archive with the File System
1993 @cindex Verifying the currency of an archive
1995 @samp{tar --compare} compares archive members in an existing archive
1996 with their counterparts in the file system, and reports differences in
1997 file size, mode, owner, modification date and contents. If a file is
1998 represented in the archive but does not exist in the file system,
1999 @code{tar} reports a difference.
2001 If you use @var{file-name} arguments in conjunction with @samp{tar
2002 --compare}, @code{tar} compares the archived versions of the files
2003 specified with their counterparts in the file system. If you specify
2004 a file that is not in the archive, @code{tar} will report an error. If
2005 you don't specify any files, @code{tar} compares all the files in the
2008 Because @code{tar} only checks files in the archive against files in
2009 the file system, and not vice versa, it ignores files in the file
2010 system that do not exist in the archive.
2012 The following example compares the archive members @file{larry},
2013 @file{moe} and @file{curly} in the archive @file{stooges} with files
2014 of the same name in the file system.
2017 tar --compare --file=stooges larry moe curly
2021 If a file, for example @file{curly}, did not exist in the archive,
2022 @code{tar} would report an error, as follows:
2025 curly: does not exist
2028 @node Selecting Archive Members, User Interaction, Insuring Accuracy, Top
2029 @chapter Selecting Archive Members
2030 @cindex Specifying files to act on
2031 @cindex Specifying archive members
2033 @dfn{File-name arguments} specify which files in the file system
2034 @code{tar} operates on, when creating or adding to an archive, or
2035 which archive members @code{tar} operates on, when reading or
2036 deleting from an archive. (@pxref{Reading and Writing}.)
2038 To specify file names, you can include them as the last arguments on
2039 the command line, as follows:
2041 tar @var{operation} [@var{option1} @var{option2} ..] [@var{file-name-1} @var{file-name-2} ...]
2044 If you specify a directory name as a file name argument, all the files
2045 in that directory are operated on by @code{tar}.
2047 If you do not specify files when @code{tar} is invoked, @code{tar}
2048 operates on all the non-directory files in the working directory (if
2049 the operation is @samp{--create}), all the archive members in the
2050 archive (if a read operation is specified), or does nothing (if any
2051 other operation is specified).
2054 * File Name Lists:: Reading File Names from a File
2055 * File Name Interpretation:: this needs a better title
2056 * File Exclusion:: so does this
2059 @node File Name Lists, File Name Interpretation, Selecting Archive Members, Selecting Archive Members
2060 @section Reading a List of File Names from a File
2061 @cindex Lists of file names
2062 @cindex File-name arguments, alternatives
2064 To read file names from a file on the file system, instead of from the
2065 command line, use the @samp{--files-from=@var{file}} option. If you
2066 specify @samp{-} as @var{file}, the file names are read from standard
2067 input. Note that using both @samp{--files-from=-} and @samp{--file=-}
2068 in the same command will not work unless the operation is
2069 @samp{--create}. @xref{Archive Name}, for an explanation of the
2070 @samp{--file} option.
2073 @item --files-from=@var{file}
2074 @itemx -T @var{file}
2075 Reads file-name arguments from a file on the file system, instead of
2076 from the command line. Use in conjunction with any operation.
2079 @node File Name Interpretation, File Exclusion, File Name Lists, Selecting Archive Members
2080 @section File Name Interpretation
2081 @cindex File Names, interpreting
2083 @c <<<<add some text -ringo
2086 * Absolute File Names::
2087 * Changing Working Directory::
2088 * Archiving with Symbolic Links:: Archiving Using Symbolic Links
2091 @node Absolute File Names, Changing Working Directory, File Name Interpretation, File Name Interpretation
2092 @subsection Storing and Extracting Files Relative to Root
2094 @c <<< is this what this does, or does it just preserve the slash?
2095 @c <<< is it still called --absolute-paths?
2097 @c To archive or extract files relative to the root directory, specify
2098 @c the @samp{--absolute-paths} option.
2100 @c Normally, @code{tar} acts on files relative to the working
2101 @c directory---ignoring superior directory names when archiving, and
2102 @c ignoring leading slashes when extracting.
2104 @c When you specify @samp{--absolute-paths}, @code{tar} stores file names
2105 @c including all superior directory names, and preserves leading slashes.
2106 @c If you only invoked @code{tar} from the root directory you would never
2107 @c need the @samp{--absolute-paths} option, but using this option may be
2108 @c more convenient than switching to root.
2110 @c >>> should be an example in the tutorial/wizardry section using this
2111 @c >>> to transfer files between systems.
2113 @c >>> is write access an issue?
2116 @item --absolute-paths
2117 Preserves full file names (inclusing superior dirctory names) when
2118 archiving files. Preserves leading slash when extracting files.
2121 @node Changing Working Directory, Archiving with Symbolic Links, Absolute File Names, File Name Interpretation
2122 @subsection Changing the Working Directory Within a List of File-names
2123 @cindex Directory, changing in mid-stream
2124 @cindex Working directory, specifying
2126 To change working directory in the middle of a list of file names,
2127 (either on the command line or in a file specified using
2128 @samp{--files-from}), use @samp{--directory=@var{directory}}. This will
2129 change the working directory to the directory @var{directory} after
2130 that point in the list. For example,
2133 tar --create iggy ziggy --directory=baz melvin
2137 will place the files @file{iggy} and @file{ziggy} from the current
2138 directory into the archive, followed by the file @file{melvin} from
2139 the directory @file{baz}. This option is especially useful when you
2140 have several widely separated files that you want to store in the same
2141 directory in the archive.
2143 Note that the file @file{melvin} is recorded in the archive under the
2144 precise name @file{melvin}, @emph{not} @file{baz/melvin}. Thus, the
2145 archive will contain three files that all appear to have come from the
2146 same directory; if the archive is extracted with plain @samp{tar
2147 --extract}, all three files will be written in the current directory.
2149 Contrast this with the command
2152 tar -c iggy ziggy bar/melvin
2156 which records the third file in the archive under the name
2157 @file{bar/melvin} so that, if the archive is extracted using @samp{tar
2158 --extract}, the third file will be written in a subdirectory named
2162 @item --directory=@file{directory}
2163 @itemx -C @file{directory}
2164 Changes the working directory.
2167 @c <<<need to test how extract deals with this, and add an example -ringo
2169 @node Archiving with Symbolic Links, , Changing Working Directory, File Name Interpretation
2170 @subsection Archiving Using Symbolic Links
2171 @cindex File names, using symbolic links
2172 @cindex Symbolic link as file name
2174 @samp{--dereference} is used with @samp{tar --create}, and causes
2175 @code{tar} to archive files which are referenced by a symbolic link,
2176 using the name of the link as the file name.
2178 <<<this needs to be checked by MIB and then re-written, with an example
2179 The name under which the file is stored in the file system is not
2180 recorded in the archive. To record both the symbolic link name and
2181 the file name in the system, archive the file under both names. If
2182 all links were recorded automatically by @code{tar}, an extracted file
2183 might be linked to a file name that no longer exists in the file
2186 @c <<< is the following still true? - ringo
2187 If a linked-to file is encountered again by @code{tar} while creating
2188 the same archive, an entire second copy of it will be stored. This
2189 could be considered a bug.
2194 Stores files referenced by a symbolic link, using the name of the link
2195 as the file name. Use in conjunction with any write operation.
2198 @node File Exclusion, , File Name Interpretation, Selecting Archive Members
2199 @section Selecting Files by Characteristic
2200 @cindex File names, excluding files by
2201 @cindex Excluding files by name and pattern
2202 @cindex Excluding files by file system
2203 @cindex File system boundaries, not crossing
2204 @cindex Excluding file by age
2205 @cindex Modification time, excluding files by
2206 @cindex Age, excluding files by
2208 To avoid crossing file system boundaries when archiving parts of a
2209 directory tree, use @samp{--one-file-system}. This option only affects
2210 files that are archived because they are in a directory that is being
2211 archived; files explicitly named on the command line are archived
2212 regardless of where they reside.
2214 This option is useful for making full or incremental archival backups
2217 If this option is used in conjunction with @samp{--verbose}, files that
2218 are excluded are mentioned by name on the standard error.
2221 @item --one-file-system
2223 Prevents @code{tar} from crossing file system boundaries when
2224 archiving. Use in conjunction with any write operation.
2227 To avoid operating on files whose names match a particular pattern,
2228 use the @samp{--exclude=@var{pattern}} or
2229 @samp{--exclude-from=@var{file}} options.
2231 When you specify the @samp{--exclude=@var{pattern}} option, @code{tar}
2232 ignores files which match the @var{pattern}, which can be a single
2233 file name or a more complex expression. Thus, if you invoke
2234 @code{tar} with @samp{tar --create --exclude=*.o}, no files whose names
2235 end in @file{.o} are included in the archive.
2236 @c <<< what other things can you use besides "*"?
2238 @samp{--exclude-from=@var{file}} acts like @samp{--exclude}, but
2239 specifies a file @var{file} containing a list of patterns. @code{tar}
2240 ignores files with names that fit any of these patterns.
2242 You can use either option more than once in a single command.
2245 @item --exclude=@var{pattern}
2246 Causes @code{tar} to ignore files that match the @var{pattern}.
2248 @item --exclude-from=@var{file}
2249 Causes @code{tar} to ignore files that match the patterns listed in
2252 @c --exclude-from used to be "--exclude", --exclude didn't used to exist.
2254 To operate only on files with modification or status-change times
2255 after a particular date, use @samp{--after-date=@var{date}}. You can
2256 use this option with @samp{tar --create} or @samp{tar --add-file} to
2257 insure only new files are archived, or with @samp{tar --extract} to
2258 insure only recent files are resurrected. @refill
2259 @c --after-date @var{date} or --newer @var{date}
2261 @samp{--newer-mtime=@var{date}} acts like @samp{--after-date=@var{date}},
2262 but tests just the modification times of the files, ignoring
2263 status-change times.
2265 @c <<<need example of --newer-mtime with quoted argument
2266 Remember that the entire date argument should be quoted if it contains
2270 @strong{Please Note:} @samp{--after-date} and @samp{--newer-mtime}
2271 should not be used for incremental backups. Some files (such as those
2272 in renamed directories) are not selected up properly by these options.
2273 @c xref to incremental backup chapter when node name is decided.
2276 @item --after-date=@var{date}
2277 @itemx --newer=@var{date}
2278 @itemx -N @var{date}
2279 Acts on files only if their modification or inode-changed times are
2280 later than @var{date}. Use in conjunction with any operation.
2281 @item --newer-mtime=@var{date}
2282 Acts like @samp{--after-date}, but only looks at modification times.
2285 @c <<< following is the getdate date format --- needs to be re-written,
2286 @c <<< made a sub-node:
2288 Time/Date Formats Accepted by getdate
2289 (omitting obscure constructions)
2291 The input consists of one or more of: time zone day date year
2294 Those in turn consist of (`|' and `/' mean `or', `[]' means `optional'):
2296 time: H am/pm | H:M [am/pm] | H:M:S [am/pm]
2297 zone: timezone-name | timezone-name dst
2298 day: day-name | day-name, | N day-name
2299 date: M/D | M/D/Y | month-name D | month-name D, Y | D month-name | D month-name Y
2302 am can also be a.m., pm can also be p.m.
2303 case and spaces around punctuation are not significant.
2304 month and day names can be abbreviated. >>>
2306 @node User Interaction, Backups and Restoration, Selecting Archive Members, Top
2307 @chapter User Interaction
2308 @cindex Getting more information during the operation
2309 @cindex Information during operation
2310 @cindex Feedback from @code{tar}
2312 Once you have typed a @code{tar}command, it is usually performed
2313 without any further information required of the user, or provided by
2314 @code{tar}. The following options allow you to generate progress and
2315 status information during an operation, or to confirm operations on
2316 files as they are performed.
2319 * Additional Information::
2320 * Interactive Operation::
2323 @node Additional Information, Interactive Operation, User Interaction, User Interaction
2324 @section Progress and Status Information
2325 @cindex Progress information
2326 @cindex Status information
2327 @cindex Information on progress and status of operations
2328 @cindex Verbose operation
2329 @cindex Record number where error occured
2330 @cindex Error message, record number of
2331 @cindex Version of the @code{tar} program
2333 Typically, @code{tar} performs most operations without reporting any
2334 information to the user except error messages. If you have
2335 encountered a problem when operating on an archive, however, you may
2336 need more information than just an error message in order to solve the
2337 problem. The following options can be helpful diagnostic tools.
2339 When used with most operations, @samp{--verbose} causes @code{tar} to
2340 print the file names of the files or archive members it is operating
2341 on. When used with @samp{tar --list}, the verbose option causes
2342 @code{tar} to print out an @samp{ls -l} type listing of the files in
2345 Verbose output appears on the standard output except when an archive
2346 is being written to the standard output (as with @samp{tar --create
2347 --file=- --verbose}). In that case @code{tar} writes verbose output to
2348 the standard error stream.
2353 Prints the names of files or archive members as they are being
2354 operated on. Can be used in conjunction with any operation. When
2355 used with @samp{--list}, generates an @samp{ls -l} type listing.
2358 To find out where in an archive a message was triggered, use
2359 @samp{--record-number}. @samp{--record-number} causes @code{tar} to
2360 print, along with every message it produces, the record number within
2361 the archive where the message was triggered.
2363 This option is especially useful when reading damaged archives, since
2364 it helps pinpoint the damaged sections. It can also be used with
2365 @samp{tar --list} when listing a file-system backup tape, allowing you
2366 to choose among several backup tapes when retrieving a file later, in
2367 favor of the tape where the file appears earliest (closest to the
2369 @c <<< xref when the node name is set and the backup section written
2372 @item --record-number
2374 Prints the record number whenever a message is generated by
2375 @code{tar}. Use in conjunction with any operation.
2379 To print the version number of the @code{tar} program, use @samp{tar
2380 --version}. @code{tar} prints the version number to the standard
2391 GNU tar version 1.09
2393 @c used to be an option. has been fixed.
2395 @node Interactive Operation, , Additional Information, User Interaction
2396 @section Asking for Confirmation During Operations
2397 @cindex Interactive operation
2399 Typically, @code{tar} carries out a command without stopping for
2400 further instructions. In some situations however, you
2401 may want to exclude some files and archive members from the operation
2402 (for instance if disk or storage space is tight). You can do this by
2403 excluding certain files automatically (@pxref{File Exclusion}), or by
2404 performing an operation interactively, using the @samp{--interactive}
2407 When the @samp{--interactive} option is specified, @code{tar} asks for
2408 confirmation before reading, writing, or deleting each file it
2409 encounters while carrying out an operation. To confirm the action you
2410 must type a line of input beginning with @samp{y}. If your input line
2411 begins with anything other than @samp{y}, @code{tar} skips that file.
2413 Commands which might be useful to perform interactively include
2414 appending files to an archive, extracting files from an archive,
2415 deleting a file from an archive, and deleting a file from disk during
2416 an incremental restore.
2418 If @code{tar} is reading the archive from the standard input,
2419 @code{tar} opens the file @file{/dev/tty} to support the interactive
2421 <<< this aborts if you won't OK the working directory. this is a bug. -ringo
2425 @itemx --confirmation
2427 Asks for confirmation before reading, writing or deleting an archive
2428 member (when listing, comparing or writing an archive or deleting
2429 archive members), or before writing or deleting a file (when
2430 extracting an archive).
2433 @node Backups and Restoration, Media, User Interaction, Top
2434 @chapter Performing Backups and Restoring Files
2436 To @dfn{back up} a file system means to create archives that contain
2437 all the files in that file system. Those archives can then be used to
2438 restore any or all of those files (for instance if a disk crashes or a
2439 file is accidently deleted). File system @dfn{backups} are also
2443 * Backup Levels:: Levels of backups
2444 * Backup Scripts:: Using scripts to perform backups
2446 * incremental and listed-incremental:: The --incremental
2447 and --listed-incremental Options
2448 * Problems:: Some common problems and their solutions
2451 @node Backup Levels, Backup Scripts, Backups and Restoration, Backups and Restoration
2452 @section Levels of Backups
2454 An archive containing all the files in the file system is called a
2455 @dfn{full backup} or @dfn{full dump}. You could insure your data by
2456 creating a full dump every day. This strategy, however, would waste a
2457 substantial amount of archive media and user time, as unchanged files
2458 are daily re-archived.
2460 It is more efficient to do a full dump only occasionally. To back up
2461 files between full dumps, you can a incremental dump. A @dfn{level
2462 one} dump archives all the files that have changed since the last full
2465 A typical dump strategy would be to perform a full dump once a week,
2466 and a level one dump once a day. This means some versions of files
2467 will in fact be archived more than once, but this dump strategy makes
2468 it possible to restore a file system to within one day of accuracy by
2469 only extracting two archives---the last weekly (full) dump and the
2470 last daily (level one) dump. The only information lost would be in
2471 files changed or created since the last daily backup. (Doing dumps
2472 more than once a day is usually not worth the trouble).
2474 @node Backup Scripts, incremental and listed-incremental, Backup Levels, Backups and Restoration
2475 @section Using Scripts to Perform Backups and Restoration
2477 GNU @code{tar} comes with scripts you can use to do full and level-one
2478 dumps. Using scripts (shell programs) to perform backups and
2479 restoration is a convenient and reliable alternative to typing out
2480 file name lists and @code{tar} commands by hand.
2482 Before you use these scripts, you need to edit the file
2483 @file{backup-specs}, which specifies parameters used by the backup
2484 scripts and by the restore script. @xref{Script Syntax}.
2485 Once the backup parameters are set, you can perform backups or
2486 restoration by running the appropriate script.
2488 The name of the restore script is @code{restore}. The names of the
2489 level one and full backup scripts are, respectively, @code{level-1} and
2490 @code{level-0}. The @code{level-0} script also exists under the name
2491 @code{weekly}, and the @code{level-1} under the name
2492 @code{daily}---these additional names can be changed according to your
2493 backup schedule. @xref{Scripted Restoration}, for more information
2494 on running the restoration script. @xref{Scripted Backups}, for more
2495 information on running the backup scripts.
2497 @emph{Please Note:} The backup scripts and the restoration scripts are
2498 designed to be used together. While it is possible to restore files
2499 by hand from an archive which was created using a backup script, and
2500 to create an archive by hand which could then be extracted using the
2501 restore script, it is easier to use the scripts. @xref{incremental
2502 and listed-incremental}, before making such an attempt.
2504 @c shorten node names
2506 * Backup Parameters:: Setting parameters for backups and restoration
2507 * Scripted Backups:: Using the backup scripts
2508 * Scripted Restoration:: Using the restore script
2511 @node Backup Parameters, Scripted Backups, Backup Scripts, Backup Scripts
2512 @subsection Setting Parameters for Backups and Restoration
2514 The file @file{backup-specs} specifies backup parameters for the
2515 backup and restoration scripts provided with @code{tar}. You must
2516 edit @file{backup-specs} to fit your system configuration and schedule
2517 before using these scripts.
2519 @c <<< This about backup scripts needs to be written:
2520 @c <<<BS is a shell script .... thus ... @file{backup-specs} is in shell
2521 @c script syntax. @xref{Script Syntax}, for an explanation of this
2524 @c whats a parameter .... looked at by the backup scripts ... which will
2525 @c be expecting to find ... now syntax ... value is linked to lame ...
2526 @c @file{backup-specs} specifies the following parameters:
2531 The user name of the backup administrator.
2534 The hour at which the backups are done. This can be a number from 0
2535 to 23, or the string @samp{now}.
2538 The device @code{tar} writes the archive to. This device should be
2539 attached to the host on which the dump scripts are run.
2540 @c <<< examples for all ...
2543 The command to use to obtain the status of the archive device,
2544 including error count. On some tape drives there may not be such a
2545 command; in that case, simply use `TAPE_STATUS=false'.
2548 The blocking factor @code{tar} will use when writing the dump archive.
2549 @xref{Blocking Factor}.
2552 A list of file systems to be dumped. You can include any directory
2553 name in the list---subdirectories on that file system will be
2554 included, regardless of how they may look to other networked machines.
2555 Subdirectories on other file systems will be ignored.
2557 The host name specifies which host to run @code{tar} on, and should
2558 normally be the host that actually contains the file system. However,
2559 the host machine must have GNU @code{tar} installed, and must be able
2560 to access the directory containing the backup scripts and their
2561 support files using the same file name that is used on the machine
2562 where the scripts are run (ie. what @code{pwd} will print when in that
2563 directory on that machine). If the host that contains the file system
2564 does not have this capability, you can specify another host as long as
2565 it can access the file system through NFS.
2568 A list of individual files to be dumped. These should be accessible
2569 from the machine on which the backup script is run.
2570 @c <<<same file name, be specific. through nfs ...
2574 * backup-specs example:: An Example Text of @file{Backup-specs}
2575 * Script Syntax:: Syntax for @file{Backup-specs}
2578 @node backup-specs example, Script Syntax, Backup Parameters, Backup Parameters
2579 @subsubsection An Example Text of @file{Backup-specs}
2581 The following is the text of @file{backup-specs} as it appears at FSF:
2584 # site-specific parameters for file system backup.
2586 ADMINISTRATOR=friedman
2588 TAPE_FILE=/dev/nrsmt0
2589 TAPE_STATUS="mts -t $TAPE_FILE"
2604 apple-gunkies:/com/mailer/gnu
2605 apple-gunkies:/com/archive/gnu"
2607 BACKUP_FILES="/com/mailer/aliases /com/mailer/league*[a-z]"
2611 @node Script Syntax, , backup-specs example, Backup Parameters
2612 @subsubsection Syntax for @file{Backup-specs}
2614 @file{backup-specs} is in shell script syntax. The following
2615 conventions should be considered when editing the script:
2616 @c <<< "conventions?"
2618 A quoted string is considered to be contiguous, even if it is on more
2619 than one line. Therefore, you cannot include commented-out lines
2620 within a multi-line quoted string. BACKUP_FILES and BACKUP_DIRS are
2621 the two most likely parameters to be multi-line.
2623 A quoted string typically cannot contain wildcards. In
2624 @file{backup-specs}, however, the parameters BACKUP_DIRS and
2625 BACKUP_FILES can contain wildcards.
2627 @node Scripted Backups, Scripted Restoration, Backup Parameters, Backup Scripts
2628 @subsection Using the Backup Scripts
2630 The syntax for running a backup script is:
2633 @file{script-name} [@var{time-to-be-run}]
2636 where @var{time-to-be-run} can be a specific system time, or can be
2637 @kbd{now}. If you do not specify a time, the script runs at the time
2638 specified in @file{backup-specs} (@pxref{Script Syntax}).
2640 You should start a script with a tape or disk mounted. Once you start
2641 a script, it prompts you for new tapes or disks as it needs them.
2642 Media volumes don't have to correspond to archive files---a
2643 multi-volume archive can be started in the middle of a tape that
2644 already contains the end of another multi-volume archive. The
2645 @code{restore} script prompts for media by its archive volume, so to
2646 avoid an error message you should keep track of which tape (or disk)
2647 contains which volume of the archive. @xref{Scripted Restoration}.
2649 @c <<<have file names changed? -ringo
2650 The backup scripts write two files on the file system. The first is a
2651 record file in @file{/etc/tar-backup/}, which is used by the scripts
2652 to store and retrieve information about which files were dumped. This
2653 file is not meant to be read by humans, and should not be deleted by
2654 them. @xref{incremental and listed-incremental}, for a more
2655 detailed explanation of this file.
2657 The second file is a log file containing the names of the file systems
2658 and files dumped, what time the backup was made, and any error
2659 messages that were generated, as well as how much space was left in
2660 the media volume after the last volume of the archive was written.
2661 You should check this log file after every backup. The file name is
2662 @file{log-@var{mmm-ddd-yyyy}-level-1} or
2663 @file{log-@var{mmm-ddd-yyyy}-full}.
2665 The script also prints the name of each system being dumped to the
2667 @c <<<the section on restore scripts is commented out.
2668 @c <<< a section on non-scripted testore mya be a good idea
2670 @node Scripted Restoration, , Scripted Backups, Backup Scripts
2671 @subsection Using the Restore Script
2672 @c subject to change as things develop
2674 To restore files that were archived using a scripted backup, use the
2675 @code{restore} script. The syntax for the script is:
2678 where ##### are the file systems to restore from, and
2679 ##### is a regular expression which specifies which files to
2680 restore. If you specify --all, the script restores all the files
2683 You should start the restore script with the media containing the
2684 first volume of the archive mounted. The script will prompt for other
2685 volumes as they are needed. If the archive is on tape, you don't need
2686 to rewind the tape to to its beginning---if the tape head is
2687 positioned past the beginning of the archive, the script will rewind
2688 the tape as needed. @xref{Media}, for a discussion of tape
2691 If you specify @samp{--all} as the @var{files} argument, the
2692 @code{restore} script extracts all the files in the archived file
2693 system into the active file system.
2696 @strong{Warning:}The script will delete files from the active file
2697 system if they were not in the file system when the archive was made.
2700 @xref{incremental and listed-incremental}, for an explanation of how
2701 the script makes that determination.
2702 @c this may be an option, not a given
2705 @node incremental and listed-incremental, Problems, Backup Scripts, Backups and Restoration
2706 @section The @code{--incremental} and @code{--listed-incremental} Options
2708 @samp{--incremental} is used in conjunction with @samp{--create},
2709 @samp{--extract} or @samp{--list} when backing up and restoring file
2710 systems. An archive cannot be extracted or listed with the
2711 @samp{--incremental} option specified unless it was created with the
2712 option specified. This option should only be used by a script, not by
2713 the user, and is usually disregarded in favor of
2714 @samp{--listed-incremental}, which is described below.
2716 @samp{--incremental} in conjunction with @samp{--create} causes
2717 @code{tar} to write, at the beginning of the archive, an entry for
2718 each of the directories that will be archived. The entry for a
2719 directory includes a list of all the files in the directory at the
2720 time the archive was created and a flag for each file indicating
2721 whether or not the file is going to be put in the archive.
2723 Note that this option causes @code{tar} to create a non-standard
2724 archive that may not be readable by non-GNU versions of the @code{tar}
2727 @samp{--incremental} in conjunction with @samp{--extract} causes
2728 @code{tar} to read the lists of directory contents previously stored
2729 in the archive, @emph{delete} files in the file system that did not
2730 exist in their directories when the archive was created, and then
2731 extract the files in the archive.
2733 This behavior is convenient when restoring a damaged file system from
2734 a succession of incremental backups: it restores the entire state of
2735 the file system to that which obtained when the backup was made. If
2736 @samp{--incremental} isn't specified, the file system will probably
2737 fill up with files that shouldn't exist any more.
2739 @samp{--incremental} in conjunction with @samp{--list}, causes
2740 @code{tar} to print, for each directory in the archive, the list of
2741 files in that directory at the time the archive was created. This
2742 information is put out in a format that is not easy for humans to
2743 read, but which is unambiguous for a program: each file name is
2744 preceded by either a @samp{Y} if the file is present in the archive,
2745 an @samp{N} if the file is not included in the archive, or a @samp{D}
2746 if the file is a directory (and is included in the archive). Each
2747 file name is terminated by a null character. The last file is followed
2748 by an additional null and a newline to indicate the end of the data.
2750 @samp{--listed-incremental}=@var{file} acts like @samp{--incremental},
2751 but when used in conjunction with @samp{--create} will also cause
2752 @code{tar} to use the file @var{file}, which contains information
2753 about the state of the file system at the time of the last backup, to
2754 decide which files to include in the archive being created. That file
2755 will then be updated by @code{tar}. If the file @var{file} does not
2756 exist when this option is specified, @code{tar} will create it, and
2757 include all appropriate files in the archive.
2759 The file @var{file}, which is archive independent, contains the date
2760 it was last modified and a list of devices, inode numbers and
2761 directory names. @code{tar} will archive files with newer mod dates
2762 or inode change times, and directories with an unchanged inode number
2763 and device but a changed directory name. The file is updated after
2764 the files to be archived are determined, but before the new archive is
2767 @c <<< this section needs to be written
2768 @node Problems, , incremental and listed-incremental, Backups and Restoration
2769 @section Some Common Problems and their Solutions
2773 no such file or directory
2777 directory checksum error
2780 errors from media/system:
2784 @node Media, Quick Reference, Backups and Restoration, Top
2785 @chapter Tapes and Other Archive Media
2787 Archives are usually written on dismountable media---tape cartridges,
2788 mag tapes, or floppy disks.
2790 The amount of data a tape or disk holds depends not only on its size,
2791 but also on how it is formatted. A 2400 foot long reel of mag tape
2792 holds 40 megabytes of data when formated at 1600 bits per inch. The
2793 physically smaller EXABYTE tape cartridge holds 2.3 gigabytes.
2795 Magnetic media are re-usable---once the archive on a tape is no longer
2796 needed, the archive can be erased and the tape or disk used over.
2797 Media quality does deteriorate with use, however. Most tapes or disks
2798 should be disgarded when they begin to produce data errors. EXABYTE
2799 tape cartridges should be disgarded when they generate an @dfn{error
2800 count} (number of non-usable bits) of more than 10k.
2802 Magnetic media are written and erased using magnetic fields, and
2803 should be protected from such fields to avoid damage to stored data.
2804 Sticking a floppy disk to a filing cabinet using a magnet is probably
2809 * Write Protection:: Write Protection
2810 * Tape Positioning:: Tape Positions and Tape Marks
2813 @node Write Protection, Tape Positioning, Media, Media
2814 @section Write Protection
2816 All tapes and disks can be @dfn{write protected}, to protect data on
2817 them from being changed. Once an archive is written, you should write
2818 protect the media to prevent the archive from being accidently
2819 overwritten or deleted. (This will protect the archive from being
2820 changed with a tape or floppy drive---it will not protect it from
2821 magnet fields or other physical hazards).
2823 The write protection device itself is usually an integral part of the
2824 physical media, and can be a two position (write enabled/write
2825 disabled) switch, a notch which can be popped out or covered, a ring
2826 which can be removed from the center of a tape reel, or some other
2829 @node Tape Positioning, , Write Protection, Media
2830 @section Tape Positions and Tape Marks
2832 Just as archives can store more than one file from the file system,
2833 tapes can store more than one archive file. To keep track of where
2834 archive files (or any other type of file stored on tape) begin and
2835 end, tape archive devices write magnetic @dfn{tape marks} on the
2836 archive media. Tape drives write one tape mark between files,
2837 two at the end of all the file entries.
2839 If you think of data as a series of "0000"'s, and tape marks as "x"'s,
2840 a tape might look like the following:
2843 0000x000000x00000x00x00000xx-------------------------
2846 Tape devices read and write tapes using a read/write @dfn{tape
2847 head}---a physical part of the device which can only access one point
2848 on the tape at a time. When you use @code{tar} to read or write
2849 archive data from a tape device, the device will begin reading or
2850 writing from wherever on the tape the tape head happens to be,
2851 regardless of which archive or what part of the archive the tape head
2852 is on. Before writing an archive, you should make sure that no data
2853 on the tape will be overwritten (unless it is no longer needed).
2854 Before reading an archive, you should make sure the tape head is at
2855 the beginning of the archive you want to read. (The @code{restore}
2856 script will find the archive automatically. @xref{Scripted
2857 Restoration}). @xref{mt}, for an explanation of the tape moving
2860 If you want to add new archive file entries to a tape, you should
2861 advance the tape to the end of the existing file entries, backspace
2862 over the last tape mark, and write the new archive file. If you were
2863 to add two archives to the example above, the tape might look like the
2867 0000x000000x00000x00x00000x000x0000xx----------------
2871 * mt:: The @code{mt} Utility
2874 @node mt, , Tape Positioning, Tape Positioning
2875 @subsection The @code{mt} Utility
2877 <<< is it true that this only works on non-block devices? should
2878 <<< explain the difference, xref to block-size (fixed or variable).
2880 You can use the @code{mt} utility to advance or rewind a tape past a
2881 specified number of archive files on the tape. This will allow you to
2882 move to the beginning of an archive before extracting or reading it,
2883 or to the end of all the archives before writing a new one.
2884 @c why isn't there an "advance 'til you find two tape marks together"?
2886 The syntax of the @code{mt} command is:
2889 mt [-f @var{tapename}] @var{operation} [@var{number}]
2892 where @var{tapename} is the name of the tape device, @var{number} is
2893 the number of times an operation is performed (with a default of one),
2894 and @var{operation} is one of the following:
2899 Writes @var{number} tape marks at the current position on the tape.
2903 Moves tape position forward @var{number} files.
2907 Moves tape position back @var{number} files.
2911 Rewinds the tape. (Ignores @var{number}).
2916 Rewinds the tape and takes the tape device off-line. (Ignores @var{number}).
2920 Prints status information about the tape unit.
2922 <<< is there a better way to frob the spacing on the list? -ringo
2924 If you don't specify a @var{tapename}, @code{mt} uses the environment
2925 variable TAPE; if TAPE does not exist, @code{mt} uses the device
2928 @code{mt} returns a 0 exit status when the operation(s) were
2929 successful, 1 if the command was unrecognized, and 2 if an operation
2932 @c <<< new node on how to find an archive? -ringo
2933 If you use @code{tar --extract} with the
2934 @samp{--label=@var{archive-name}} option specified, @code{tar} will
2935 read an archive label (the tape head has to be positioned on it) and
2936 print an error if the archive label doesn't match the
2937 @var{archive-name} specified. @var{archive-name} can be any regular
2938 expression. If the labels match, @code{tar} extracts the archive.
2939 @xref{Archive Label}. @xref{Matching Format Parameters}.
2940 <<< fix cross references
2942 @code{tar --list --label} will cause @code{tar} to print the label.
2944 @c <<< MIB -- program to list all the labels on a tape?
2946 @node Quick Reference, Data Format Details, Media, Top
2947 @appendix A Quick Reference Guide to @code{tar} Operations and Options
2948 @c put in proper form for appendix. (unnumbered?)
2951 * Operations:: A Table of Operations
2952 * Options:: Table of Options
2955 @node Operations, Options, Quick Reference, Quick Reference
2956 @appendixsec A Table of Operations
2957 @c add xrefs, note synonyms
2959 The operation argument to @code{tar} specifies which action you want to
2964 Adds copies of an archive or archives to the end of another archive.
2967 Creates a new archive.
2970 Compares files in the archive with their counterparts in the file
2971 system, and reports differences in file size, mode, owner,
2972 modification date and contents.
2975 Adds files to the end of the archive.
2978 Prints a list of the contents of the archive.
2981 Reads files from the archive and writes them into the active file
2985 Adds files to the end of the archive, but only if they are newer than
2986 their counterparts already in the archive, or if they do not already
2987 exist in the archive.
2990 Adds copies of an archive or archives to the end of another archive.
2993 Adds files to the end of the archive.
2996 Adds files to the end of the archive.
2999 Adds copies of an archive or archives to the end of another archive.
3002 Compares files in the archive with their counterparts in the file
3003 system, and reports differences in file size, mode, owner,
3004 modification date and contents.
3007 Adds copies of an archive or archives to the end of another archive.
3010 Creates a new archive.
3013 Deletes files from the archive. All versions of the files are deleted.
3016 Compares files in the archive with their counterparts in the file
3017 system, and reports differences in file size, mode, owner,
3018 modification date and contents.
3021 Reads files from the archive and writes them into the active file
3025 Reads files from the archive and writes them into the active file
3029 Prints a list of @code{tar} operations and options.
3032 Prints a list of the contents of the archive.
3035 Adds files to the end of the archive, but only if they are newer than
3036 their counterparts already in the archive, or if they do not already
3037 exist in the archive.
3040 Prints the version number of the @code{tar} program to the standard
3044 @node Options, , Operations, Quick Reference
3045 @appendixsec Table of Options
3047 Options change the way @code{tar} performs an operation.
3050 @item --absolute-paths
3051 WILL BE INPUT WHEN QUESTION IS RESOLVED
3053 @item --after-date=@var{date}
3054 Limit the operation to files changed after the given date.
3055 @xref{File Exclusion}.
3057 @item --block-size=@var{number}
3058 Specify the blocking factor of an archive. @xref{Blocking Factor}.
3061 Specify a compressed archive. @xref{Compressed Archives}.
3063 @item --compress-block.
3064 Create a whole block sized compressed archive. @xref{Compressed Archives}.
3066 @item --confirmation
3067 Solicit confirmation for each file. @xref{Interactive Operation}
3068 <<< --selective should be a synonym.
3071 Treat a symbolic link as an alternate name for the file the link
3072 points to. @xref{Symbolic Links}.
3074 @item --directory=@file{directory}
3075 Change the working directory. @xref{Changing Working Directory}.
3077 @item --exclude=@var{pattern}
3078 Exclude files which match the regular expression @var{pattern}.
3079 @xref{File Exclusion}.
3081 @item --exclude-from=@file{file}
3082 Exclude files which match any of the regular expressions listed in
3083 the file @file{file}. @xref{File Exclusion}.
3085 @item --file=@var{archive-name}
3086 Name the archive. @xref{Archive Name}).
3088 @item --files-from=@file{file}
3089 Read file-name arguments from a file on the file system.
3090 @xref{File Name Lists}.
3092 @item --ignore-umask
3093 Set modes of extracted files to those recorded in the archive.
3094 @xref{File Writing Options}.
3096 @item --ignore-zeros
3097 Ignore end-of-archive entries. @xref{Archive Reading Options}.
3098 <<< this should be changed to --ignore-end
3100 @item --listed-incremental=@var{file-name} (-g)
3101 Take a file name argument always. If the file doesn't exist, run a level
3102 zero dump, creating the file. If the file exists, uses that file to see
3105 @item --incremental (-G)
3108 @item --tape-length=@var{n} (-L)
3109 @c <<<alternate way of doing multi archive, will go to that length and
3110 @c prompts for new tape, automatically turns on multi-volume. >>>
3111 @c <<< this needs to be written into main body as well -ringo
3113 @item --info-script=@var{program-file}
3114 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
3117 Ask for confirmation before performing any operation on a file or
3120 @item --keep-old-files
3121 Prevent overwriting during extraction. @xref{File Writing Options}.
3123 @item --label=@var{archive-label}
3124 Include an archive-label in the archive being created. @xref{Archive
3127 @item --modification-time
3128 Set the modification time of extracted files to the time they were
3129 extracted. @xref{File Writing Options}.
3131 @item --multi-volume
3132 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
3134 @item --newer=@var{date}
3135 Limit the operation to files changed after the given date.
3136 @xref{File Exclusion}.
3138 @item --newer-mtime=@var{date}
3139 Limit the operation to files modified after the given date. @xref{File
3143 Create an old format archive. @xref{Old Style File Information}.
3144 @c <<< did we agree this should go away as a synonym?
3147 Create an old format archive. @xref{Old Style File Information}.
3149 @item --one-file-system
3150 Prevent @code{tar} from crossing file system boundaries when
3151 archiving. @xref{File Exclusion}.
3154 Create an old format archive. @xref{Old Style File Information}.
3155 @c <<< was portability, may still need to be changed
3157 @item --preserve-order
3158 Help process large lists of file-names on machines with small amounts of
3159 memory. @xref{Archive Reading Options}.
3161 @item --preserve-permission
3162 Set modes of extracted files to those recorded in the archive.
3163 @xref{File Writing Options}.
3165 @item --read-full-blocks
3166 Read an archive with a smaller than specified block size or which
3167 contains incomplete blocks. @xref{Archive Reading Options}).
3168 @c should be --partial-blocks (!!!)
3170 @item --record-number
3171 Print the record number where a message is generated.
3172 @xref{Additional Information}.
3175 Help process large lists of file-names on machines with small amounts of
3176 memory. @xref{Archive Reading Options}.
3178 @item --same-permission
3179 Set the modes of extracted files to those recorded in the archive.
3180 @xref{File Writing Options}.
3183 Archive sparse files sparsely. @xref{Sparse Files}.
3185 @item --starting-file=@var{file-name}
3186 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3189 Write files to the standard output. @xref{File Writing Options}.
3192 Specifdo a compressed archive. @xref{Compressed Archives}.
3194 @item -V @var{archive-label}
3195 Include an archive-label in the archive being created. @xref{Archive
3200 Print the names of files or archive members as they are being
3201 operated on. @xref{Additional Information}.
3204 Check for discrepancies in the archive immediately after it is
3205 written. @xref{Write Verification}.
3208 Read an archive with a smaller than specified block size or which
3209 contains incomplete blocks. @xref{Archive Reading Options}).
3211 @item -K @var{file-name}
3212 Begin reading in the middle of an archive. @xref{Scarce Disk Space}.
3215 Specify a multi-volume archive. @xref{Multi-Volume Archives}.
3218 Limit operation to files changed after the given date. @xref{File Exclusion}.
3221 Write files to the standard output. @xref{File Writing Options}.
3223 @c <<<<- P is absolute paths, add when resolved. -ringo>>>
3226 Print the record number where a message is generated.
3227 @xref{Additional Information}.
3230 Archive sparse files sparsely. @xref{Sparse Files}.
3233 Read file-name arguments from a file on the file system.
3234 @xref{File Name Lists}.
3237 Check for discrepancies in the archive immediately after it is
3238 written. @xref{Write Verification}.
3241 Specify a compressed archive. @xref{Compressed Archives}.
3243 @item -b @var{number}
3244 Specify the blocking factor of an archive. @xref{Blocking Factor}.
3246 @item -f @var{archive-name}
3247 Name the archive. @xref{Archive Name}).
3250 Treat a symbolic link as an alternate name for the file the link
3251 points to. @xref{Symbolic Links}.
3254 Ignore end-of-archive entries. @xref{Archive Reading Options}.
3257 Prevent overwriting during extraction. @xref{File Writing Options}.
3260 Prevent @code{tar} from crossing file system boundaries when
3261 archiving. @xref{File Exclusion}.
3264 Set the modification time of extracted files to the time they were
3265 extracted. @xref{File Writing Options}.
3268 Create an old format archive. @xref{Old Style File Information}.
3271 Set the modes of extracted files to those recorded in the archive.
3272 @xref{File Writing Options}.
3275 Help process large lists of file-names on machines with small amounts of
3276 memory. @xref{Archive Reading Options}.
3279 Print the names of files or archive members they are being operated
3280 on. @xref{Additional Information}.
3283 @c <<<see --interactive. WILL BE INPUT WHEN QUESTIONS ARE RESOLVED.>>>
3286 Specify a compressed archive. @xref{Compressed Archives}.
3289 Create a whole block sized compressed archive. @xref{Compressed Archives}.
3290 @c I would rather this were -Z. it is the only double letter short
3293 @item -C @file{directory}
3294 Change the working directory. @xref{Changing Working Directory}.
3296 @item -F @var{program-file}
3297 Create a multi-volume archive via a script. @xref{Multi-Volume Archives}.
3299 @item -X @file{file}
3300 Exclude files which match any of the regular expressions listed in
3301 the file @file{file}. @xref{File Exclusion}.
3304 @node Data Format Details, Concept Index, Quick Reference, Top
3305 @appendix Details of the Archive Data Format
3307 This chapter is based heavily on John Gilmore's @i{tar}(5) manual page
3308 for the public domain @code{tar} that GNU @code{tar} is based on.
3309 @c it's been majorly edited since, we may be able to lose this.
3311 The archive media contains a series of records, each of which contains
3312 512 bytes. Each archive member is represented by a header record,
3313 which describes the file, followed by zero or more records which
3314 represent the contents of the file. At the end of the archive file
3315 there may be a record consisting of a series of binary zeros, as an
3316 end-of-archive marker. GNU @code{tar} writes a record of zeros at the
3317 end of an archive, but does not assume that such a record exists when
3320 Records may be grouped into @dfn{blocks} for I/O operations. A block
3321 of records is written with a single @code{write()} operation. The
3322 number of records in a block is specified using the @samp{--block-size}
3323 option. @xref{Blocking Factor}, for more information about specifying
3327 * Header Data:: The Distribution of Data in the Header
3328 * Header Fields:: The Meaning of Header Fields
3329 * Sparse File Handling:: Fields to Handle Sparse Files
3332 @node Header Data, Header Fields, Data Format Details, Data Format Details
3333 @appendixsec The Distribution of Data in the Header
3335 The header record is defined in C as follows:
3336 @c I am taking the following code on faith.
3339 @r{Standard Archive Format - Standard TAR - USTAR}
3341 #define RECORDSIZE 512
3345 #define SPARSE_EXT_HDR 21
3346 #define SPARSE_IN_HDR 4
3354 char charptr[RECORDSIZE];
3364 char linkname[NAMSIZ];
3366 char uname[TUNMLEN];
3367 char gname[TGNMLEN];
3371 @r{The following fields were added by gnu and are not used by other}
3372 @r{versions of @code{tar}}.
3377 @r{The next three fields were added by gnu to deal with shrinking down}
3379 struct sparse sp[SPARSE_IN_HDR];
3381 @r{This is the number of nulls at the end of the file, if any.}
3382 char ending_blanks[12];
3386 struct extended_header @{
3387 struct sparse sp[21];
3392 @c <<< this whole thing needs to be put into better english
3394 @r{The checksum field is filled with this while the checksum is computed.}
3395 #define CHKBLANKS " " @r{8 blanks, no null}
3397 @r{Inclusion of this field marks an archive as being in standard}
3398 @r{Posix format (though GNU tar itself is not Posix conforming). GNU}
3399 @r{tar puts "ustar" in this field if uname and gname are valid.}
3400 #define TMAGIC "ustar " @r{7 chars and a null}
3402 @r{The magic field is filled with this if this is a GNU format dump entry.}
3403 #define GNUMAGIC "GNUtar " @r{7 chars and a null}
3405 @r{The linkflag defines the type of file.}
3406 #define LF_OLDNORMAL '\0' @r{Normal disk file, Unix compatible}
3407 #define LF_NORMAL '0' @r{Normal disk file}
3408 #define LF_LINK '1' @r{Link to previously dumped file}
3409 #define LF_SYMLINK '2' @r{Symbolic link}
3410 #define LF_CHR '3' @r{Character special file}
3411 #define LF_BLK '4' @r{Block special file}
3412 #define LF_DIR '5' @r{Directory}
3413 #define LF_FIFO '6' @r{FIFO special file}
3414 #define LF_CONTIG '7' @r{Contiguous file}
3416 @r{hhe following are further link types which were defined later.}
3418 @r{This is a dir entry that contains the names of files that were in}
3419 @r{the dir at the time the dump was made.}
3420 #define LF_DUMPDIR 'D'
3422 @r{This is the continuation of a file that began on another volume}
3423 #define LF_MULTIVOL 'M'
3425 @r{This is for sparse files}
3426 #define LF_SPARSE 'S'
3428 @r{This file is a tape/volume header. Ignore it on extraction.}
3429 #define LF_VOLHDR 'V'
3431 @r{These are bits used in the mode field - the values are in octal}
3432 #define TSUID 04000 @r{Set UID on execution}
3433 #define TSGID 02000 @r{Set GID on execution}
3434 #define TSVTX 01000 @r{Save text (sticky bit)}
3436 @r{These are file permissions}
3437 #define TUREAD 00400 @r{read by owner}
3438 #define TUWRITE 00200 @r{write by owner}
3439 #define TUEXEC 00100 @r{execute/search by owner}
3440 #define TGREAD 00040 @r{read by group}
3441 #define TGWRITE 00020 @r{write by group}
3442 #define TGEXEC 00010 @r{execute/search by group}
3443 #define TOREAD 00004 @r{read by other}
3444 #define TOWRITE 00002 @r{write by other}
3445 #define TOEXEC 00001 @r{execute/search by other}
3449 All characters in headers are 8-bit characters in the local variant of
3450 ASCII. Each field in the header is contiguous; that is, there is no
3451 padding in the header format.
3453 Data representing the contents of files is not translated in any way
3454 and is not constrained to represent characters in any character set.
3455 @code{tar} does not distinguish between text files and binary files.
3457 The @code{name}, @code{linkname}, @code{magic}, @code{uname}, and
3458 @code{gname} fields contain null-terminated character strings. All
3459 other fields contain zero-filled octal numbers in ASCII. Each numeric
3460 field of width @var{w} contains @var{w} @minus{} 2 digits, a space, and a
3461 null, except @code{size} and @code{mtime}, which do not contain the
3464 @node Header Fields, Sparse File Handling, Header Data, Data Format Details
3465 @appendixsec The Meaning of Header Fields
3467 The @code{name} field contains the name of the file.
3468 <<< how big a name before field overflows?
3470 The @code{mode} field contains nine bits which specify file
3471 permissions, and three bits which specify the Set UID, Set GID, and
3472 Save Text (``stick'') modes. Values for these bits are defined above.
3473 @xref{File Writing Options}, for information on how file permissions
3474 and modes are used by @code{tar}.
3476 The @code{uid} and @code{gid} fields contain the numeric user and
3477 group IDs of the file owners. If the operating system does not
3478 support numeric user or group IDs, these fields should be ignored.
3481 The @code{size} field contains the size of the file in bytes; this
3482 field contains a zero if the header describes a link to a file.
3484 The @code{mtime} field contains the modification time of the file.
3485 This is the ASCII representation of the octal value of the last time
3486 the file was modified, represented as an integer number of seconds
3487 since January 1, 1970, 00:00 Coordinated Universal Time.
3488 @xref{File Writing Options}, for a description of how @code{tar} uses
3491 The @code{chksum} field contains the ASCII representation of the octal
3492 value of the simple sum of all bytes in the header record. To
3493 generate this sum, each 8-bit byte in the header is added to an
3494 unsigned integer, which has been initialized to zero. The precision
3495 of the integer is seventeen bits. When calculating the checksum, the
3496 @code{chksum} field itself is treated as blank.
3498 The @code{atime} and @code{ctime} fields are used when making
3499 incremental backups; they store, respectively, the file's access time
3500 and last inode-change time.
3502 The value in the @code{offset} field is used when making a
3503 multi-volume archive. The offset is number of bytes into the file
3504 that we need to go to pick up where we left off in the previous
3505 volume, i.e the location that a continued file is continued from.
3507 The @code{longnames} field supports a feature that is not yet
3508 implemented. This field should be empty.
3510 The @code{magic} field indicates that this archive was output in the
3511 P1003 archive format. If this field contains @code{TMAGIC}, the
3512 @code{uname} and @code{gname} fields will contain the ASCII
3513 representation of the owner and group of the file respectively. If
3514 found, the user and group IDs are used rather than the values in the
3515 @code{uid} and @code{gid} fields.
3517 The @code{sp} field is used to archive sparse files efficiently.
3518 @xref{Sparse File Handling}, for a description of this field, and
3519 other fields it may imply.
3521 The @code{typeflag} field specifies the file's type. If a particular
3522 implementation does not recognize or permit the specified type,
3523 @code{tar} extracts the file as if it were a regular file, and reports
3524 the discrepancy on the standard error. @xref{File Types}. @xref{GNU
3528 * File Types:: File Types
3529 * GNU File Types:: Additional File Types Supported by GNU
3532 @node File Types, GNU File Types, Header Fields, Header Fields
3533 @appendixsubsec File Types
3535 The following flags are used to describe file types:
3540 Indicates a regular file. In order to be compatible with older
3541 versions of @code{tar}, a @code{typeflag} value of @code{LF_OLDNORMAL}
3542 should be silently recognized as a regular file. New archives should
3543 be created using @code{LF_NORMAL} for regular files. For backward
3544 compatibility, @code{tar} treats a regular file whose name ends with a
3545 slash as a directory.
3548 Indicates a link to another file, of any type, which has been
3549 previously archived. @code{tar} identifies linked files in Unix by
3550 matching device and inode numbers. The linked-to name is specified in
3551 the @code{linkname} field with a trailing null.
3554 Indicates a symbolic link to another file. The linked-to
3555 name is specified in the @code{linkname} field with a trailing null.
3556 @xref{File Writing Options}, for information on archiving files
3557 referenced by a symbolic link.
3561 Indicate character special files and block special files,
3562 respectively. In this case the @code{devmajor} and @code{devminor}
3563 fields will contain the major and minor device numbers. Operating
3564 systems may map the device specifications to their own local
3565 specification, or may ignore the entry.
3568 Indicates a directory or sub-directory. The directory name in the
3569 @code{name} field should end with a slash. On systems where disk
3570 allocation is performed on a directory basis, the @code{size} field
3571 will contain the maximum number of bytes (which may be rounded to the
3572 nearest disk block allocation unit) that the directory can hold. A
3573 @code{size} field of zero indicates no size limitations. Systems that
3574 do not support size limiting in this manner should ignore the
3578 Indicates a FIFO special file. Note that archiving a FIFO file
3579 archives the existence of the file and not its contents.
3582 Indicates a contiguous file. Contiguous files are the same as normal
3583 files except that, in operating systems that support it, all the
3584 files' disk space is allocated contiguously. Operating systems which
3585 do not allow contiguous allocation should silently treat this type as
3590 These are reserved for custom implementations. Some of these are used
3591 in the GNU modified format, which is described below. @xref{GNU File
3595 Certain other flag values are reserved for specification in future
3596 revisions of the P1003 standard, and should not be used by any
3599 @node GNU File Types, , File Types, Header Fields
3600 @appendixsubsec Additional File Types Supported by GNU
3602 GNU @code{tar} uses additional file types to describe new types of
3603 files in an archive. These are listed below.
3608 Indicates a directory and a list of files created by the
3609 @samp{--incremental} option. The @code{size} field gives the total
3610 size of the associated list of files. Each file name is preceded by
3611 either a @code{'Y'} (the file should be in this archive) or an
3612 @code{'N'} (the file is a directory, or is not stored in the archive).
3613 Each file name is terminated by a null. There is an additional null
3614 after the last file name.
3618 Indicates a file continued from another volume of a multi-volume
3619 archive (@pxref{Multi-Volume Archives}). The original type of the file is not
3620 given here. The @code{size} field gives the maximum size of this
3621 piece of the file (assuming the volume does not end before the file is
3622 written out). The @code{offset} field gives the offset from the
3623 beginning of the file where this part of the file begins. Thus
3624 @code{size} plus @code{offset} should equal the original size of the
3629 Indicates a sparse file. @xref{Sparse Files}. @xref{Sparse File
3634 Marks an archive label that was created using the @samp{--label} option
3635 when the archive was created (@pxref{Archive Label}. The @code{name}
3636 field contains the argument to the option. The @code{size} field is
3637 zero. Only the first file in each volume of an archive should have
3641 @node Sparse File Handling, , Header Fields, Data Format Details
3642 @appendixsec Fields to Handle Sparse Files
3644 The following header information was added to deal with sparse files
3645 (@pxref{Sparse Files}):
3648 The @code{sp} field (fields? something else?) is an array of
3649 @code{struct sparse}. Each @code{struct sparse} contains two
3650 12-character strings, which represent the offset into the file and the
3651 number of bytes to be written at that offset. The offset is absolute,
3652 and not relative to the offset in preceding array elements.
3654 The header can contain four of these @code{struct sparse}; if more are
3655 needed, they are not stored in the header, instead, the flag
3656 @code{isextended} is set and the next record is an
3657 @code{extended_header}.
3658 @c @code{extended_header} or @dfn{extended_header} ??? the next
3659 @c record after the header, or in the middle of it.
3661 The @code{isextended} flag is only set for sparse files, and then only
3662 if extended header records are needed when archiving the file.
3664 Each extended header record can contain an array of 21 sparse
3665 structures, as well as another @code{isextended} flag. There is no
3666 limit (except that implied by the archive media) on the number of
3667 extended header records that can be used to describe a sparse file.
3669 @c so is @code{extended_header} the right way to write this?
3671 @node Concept Index, , Data Format Details, Top
3672 @unnumbered Concept Index