tar -tf filename.tar

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

2 Answers 2


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


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

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


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 nested folders are removed.

  • I read man tar. Didn't spot --strip-components. nice one May 30, 2010 at 6:25
  • 1
    tar-1.14 uses --strip-path, tar-1.14.90+ uses --strip-components. Maybe problem here? Jun 26, 2011 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.
    – ian
    Jul 22, 2014 at 14:45
  • Forgot the -f on tar -xz, me thinks. Failed for me. I thought I'd been using that for no reason all this time... Dec 4, 2018 at 20:14
  • 1
    When the output of curl is piped into tar, there should be no single hyphen parameter (i.e., instead of -xz - -C it should just read -xz -C). A single hyphen usually acts as a filename and refers to using stdin instead of a file, but without a -f tar already uses stdin without an explicit -. In fact, it does not expect any filename in this case and providing one (even -) will trigger an error.
    – Zoltan
    Jan 16, 2020 at 13:24

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-'

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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