Le 23 août 2013 20:40, "Bastien ROUCARIES" <roucaries.bast...@gmail.com> a
écrit :
>
> Le 21 août 2013 08:04, "Raphael Hertzog" <hert...@debian.org> a écrit :
>
> >
> > Hi,
> >
> > On Tue, 20 Aug 2013, Bastien ROUCARIES wrote:
> > > > A possible way to do this could be:
> > > > * Move the directory away in preinst (<dir>.dpkg-backup), put in
place a symlink
> > > >   pointing to the renamed directory
> > > ok this is easy
> > > > * In postinst, move remaining files from the temporary directory to
> > > >   the directory pointed by the symlink (except if there's already a
new
> > > >   file at the expected location, in that case warn about the
conflict
> > > >   and leave the file).
> > >
> > > How can I do this ? mv -n is not portable, and if I use find how to
> > > handle symlink ?
> >
> > mymove() {
> >     local origin=$1
> >     local target=$2
> >     while read path; do
> >         # do the work for each file here
> >     done
> > }
> Not safe if a filename include a new line...
>
> Find -print0
>
> And replacing read by read -r -d $'\0' is safer but I do not know if it
is portable.
>
> Or xargs but we need to fork for each file and we get the portability
problem of find print0.
>
> What do you prefer ?

For find it is not a problem:
Find - exec printf %s\0 +

And I could test for portability problem of + if needed.

And for read I could use in case of problem dd in order to read byte by
byte.

Bastien

>
> > find $origin | mymove $origin $target
> >
> > You can use compute the relative path names by stripping $origin from
the
> > stard and you can do whatever checks you want with "test".
> >
> > > Should I check if md5sum are the same in case of conflicts and
> > > override in this case ?
> >
> > I would not override but it's interesting to compare the files
> > yes. That way we can avoid complaining about a conflict when in fact
> > both files are identical. And we can silently drop our copy.
> >
> > Cheers,
> > --
> > Raphaël Hertzog ◈ Debian Developer
> >
> > Discover the Debian Administrator's Handbook:
> > → http://debian-handbook.info/get/

Reply via email to