(isDir, withName bool, src, dst string)
| 50 | } |
| 51 | |
| 52 | func CopyItem(isDir, withName bool, src, dst string) error { |
| 53 | if path.Base(src) != path.Base(dst) && !withName { |
| 54 | dst = path.Join(dst, path.Base(src)) |
| 55 | } |
| 56 | srcInfo, err := os.Stat(path.Dir(src)) |
| 57 | if err != nil { |
| 58 | return err |
| 59 | } |
| 60 | if _, err := os.Stat(dst); err != nil { |
| 61 | if os.IsNotExist(err) { |
| 62 | _ = os.MkdirAll(dst, srcInfo.Mode()) |
| 63 | } |
| 64 | } |
| 65 | matches, err := filepath.Glob(src) |
| 66 | if err != nil { |
| 67 | return err |
| 68 | } |
| 69 | if len(matches) == 0 { |
| 70 | return fmt.Errorf("no files matched %s", src) |
| 71 | } |
| 72 | cmdArgs := append([]string{"-rf"}, matches...) |
| 73 | cmdText := fmt.Sprintf("cp -rf %s %s", strings.Join(matches, " "), dst+"/") |
| 74 | if !isDir { |
| 75 | cmdArgs = append([]string{"-f"}, matches...) |
| 76 | cmdText = fmt.Sprintf("cp -f %s %s", strings.Join(matches, " "), dst+"/") |
| 77 | } |
| 78 | cmdArgs = append(cmdArgs, dst+"/") |
| 79 | stdout, err := cmd.NewCommandMgr(cmd.WithTimeout(60*time.Second)).RunWithStdout("cp", cmdArgs...) |
| 80 | if err != nil { |
| 81 | return fmt.Errorf("handle %s failed, stdout: %s, err: %v", cmdText, stdout, err) |
| 82 | } |
| 83 | return nil |
| 84 | } |
| 85 | |
| 86 | func CopyFileWithRename(src, dst string) error { |
| 87 | srcInfo, err := os.Stat(path.Dir(src)) |
nothing calls this directly
no test coverage detected