=== Relative file names in a tar archive ===
==== Problem ====
If we tar the following directory
% tree --charset=unicode /tmp/expt
/tmp/expt
`-- insurance
|-- auto.txt
|-- condo.txt
`-- rv.txt
1 directory, 3 files
using
% tar czvf insurance.tgz /tmp/expt/insurance
tar: Removing leading `/' from member names
/tmp/expt/insurance/
/tmp/expt/insurance/auto.txt
/tmp/expt/insurance/rv.txt
/tmp/expt/insurance/condo.txt
then the file names in the .tgz contain the whole path releative to '/'.
% tar tzvf insurance.tgz
drwxr-xr-x rajulocal/rajulocal 0 2020-12-04 10:25 tmp/expt/insurance/
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 tmp/expt/insurance/auto.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 tmp/expt/insurance/rv.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 tmp/expt/insurance/condo.txt
But I want the paths to be relative to the 'insurance' directory. Something like
drwxr-xr-x rajulocal/rajulocal 0 2020-12-04 10:25 insurance/
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/auto.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/rv.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/condo.txt
==== Solution ====
Use the -C option while creating the tar archive.
% tar czvf insurance2.tgz -C /tmp/expt insurance
insurance/
insurance/auto.txt
insurance/rv.txt
insurance/condo.txt
Test the new archive.
% tar tzvf insurance2.tgz
drwxr-xr-x rajulocal/rajulocal 0 2020-12-04 10:25 insurance/
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/auto.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/rv.txt
-rw-r--r-- rajulocal/rajulocal 0 2020-12-04 10:25 insurance/condo.txt
==== How it works ====
From the man page
% man tar
...
-C, --directory=DIR
Change to DIR before performing any operations. This option is order-sensitive, i.e. it affects all
options that follow.
==== Miscellaneous ====
Tested on Debian Buster using
% tar --version
tar (GNU tar) 1.30
tags | extract files relative to a directory