[lxc-devel] [PATCH 2/2] templates: use hardlink detection in rsync

Serge Hallyn serge.hallyn at canonical.com
Mon Dec 3 18:18:30 UTC 2012


Quoting Dwight Engen (dwight.engen at oracle.com):
> On Mon, 3 Dec 2012 10:47:26 -0600
> Serge Hallyn <serge.hallyn at canonical.com> wrote:
> 
> > Quoting Dwight Engen (dwight.engen at oracle.com):
> > > On Mon, 3 Dec 2012 10:04:13 -0600
> > > Serge Hallyn <serge.hallyn at canonical.com> wrote:
> > > 
> > > > However one question is:  is -H ubiquitous?
> > > 
> > > I'm wondering why we don't just use the cp -a? It seems like cp is
> > > far more likely to be installed than rsync? rootfs_path probably
> > > doesn't already exist so it not like rsync is going to be faster?
> > 
> > The one advantage to me was that 'rsync -va /x/ /y' does the right
> > thing whether or not /y already exists or not.  cp -a does not.  This
> > just left the code tidier.
> > 
> > Is there a nicer clean one-line idiom to do that with cp?
> 
> I think cp -aT does what we want. You might want to add -u also.

Boy, that does not do what I expected based on the documentation, and
having -t and -T invert args didn't help :)  But the little test below
seems to do the right thing.

I'll send a new patch using cp -T, thanks!

#!/bin/bash
rm -rf /tmp/d
mkdir -p /tmp/d/a/e/f
#mkdir -p /tmp/d/b
cp -aT /tmp/d/a /tmp/d/b
find /tmp/d

echo

rm -rf /tmp/d
mkdir -p /tmp/d/a/e/f
mkdir -p /tmp/d/b
cp -aT /tmp/d/a /tmp/d/b
find /tmp/d

echo

rm -rf /tmp/d
mkdir -p /tmp/d/a
touch /tmp/d/a/f
#mkdir -p /tmp/d/b
cp -aT /tmp/d/a /tmp/d/b
find /tmp/d

echo

rm -rf /tmp/d
mkdir -p /tmp/d/a
touch /tmp/d/a/f
ln -s /tmp/d/a/f /tmp/d/a/g
ln /tmp/d/a/f /tmp/d/a/h
mkdir -p /tmp/d/b
cp -aT /tmp/d/a /tmp/d/b
find /tmp/d
ls -li /tmp/d/b

-serge




More information about the lxc-devel mailing list