tar xf foo -- how to restore symlink?

Polytropon freebsd at edvax.de
Wed Apr 18 04:30:19 UTC 2018

On Tue, 17 Apr 2018 22:20:23 -0600, Gary Aitken wrote:
> I've got a tarball with an archived symlink and its contents.
> The symlink points to another directory in the tarball, and the
> tarball contains copies of the files in the symlinked directory.
> A normal extract fails with the message:
> $ tar -xf nufraw-0.41.tar.gz
> nufraw-0.41/doc-pak: Can't replace existing directory with non-directory
> What's the right way to deal with this?
> How do I get tar to restore the symlink as a symlink?
>    -k and --exclude allow tar to continue unpacking,
>    but don't restore the symlink as such.
> "man tar" doesn't seem to have what I want but I'm probably blind.

Have you checked if -P or -U result in the intended behaviour?

     -P, --absolute-paths
             Preserve pathnames.  By default, absolute pathnames (those that
             begin with a / character) have the leading slash removed both
             when creating archives and extracting from them.  Also, tar will
             refuse to extract archive entries whose pathnames contain .. or
             whose target directory would be altered by a symlink.  This
             option suppresses these behaviors.

     -U, --unlink, --unlink-first
             (x mode only) Unlink files before creating them.  This can be a
             minor performance optimization if most files already exist, but
             can make things slower if most files do not already exist.  This
             flag also causes tar to remove intervening directory symlinks
             instead of reporting an error.  See the SECURITY section below
             for more details.

Check "man tar" for "symlink". :-)

Magdeburg, Germany
Happy FreeBSD user since 4.0
Andra moi ennepe, Mousa, ...

More information about the freebsd-questions mailing list