Categorygithub.com/iotanbo/copy
repositorypackage
1.7.0-advcopy
Repository: https://github.com/iotanbo/copy.git
Documentation: pkg.go.dev

# README

copy

Go Reference Actions Status codecov License: MIT FOSSA Status CodeQL Go Report Card GitHub tag (latest SemVer) Docker Test Vagrant Test

Copy files and directories with advanced options. This is a modified version of https://github.com/otiai10/copy.

Overwrite modes are changed to following:

// NoOverwrite does nothing if destination exists (default behavior).
NoOverwrite DestExistsAction = iota
// Merge leaves existing items intact and only copies items that do not exist in dest.
Merge
// OverwriteIntersection overwrites existing common items but leaves
// those unique to destination intact.
OverwriteIntersection
// OverwriteFull deletes destination and then copies source items.
OverwriteFull

Example Usage

err := Copy("your/directory", "your/directory.copy")

Advanced Usage

// Options specifies optional actions on copying.
type Options struct {

	// OnSymlink can specify what to do on symlink
	OnSymlink func(src string) SymlinkAction

	// OnDestExists can specify what to do when there is a directory already existing in destination.
	OnDestExists func(src, dest string) DestExistsAction

	// Skip can specify which files should be skipped
	Skip func(src string) (bool, error)

	// AddPermission to every entry,
	// NO MORE THAN 0777
	AddPermission os.FileMode

	// Sync file after copy.
	// Useful in case when file must be on the disk
	// (in case crash happens, for example),
	// at the expense of some performance penalty
	Sync bool

	// Preserve the atime and the mtime of the entries
	// On linux we can preserve only up to 1 millisecond accuracy
	PreserveTimes bool

	// Preserve the uid and the gid of all entries.
	PreserveOwner bool

	// The byte size of the buffer to use for copying files.
	// If zero, the internal default buffer of 32KB is used.
	// See https://golang.org/pkg/io/#CopyBuffer for more information.
	CopyBufferSize uint
}
// For example...
import (
	// go get github.com/iotanbo/[email protected]
	advcopy "github.com/iotanbo/copy"
)
opt := advcopy.Options{
	OnDestExists: func(src, dest string) advcopy.DestExistsAction {
		return advcopy.Merge
	},
}
err := advcopy.Copy("your/directory", "your/directory.copy", opt)