在 Go 和 Bash 中执行 mv 命令的方式不同
在 Go 中,使用 exec 包执行 mv 命令可能会导致使用时出现问题命令参数中的通配符如“*”。虽然该命令在终端中按预期工作,但星号通配符似乎在 Go 脚本中不起作用。
这种差异的原因在于 shell 和 Go 处理命令参数的方式。在终端中,shell 解释通配符并将其替换为匹配文件名列表。但是,在 Go 中,命令作为字符串传递,并且它会将通配符视为参数的一部分。
要解决此问题,您有两个选项:
手动扩展通配符
你可以使用Go的filepath.Glob函数来获取与通配符匹配的文件列表模式,然后将各个文件名作为参数传递给 exec.Command。例如:
files, err := filepath.Glob("./source-dir/*") if err != nil { // Error handling } cmd := exec.Command("mv", files, "./dest-dir")
使用 Shell 调用
您可以调用 shell 本身来执行带有通配符的 mv 命令。 shell 将解释通配符并将扩展参数传递给 mv 命令。例如:
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
通过使用其中一种方法,您可以确保在 Go 脚本中正确处理通配符,从而允许您按预期执行 mv 命令。
以上是为什么带通配符的'mv”在 Go 和 Bash 中表现不同?的详细内容。更多信息请关注PHP中文网其他相关文章!