Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.
tar -tf filename.tar
folder1/file
folder1/name
[...]

I'd like to extract file and name to, folder2. Can this be done as a one-liner?

share|improve this question

2 Answers 2

up vote 11 down vote accepted

Use -C and --strip-components (See man tar).

Example:

mkdir FOLDER
# for remote tar file
curl -L ’remote_tar_file' | tar -xz - -C FOLDER --strip-components=1

# for local tar file
tar -xz FILENAME -C FOLDER --strip-components=1

Explanation:

The C flag assumes a directory is already in place so the contents of the tar file can be expanded into it. hence the mkdir FOLDER.

The strip-components flag is used when a tar file would naturally expand itself into a folder, let say, like github where it examples to repo-name-master folder. Of course you wouldn’t need the first level folder generated here so strip-components set to 1 would automatically remove that first folder for you. The larger the number is set the deeper nester folders are removed.

share|improve this answer
    
I read man tar. Didn't spot --strip-components. nice one –  Felipe Alvarez May 30 '10 at 6:25
1  
tar-1.14 uses --strip-path, tar-1.14.90+ uses --strip-components. Maybe problem here? –  mmv-ru Jun 26 '11 at 7:42
    
I'd upvote this if it gave an example and not just the switches, as the online manual states, 3 argument styles give rise to confusion. –  Iain Jul 22 at 14:45

You can also use the --transform option for a bit more flexibility. It accepts any sed replacement (s) operation.

For example, this is how I extract a Linux tarball to a new directory so I can apply a patch:

tar -xjf linux-2.6.38.tar.bz2 --transform 's/linux-2.6.38/linux-2.6.38.1/'
share|improve this answer

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.