Categorygo.nhat.io/aferocopy/v2
modulepackage
2.0.2
Repository: https://github.com/nhatthm/aferocopy.git
Documentation: pkg.go.dev

# README

aferocopy

GitHub Releases Build Status codecov Go Report Card GoDevDoc Donate

aferocopy copies directories recursively using spf13/afero

The idea and logic is ported from otiai10/copy

Prerequisites

  • Go >= 1.17

Install

go get go.nhat.io/aferocopy/v2

Usage

package main

import (
	"fmt"

	"go.nhat.io/aferocopy/v2"
)

func main() {
	err := aferocopy.Copy("your/src", "your/dest", aferocopy.Options{
		// Specify the source and destination fs of your choice, default is afero.OsFs.
		// SrcFs: ...,
		// DestFs: ...,
	})

	fmt.Println(err) // nil
}

Advanced Usage

// Options specifies optional actions on copying.
type Options struct {
	// Source filesystem. Default is afero.NewOsFs().
	SrcFs afero.Fs

	// Source filesystem. Default is Options.SrcFs.
	DestFs afero.Fs

	// 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
}
package main

import (
	"fmt"
	"strings"

	"go.nhat.io/aferocopy/v2"
)

func main() {
	err := aferocopy.Copy("your/src", "your/dest", aferocopy.Options{
		Skip: func(src string) (bool, error) {
			return strings.HasSuffix(src, ".git"), nil
		},
	})

	fmt.Println(err) // nil
}

Donation

If this project help you reduce time to develop, you can give me a cup of coffee :)

Paypal donation

paypal

       or scan this

# Functions

Copy copies src to dest, doesn't matter if src is a directory or a file.

# Constants

Deep creates hard-copy of contents.
Merge preserves or overwrites existing files under the dir (default behavior).
Replace deletes all contents under the dir and copy src files.
Shallow creates new symlink to the dest of symlink.
Skip does nothing with symlink.
Untouchable does nothing for the dir, and leaves it as it is.

# Variables

AddPermission controls the permission of the destination file.
DoNothing do not touch the permission.
PreservePermission preserves the original permission.

# Structs

Options specifies optional actions on copying.

# Type aliases

DirExistsAction represents what to do on dest dir.
PermissionControlFunc is a function that can be used to control the permission of a file or directory while copying.
SymlinkAction represents what to do on symlink.