aferocopy

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 6, 2021 License: MIT Imports: 7 Imported by: 1

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.15

Install

go get github.com/nhatthm/aferocopy

Usage

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

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

Donation

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

Paypal donation

paypal

       or scan this

Documentation

Overview

Package aferocopy provides copy functionalities with afero.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func Copy

func Copy(src, dest string, opt ...Options) error

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

Example
err := Copy("resources/fixtures/data/example", "resources/test/data.copy/example")
fmt.Println("Error:", err)

info, _ := os.Stat("resources/test/data.copy/example") // nolint: errcheck
fmt.Println("IsDir:", info.IsDir())
Output:

Error: <nil>
IsDir: true

Types

type DirExistsAction

type DirExistsAction int

DirExistsAction represents what to do on dest dir.

const (
	// Merge preserves or overwrites existing files under the dir (default behavior).
	Merge DirExistsAction = iota
	// Replace deletes all contents under the dir and copy src files.
	Replace
	// Untouchable does nothing for the dir, and leaves it as it is.
	Untouchable
)

type Options

type Options struct {
	// Source filesystem.
	SrcFs afero.Fs

	// Source filesystem.
	DestFs afero.Fs

	// OnSymlink can specify what to do on symlink.
	OnSymlink func(srcFs afero.Fs, src string) SymlinkAction

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

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

	// AddPermission to every entities,
	// 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
	// contains filtered or unexported fields
}

Options specifies optional actions on copying.

Example
err := Copy(
	"resources/fixtures/data/example",
	"resources/test/data.copy/example_with_options",
	Options{
		Skip: func(srcFs afero.Fs, src string) (bool, error) {
			return strings.HasSuffix(src, ".git-like"), nil
		},
		OnSymlink: func(srcFs afero.Fs, src string) SymlinkAction {
			return Skip
		},
		AddPermission: 0200,
	},
)
fmt.Println("Error:", err)

_, err = os.Stat("resources/test/data.copy/example_with_options/.git-like")
fmt.Println("Skipped:", os.IsNotExist(err))
Output:

Error: <nil>
Skipped: true

type SymlinkAction

type SymlinkAction int

SymlinkAction represents what to do on symlink.

const (
	// Deep creates hard-copy of contents.
	Deep SymlinkAction = iota
	// Shallow creates new symlink to the dest of symlink.
	Shallow
	// Skip does nothing with symlink.
	Skip
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL