## 38.11. Avoid Absolute Paths with tar

One problem with most versions of tar: they can't change a file's pathname when restoring. Let's say that you put your home directory in an archive (tape or otherwise) with a command like this:

>     % tar c /home/mike

What will these files be named when you restore them, either on your own system or on some other system? They will have exactly the same pathnames they had originally. So if /home/mike already exists, it will be destroyed. There's no way to tell tar that it should be careful about overwriting files; there's no way to tell tar to put the files in some other directory when it takes them off the tape, etc. If you use absolute pathnames (Section 31.2) when you create a tape, you're stuck. If you use relative paths (Section 31.2) (for example, `tar c` .), you can restore the files in any directory you want.

This means that you should:

- Avoid using absolute paths when you create an archive (see below).

- Use tar t to see what files are on the tape before restoring the archive.

- Use GNU tar. It strips the leading `/` by default when creating archives. (You can give it the -P option to make it store absolute pathnames.)

Rather than giving a command like `tar c /home/mike`, do something like:

>     % cd /
>     % tar c home/mike

Or, even more elegant, use -C on the tar command line:

>     % tar c -C /home/mike .

This command tells tar to cd to the directory /home/mike before creating an archive of . (the current directory). If you want to archive several directories, you can use several -C options:

>     % tar c -C /home/mike ./docs  -C /home/susan ./test

This command archives mike's docs directory and susan's test directory. [Note that it uses the subdirectory names, as we did in the second-previous example. When the files are extracted, they'll be restored to separate subdirectories, instead of all being mixed into the same . (current) directory. -- JP]

-- ML

Copyright © 2003 O'Reilly & Associates. All rights reserved.