Skip to content

nhatthm/aferocopy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

63 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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