4

I created tar archives with an absolute path to save the files.

/home/mydir/dir1/dir2/dir3/file1.dat
/home/mydir/dir1/dir2/dir3/file2.dat
/home/mydir/dir1/dir2/dir3/file3.dat

I would like to untar these archives skipping the leading part of the path, /home/mydir/dir1. My files should be restored in any directory with this structure:

dir2/dir3/file1.dat
dir2/dir3/file2.dat
dir2/dir3/file3.dat

How can I do this with the tar command, or another way?

2 Answers 2

4

If you are using GNU tar, then there is an option to remove some leading path members when extracting:

 `--strip-components=number'

    Strip given number of leading components from file names before extraction.

For example, suppose you have archived whole `/usr' hierarchy to a
tar archive named `usr.tar'. Among other files, this archive
contains `usr/include/stdlib.h', which you wish to extract to the
current working directory. To do so, you type:

$ tar -xf usr.tar --strip=2 usr/include/stdlib.h

(From the GNU tar documentation.)

In your case, --strip=3 should apply.

2

With GNU tar (found on non-embedded Linux and Cygwin), you can apply a regular expression replacement to the paths when adding members to an archive or when extracting them with the --transform option.

tar -xf foo.tar --transform='s!^/home/mydir/dir1/!!'

With *BSD tar (including on OSX), there's a similar option called -s.

tar -xf foo.tar -s '!^/home/mydir/dir1/!!'

POSIX has the pax command with the same option as BSD tar.

pax -r <foo.tar -s '!^/home/mydir/dir1/!!'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .