actually, Ninth edition has a -z flag to cp that creates holes in the destination if they may have been in the source. (of course, user-level programs can't tell.) it works well.