[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: