Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var Cmd = &cli.Command{ Name: "cp", Usage: "Copy files and directories", Flags: []cli.Flag{ &cli.BoolFlag{Name: "recursive", Aliases: []string{"r"}, Usage: "Copy directories recursively"}, &cli.BoolFlag{Name: "interactive", Aliases: []string{"i"}, Usage: "Prompt before overwrite"}, &cli.BoolFlag{Name: "verbose", Aliases: []string{"v"}, Usage: "Print source/destination paths"}, }, Action: func(ctx context.Context, cmd *cli.Command) error { recursive := cmd.Bool("recursive") interactive := cmd.Bool("interactive") verbose := cmd.Bool("verbose") files := cmd.Args().Slice() if len(files) < 2 { return fmt.Errorf("missing file operand") } source := files[:len(files)-1] dest := files[len(files)-1] destInfo, err := os.Stat(dest) if err != nil { if os.IsNotExist(err) { if len(source) != 1 { return fmt.Errorf("target '%s' is not a directory", dest) } dest = filepath.Join(filepath.Dir(dest), filepath.Base(source[0])) } else { return err } } else if destInfo.IsDir() { for _, s := range source { dest = filepath.Join(dest, filepath.Base(s)) } } if len(source) == 1 { return copyFile(source[0], dest, recursive, interactive, verbose) } for _, s := range source { d := filepath.Join(dest, filepath.Base(s)) if err := copyFile(s, d, recursive, interactive, verbose); err != nil { return err } } return nil }, }
Functions ¶
This section is empty.
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.