how to rename files you put into a tar archive using linux 'tar'

B T picture B T · Feb 14, 2014 · Viewed 31.8k times · Source

I'm trying to create a tar archive with a couple files, but rename those files in the archive. Right now I have something like this:

tar -czvf file1 /some/path/to/file2 file3 etc

But I'd like to do something like:

tar -czvf file1=file1 /some/path/to/file2=file2 file3=path/to/renamedFile3 etc=etc

Where, when extracted into directory testDir, you would see the files:

  • testDir/file1
  • testDir/file2
  • testDir/path/to/renamedFile3
  • testDir/etc

How can I do this?

Answer

user2845360 picture user2845360 · Feb 15, 2014

You can modify filenames (among other things) with --transform. For example, to create a tape archive /tmp/foo.tar, putting files /etc/profile and /etc/bash.bashrc into it while also renaming profile to foo, you can do the following:

tar --transform='flags=r;s|bar|foo|' -cf file.tar file1 file2 bar fubar /dir/*

Results of the above is that bar is added to file.tar as foo.

The r flag means transformations are applied to regular files only. For more information see GNU tar documentation.

You can use --transform multiple times, for example:

tar --transform='flags=r;s|foo|bar|' --transform='flags=r;s|baz|woz|' -cf file.tar /some/dir/where/foo/is /some/dir/where/baz/is /other/stuff/* /dir/too