12

When I do the following:

tar czvf ../myarchive.tar.gz ./

I get a single (annoying) root folder in my tar archive:

annoying

How do I remove this awful period when creating the archive?

2
  • This Stack Overflow answer might help you.
    – n.st
    Jul 11 '14 at 22:41
  • 3
    Or use --transform/--xform, as suggested by Magnus: tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
    – n.st
    Jul 11 '14 at 22:46
11

The dot appears because tar creates the path structure the way you give in the arguments. So as you have given . as the source, the archive also is created in the same structure.

You can try this and check:

tar -czvf ../myarchive.tar.gz *

Updating the answer with help from the comment by n.st

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./
3
  • 2
    The * glob won't match hidden files.
    – n.st
    Jul 11 '14 at 22:47
  • 1
    :D eh..just a beginer..didnt realize.
    – beginer
    Jul 11 '14 at 22:49
  • You could use some more bash globs to include hidden files — have a look over here.
    – n.st
    Jul 11 '14 at 22:52
6

You don't.

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(Note: this doesn't work if your shell has current directory symbolic link tracking turned on and the current directory is accessed via a symbolic link.)

Yes, this isn't what you asked, but this is what you should do. Archives that expand a lot of files in the current directory are annoying: it puts the burden of creating a target directory for the file on each person who unpacks the archive, and if they accidentally unpack them in a non-empty directory, it's hard to clean up. Most of the time, an archive should create a single toplevel directory whose name is the base name of the archive.

1
  • Understood. If I recall correctly, it's just really annoying to have to do an extra step to untar an archive into a specific directory (eg tar xzvf archive.tar.gz && mv archive/* /output vs. unzip archive.zip -d /output) Jul 14 '14 at 16:45
1

better add ^ before the preceding .

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

OR, all "/" in the full pathname inside the archive will be removed unless "/" is the end of the full pathname.

1

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.