How do I untar a subdirectory into the current directory?

UnixCommand LineTar

Unix Problem Overview


How to I extract a subdirectory in a tarball into the current directory?

Example, the tarball from wordpress:

wordpress/
wordpress/wp-trackback.php
wordpress/wp-config-sample.php
wordpress/wp-settings.php
wordpress/wp-rss2.php
wordpress/readme.html
wordpress/index.php
...

How do I extract everything under wordpress/ into the current directory? In otherwords, it will not create a wordpress directory.

I've tried this with no luck:

tar xvfz latest.tar.gz wordpress -C ./

I know I can extract it normally and move it back, but I figure there has to be a way to do it in one shot.

Unix Solutions


Solution 1 - Unix

Why don't you untar normally, then just:

mv wordpress/.* .
mv wordpress/* .
rmdir wordpress

But alas, there's:

tar --strip-components=1 -zxvf wordpress.tgz

Solution 2 - Unix

Surprisingly, my tar (GNU tar v1.16) doesn't have an option to strip initial pathname elements.

However, it seems that more recent versions sport a --strip-components=number parameter, which will strip that many compononents from the start of the path.

If like me you are using an older tar, and you are certain that the archive does not contain a directory or file named wordpress/wordpress, you could always just make a symlink from wordpress to ., then extract as usual:

ln -s . wordpress
tar xvfz latest.tar.gz wordpress
rm wordpress

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCory R. KingView Question on Stackoverflow
Solution 1 - UnixkchView Answer on Stackoverflow
Solution 2 - Unixj_random_hackerView Answer on Stackoverflow