在 Go 中,exec 包用于执行外部命令。尝试使用通配符 ('./source-dir/*') 运行“mv”命令时,会出现“退出状态 1”错误,输出显示“没有此类文件或目录”。然而,在带有通配符的终端中运行相同的命令会成功。
与 shell 不同,shell 解释通配符并将其扩展为匹配的列表文件中,exec 包将通配符字面上视为单个参数。这意味着“mv”命令看到的是通配符(“*”)而不是文件名列表。
要在 Go 中使用通配符,有两种方法:
import "path/filepath" files, err := filepath.Glob("./source-dir/*") if err != nil { // Handle error } cmd := exec.Command("mv", files...)
cmd := exec.Command("/bin/sh", "-c", "mv ./source-dir/* ./dest-dir")
要将所有文件从源目录递归移动到目标目录,您需要递归地迭代源目录,然后移动找到的每个文件或目录。如果源包含子目录,您可以递归地移动每个子目录,或者使用像 os 这样提供移动树功能的包。
以上是为什么我的 Go `exec.Command` 由于通配符而失败,而终端却成功?的详细内容。更多信息请关注PHP中文网其他相关文章!