Rename Directory Name Before tar Happens

34,160

Solution 1

Which tar?

GNU Tar accepts a --transform argument, to which you give a sed expression to manipulate filenames.

For example, to rename during unpacking:

tar -zxf my-dir.tar.gz --transform s/my-dir/your-dir/

BSD tar and S tar similarly have an -s argument, taking a simple /old/new/ (not a general sed expression).

Solution 2

For mac works -s flag.

Rename on compress:

tar -zcf my-dir.tar.gz -s /^my-dir/your-dir/ my-dir/*

Rename on extract:

tar -zxf my-dir.tar.gz -s /^my-dir/your-dir/

Solution 3

Late to to the party but here's my time-proven approach to this. When I have a tar file that extracts to a top level directory name I don't like, I solve it by creating the directory name I do like and then using tar with the -C and --strip-component options.

mkdir your-dir && tar -zxvf my-dir.tar.gz -C your-dir --strip-components=1

The -C extracts as if in the directory you specify while the --strip-component says to ignore the first level stored in the tarfile's contents.

At first glance this approach is perhaps less elegant than the sed-style solution given by others, but I think this way does have some merit.

Share:
34,160
moey
Author by

moey

Updated on March 03, 2021

Comments

  • moey
    moey about 3 years

    I have a directory e.g. /var/tmp/my-dir/ that I frequently compress with the following command:

    $ cd /var/tmp/
    $ tar -zcf my-dir.tar.gz my-dir/*
    

    Later, when I untar my-dir.tar.gz, it'll create my-dir/ in the current directory. It sounds like the my-dir directory is "wrapped" inside the tarball. Is there a tar option to rename my-dir to e.g. your-dir before the actual tarring happens. So that ...

    $ tar -zxf my-dir.tar.gz
    # So that ... this creates your-dir/, instead of my-dir/
    

    Thanks.