Linux – Tar dereference only 1 level

linuxsymbolic-linktar

I use the following pseudo-script to create a TAR of my installed software

mkdir tmp
ln -s /path/to/app1/bin              tmp/app1
ln -s /and/path/going/to/the-app-2   tmp/app2
tar -c --dereference -f apps.tar tmp

I need the --dereference option here to follow the links I just made in tmp. The reason I make the links in the first place is to store the directories with a different name in the archive than they have on the filesystem.

Until now it has worked fine. However, I now have the situation that /path/to/app1 also contains links, and those I don't want to follow.

Is this possible with some changes to the tar command? Or do I need to completely switch around the way I build the archive?

Best Answer

I don't think there is a way to do have just a partial dereference. You could do something like

tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2

and then to extract them to a different root using -C

-C, --directory=DIR

         change to directory DIR

e.g.

mkdir tmp
tar -C tmp -xf apps.tar

which would have a similar effect to the way you currently create your archive.

You can use the -C to point to any existing directory too.