On Sun, May 03, 2009 at 11:23:33PM -0000, Cameron Hutchison wrote: > "Douglas A. Tutty" <dtu...@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. -- To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org