Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

How can we extract specific files from a large tar.gz file? I found the process of extracting files from a tar in Untar only a certain number of files from a large tarball but, when i tried the mentioned command there, i got the error:

$ tar --extract --file={test.tar.gz} {extract11}

tar: {test.tar.gz}: Cannot open: No such file or directory

tar: Error is not recoverable: exiting now

How do i extract a file from tar.gz then?

share|improve this question

3 Answers 3

Let's assume you have a tarball called lotsofdata.tar.gz and you just know there is one file in there you want but all you can remember is that its name contains the word contract. You have two options:

Either use tar and grep to list the contents of your tarball so you can find out the full path and name of any files that match the part you know, and then use tar to extract that one file now you know its exact details, or you can use two little known switches to just extract all files that match what little you do know of your file name—you don't need to know the full name or any part of its path for this option. The details are:

Option 1

$ tar -tzf lotsofdata.tar.gz | grep contract

This will list the details of all files whose names contain your known part. Then you extract what you want using:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

You may need ./ in front of your path for it to work.

Option 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

Up to you which you find easier or most useful.

share|improve this answer
    
Drat. A typo on that last command: I duplicated -xzf. There should only be one instance of those switches. –  Wendy Cricks Aug 10 at 0:19

Your example works for me if you omit the braces

$ tar --extract --file=test.tar.gz extract11

If your file extract11 is in a subfolder, you should specify the path within the tarball.

$ tar --extract --file=test.tar.gz subfolder/extract11
share|improve this answer
    
$ tar --extract --file=test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors –  Ankit Vashistha Jan 16 '13 at 7:51
    
Then obiously extract11 is not in the tar-file. Be sure that you need to provide the relative path. See edit –  Bernhard Jan 16 '13 at 7:59

you can also use tar -zxvf <tar filename> <file you want to extract>

-x: instructs tar to extract files.
-f: specifies filename / tarball name.
-v: Verbose (show progress while extracting files).
-z: filter archive through gzip, use to decompress .gz files.
share|improve this answer
    
$ tar -zxvf test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors –  Ankit Vashistha Jan 16 '13 at 7:52
    
then try this tar tf archive.tar.gz | grep extract11.please check whether extract11 is in the archive or not –  harish.venkat Jan 16 '13 at 8:06
    
You must write the file name exacty as tar ztf test.tar.gz shows it. If it says e.g. ./extract11, or some/bunch/of/dirs/extract11, that's what you have to give (and the file will show up under exactly that name, needed directories are created automatically). –  vonbrand Jan 21 '13 at 20:16

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.