28

This doesn't work:

tar xf /tmp/foo.tar.gz foo/bar
tar: foo/bar: Not found in archive

It's not obvious to me what would do this beyond extracting it in place and moving the files over.

7 Answers 7

40

From man tar:

     -C directory
         In c and r mode, this changes the directory before adding the
         following files.  In x mode, change directories after opening the
         archive but before extracting entries from the archive.

i.e, tar xC /foo/bar -f /tmp/foo.tar.gz should do the job. (on FreeBSD, but GNU tar is basically the same in this respect, see "Changing the Working Directory" in its manual)

3
  • 4
    I reccommend to test this behaviour with non-GNU versions of tar. Solaris manual page only mentions this option in combination of add and replace operations. Being curious I've tested it with an extract operation. Solaris' tar did not issue any error or warning and extracted the archive in the current folder =:-/
    – ktf
    Nov 1, 2011 at 16:57
  • 1
    Also doesn't work on the AIX version of tar: 'File -C not present in the archive' - the '-C' does work for creating tarballs.
    – user14755
    Feb 13, 2015 at 4:42
  • Is it possible to swap out the main directory with a new name?
    – tofutim
    Mar 9, 2016 at 18:24
10

if you want to extract an tar archive elsewhere just cd to the destination directory and untar it there:

 mkdir -p foo/bar
 cd foo/bar
 tar xzvf /tmp/foo.tar.gz

The command you've used would search the file foo/bar in the archive and extract it.

8

Doing:

(cd foo/bar ; tar xf /tmp/foo.tar.gz )

would do the job.

Basically, what is does is spawning a new shell (the parentheses), in this subshell, change directory to foo/bar and then untar the file.

You can change the ; by a && to be sure the cd works fine.

1
  • 1
    Wow that you can start a shell just like that is pretty cool! I had no idea you could do that.
    – Kit Sunde
    Nov 15, 2011 at 14:11
5

The command:

tar -xzvf foo.tar.gz -C /home/user/bar/

will extract the input file "foo.tar.gz", into the directory /home/user/bar, while printing the processed files.

1

Change the directory where you want to extract

cd /u02/restore

if location of the extract file under /u01/backup.tar then

Extract as follows:

cd /u02/restore
tar -xvf /u01/backup.tar
0
tar -xf ancd.tar.gz my/name/file

you can give file name with ./file after tar file.

tar -xf ancd.tar.gz ./my/name/file

if it is working means you have created a tar with ./. use less command to see tar content.

less ...tar.file  
0

I ran into what seems to be a similar issue and have resolved it.

The issue was in the file creation rather than the created file.

When attempting to tar up and transfer a file in dir A, I provided the path to the original file in the tar command

tar -cvf MyFile.tar /foo/bar/dir/not/needed/path/*

What I was able to do to resolve is

cd /foo/bar/dir/not/needed/
tar -cvf /tmp/MyFile.tar path*

On transferring and extracting the tarball, the required subdirs are created.

tar -xvf MyFile.tar

You must log in to answer this question.

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