Merge pull request #84 from otiai10/feature/fix-78

Skip device files by default: Use opt.Specials
tree: 694a3b165540e087b78de49be03c21955f78e199
  1. .github/
  2. test/
  3. .gitignore
  4. all_test.go
  5. copy.go
  6. copy_namedpipes.go
  7. copy_namedpipes_x.go
  8. example_test.go
  9. fileinfo_go1.15.go
  10. fileinfo_go1.16.go
  11. go.mod
  12. go.sum
  13. LICENSE
  14. options.go
  15. patherror_go1.15_test.go
  16. patherror_go1.16_test.go
  17. permission_control.go
  18. preserve_ltimes.go
  19. preserve_ltimes_test.go
  20. preserve_ltimes_x.go
  21. preserve_ltimes_x_test.go
  22. preserve_owner.go
  23. preserve_owner_x.go
  24. preserve_times.go
  25. README.md
  26. stat_times.go
  27. stat_times_darwin.go
  28. stat_times_freebsd.go
  29. stat_times_js.go
  30. stat_times_windows.go
  31. stat_times_x.go
  32. test_setup.go
  33. test_setup_x.go
README.md

copy

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

copy copies directories recursively.

Example Usage

package main

import (
	"fmt"
	cp "github.com/otiai10/copy"
)

func main() {
	err := cp.Copy("your/src", "your/dest")
	fmt.Println(err) // nil
}

Advanced Usage

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

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

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

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

	// PermissionControl can control permission of
	// every entry.
	// When you want to add permission 0222, do like
	//
	//		PermissionControl = AddPermission(0222)
	//
	// or if you even don't want to touch permission,
	//
	//		PermissionControl = DoNothing
	//
	// By default, PermissionControl = PreservePermission
	PermissionControl PermissionControlFunc

	// 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...
opt := Options{
	Skip: func(src string) (bool, error) {
		return strings.HasSuffix(src, ".git"), nil
	},
}
err := Copy("your/directory", "your/directory.copy", opt)

Issues

License

FOSSA Status