Ai
1 Star 0 Fork 0

Exi/GO-Makefile 命令简化工具

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
cp.go 2.03 KB
一键复制 编辑 原始数据 按行查看 历史
Exi 提交于 2025-07-10 04:07 +08:00 . 注释调整
package cmd
import (
"errors"
"fmt"
"os"
"path/filepath"
"strings"
"gitee.com/exi-red/maketools/util"
"github.com/otiai10/copy"
"github.com/spf13/cobra"
)
// 子命令 cp
const cp = "cp"
// 参数 要拷贝的目录
var cpFlagSources = Params{
Name: "sources",
Shorthand: "s",
Value: "",
Usage: "要拷贝的目录(支持多个),半角逗号分隔",
}
// 参数 目标目录
var cpFlagTarget = Params{
Name: "target",
Shorthand: "t",
Value: "",
Usage: "目标目录",
}
// 注册子命令 cp
var cpCmd = &cobra.Command{
Use: cp,
Short: `复制资源文件到指定目录`,
Example: fmt.Sprintf(
` %s %s --%s "./dir,/path/to/dir,..." --%s "./dir|/path/to/dir"`,
ROOTNAME,
cp,
cpFlagSources.Name,
cpFlagTarget.Name,
),
Run: func(cmd *cobra.Command, args []string) {
// 处理器执行
err := cpHanlder(cmd)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
},
}
// 初始化
func init() {
// 注册参数
StringP(cpCmd, cpFlagSources)
StringP(cpCmd, cpFlagTarget)
// 添加到主命令
rootCmd.AddCommand(cpCmd)
}
// 复制资源处理器
func cpHanlder(cmd *cobra.Command) error {
// 源目录
source, _ := cmd.Flags().GetString(cpFlagSources.Name)
if source == "" {
return errors.New("source directory not specified")
}
// 目标目录
target, _ := cmd.Flags().GetString(cpFlagTarget.Name)
if target == "" {
return errors.New("target directory not specified")
}
// 解析源目录
sources := strings.Split(source, ",")
sourcesPath := make([]string, 0)
for _, source := range sources {
source = util.PathFormat(source)
// 路径不存在
_, err := os.Stat(source)
if os.IsNotExist(err) {
continue
}
if source != "" {
sourcesPath = append(sourcesPath, source)
}
}
// 解析目标目录
target = util.PathFormat(target)
for _, src := range sources {
// 在目标目录下创建与源目录同名的子目录
dst := filepath.Join(target, filepath.Base(src))
err := copy.Copy(src, dst)
if err != nil {
return err
}
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/exi-red/maketools.git
git@gitee.com:exi-red/maketools.git
exi-red
maketools
GO-Makefile 命令简化工具
v1.0.13

搜索帮助