当我尝试使用 exec
包运行 mv
命令时出现错误。
这是我正在尝试做的一个例子:
cmd := exec.Command("mv", "./source-dir/*", "./dest-dir")
output, err := cmd.CombinedOutput()
cmd.Run()
err 返回以下内容
退出状态 1
输出返回此 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")
该命令有效并成功移动文件,但使用通配符无效。星号似乎没有在命令中用作通配符。这是为什么?在 GO 中还有其他使用通配符的方法吗?如果不是,那么我还能如何将所有文件从 source-dir
递归移动到 dest-dir
?
谢谢
最佳答案
当您在 shell 中键入命令时,shell 获取 ./source_dir/*
并将其替换为所有匹配文件的列表,每个参数一个。 mv
命令查看文件名列表,而不是通配符。
您需要做的是自己做同样的事情(使用 filepath.Glob 返回匹配文件的 []string
),或者调用 shell 以便它可以完成工作(使用 exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir")
)。
关于golang 在终端中运行的 exec 命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31467153/