当我试图使用exec包运行mv命令时,我遇到了一个错误.

以下是我正在try 做的一个示例:

cmd := exec.Command("mv", "./source-dir/*", "./dest-dir")
output, err := cmd.CombinedOutput()

cmd.Run()

err返回以下内容

输出返回此mv: rename ./source-dir/* to ./dest-dir/*: No such file or directory

当我更改此行时,我实际上可以让脚本工作:

cmd := exec.Command("mv", "./source-dir/*", "./dest-dir")

至以下各项:

cmd := exec.Command("mv", "./source-dir/file.txt", "./dest-dir")

该命令可以工作并成功移动文件,但使用通配符不起作用.在命令中,星号似乎没有用作通配符.为什么?围棋中还有其他使用通配符的方法吗?如果不是的话,我怎样才能递归地将所有文件从source-dir移到dest-dir

谢谢

推荐答案

当您在shell中键入命令时,shell将获取./source_dir/*,并将其替换为匹配的所有文件的列表,每个参数一个.mv命令查看文件名列表,而不是通配符.

您需要做的是自己做同样的事情(使用filepath.Glob返回[]string个匹配的文件),或者调用shell以便它可以完成工作(使用exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir")).

Go相关问答推荐

如何复制*C.char?

具有GRPC的RBAC(基于角色的访问控制)-网关生成的REST风格的API

如何用Golang解码这个嵌套的json?

JWT 如何解析声明有效性和错误?

生成一个 CSV/Excel,在 Golang 中该列的下拉选项中指定值

使用golang sqlc中的引用参数

无法使用带有 422 的 go-github 创建提交 - 更新不是快进

如何在 gocql 中设置最大池大小?

Get 请求在 Thunder 客户端/Postman 中返回数据,但在 Golang 代码中给出空白数据

设置指向空接口的指针

确保 Go 1.20 编译时的严格可比性?

如何在 Docker 容器中使用私有存储库进行身份验证

获取切片元素的地址是否意味着 Go 中元素的副本?

使用go doc命令查看示例函数?

如果服务器在客户端的 gRPC 中不可用,则等待的方法

函数调用中的类型参数panic

GoLang 遍历 yaml 文件

Go GCP 同时模拟两个服务帐户

手动将 OpenTelemetry 上下文从 golang 提取到字符串中?

如何访问 Go 模板中数组的第一个索引的值