def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
    Entry_.new(src, nil, dereference_root).traverse do |ent|
      destent = Entry_.new(dest, ent.rel, false)
      File.unlink destent.path if remove_destination && File.file?(destent.path)
      ent.copy destent.path
      ent.copy_metadata destent.path if preserve
    end
  end
Copies a file system entry +src+ to +dest+.
If +src+ is a directory, this method copies its contents recursively.
This method preserves file types, c.f. symlink, directory...
(FIFO, device files and etc. are not supported yet)

Both of +src+ and +dest+ must be a path name.
+src+ must exist, +dest+ must not exist.

If +preserve+ is true, this method preserves owner, group, permissions
and modified time.

If +dereference_root+ is true, this method dereference tree root.

If +remove_destination+ is true, this method removes each destination file before copy.