[Chapter 19] 19.9 A System V Tape Archiver: cpio
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-08-04T21:39:31Z

#

| Chapter 19 Creating and Reading Archives |

## 19.9 A System V Tape Archiver: cpio

There was a time when people used to debate whether the BSD tar (20.1, 19.5) (tape archiver) or the System V cpio (copy in/out) was the better file archive and backup program. At this point, there's no question. No one ships out cpio archives over the Net (1.33). tar is widespread, and because there are free versions available, including GNU tar (19.6), there's no reason why you should have to read a cpio archive from someone else.

Still, if you're on an older System V machine, you might use cpio. Though we don't give it much air time in this book, here are a few basics:

- To write out an archive, use the -o option and redirect output either to a tape device or to an archive file. The list of files to be archived is often specified with find (17.1), but can be generated in other ways-cpio expects a list of filenames on its standard input. For example:

  >     % find . -name "*.old" -print | cpio -ocBv > /dev/rst8

  or:

  >     % find . -print | cpio -ocBv > mydir.cpio

- To read an archive in, use the -i option and redirect input from the file or tape drive containing the archive. The -d option is often important; it tells cpio to create directories as needed when copying files in. You can restore all files from the archive or specify a filename pattern (with wildcards quoted to protect them from the shell) to select only some of the files. For example, the following command will restore from a tape drive all C source files:

  >     % cpio -icdv "*.c" < /dev/rst8

  Subdirectories are created if needed (-d), and cpio will be verbose (-v), announcing the name of each file that it successfully reads in.

- To copy an archive to another directory, use the -o option, followed by the name of the destination directory. (This is one of the nicer features of cpio.) For example, you could use the following command to copy the contents of the current directory (including all subdirectories) to another directory:

  >     % find . -depth -print | cpio -pd newdir

- There are lots of other options for things like resetting file access times or ownership or changing the blocking factor on the tape. See your friendly neighborhood manual page for details. Notice that options are typically "squashed together" into an option string rather than written out as separate options.

- TOR

19.8 Problems with Verbose tar |  | 20. Backing Up Files