Re: tar up a symbolic linked directory
On Sun, May 03, 2009 at 11:23:33PM -0000, Cameron Hutchison wrote:
> "Douglas A. Tutty" <dtutty@vianet.ca> writes:
> >On Sat, May 02, 2009 at 09:04:38PM +0000, T o n g wrote:
> >> I want to tar up a symbolic linked directory as if it is a real
> >> directory. Is there any easy way to do it?
> >>
> >> Let me explain with an example (that you can try):
> >>
> >> mkdir d1
> >> touch d1/{a,b,c}
> >> ln -s c d1/d
> >> ln -s d1 d2
> >>
> >> I want that the result tar file looks like this:
> >>
> >> tar -tvzf d2.tgz
> >> drwxrwx--x tong/tong 0 2009-05-01 09:38 d2/
> >> -rw-rw---- tong/tong 0 2009-05-01 09:37 d2/a
> >> -rw-rw---- tong/tong 0 2009-05-01 09:37 d2/b
> >> -rw-rw---- tong/tong 0 2009-05-01 09:37 d2/c
> >> lrwxrwxrwx tong/tong 0 2009-05-01 09:38 d2/d -> c
> >>
> >> Any easy way to do it?
>
> >add -h to the tar parameters. It dereferences the symbolic lyinks.
> >However, then you won't get the d2/d -> c reference.
>
> I can't see that it would be possible to dereference the top-level
> symlink but no others. No commands that I know of support selective
> symlink dereferencing, except find(1) with -H.
>
> That lead me to try:
> $ find -H d2 | cpio -o -L -H ustar > d2.tar
>
> This comes close, storing d2/d as a link, but as a hardlink, not a
> symlink.
Before we get too far down the garden path, would you review the "why"
of this?
It may be simpler to do it in a couple of steps. Tar up those you want
with the dereferencing, telling tar to ignore those you want without
dereferencing, then do a second tar run without dereferencing, telling
tar to ignore those you did with dereferencing, appending it to the
first tarball.
Doug.
Reply to: