tar xf foo -- how to restore symlink?

Gary Aitken freebsd at dreamchaser.org
Thu Apr 19 02:21:20 UTC 2018


On 04/17/18 22:30, Polytropon wrote:
> 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?

no, they didn't seem appropriate

> -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.

The archive is relative, not absolute

> -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.

Creates duplicate directories, rather than a symlink.

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

Did that, didn't find anything useful.
But then I don't always read so well, much less comprehend...
That's why I asked :-)

Gary


More information about the freebsd-questions mailing list