小编典典

golang无法在终端上运行的exec命令

go

尝试使用exec程序包运行mv命令时出现错误。

这是我要执行的操作的一个示例:

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

cmd.Run()

err返回以下内容 exit status 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- dirdest-dir

谢谢


阅读 838

收藏
2020-07-02

共1个答案

小编典典

在外壳程序上键入命令时,外壳程序将./source_dir/*使用所有匹配文件的列表并将其替换,每个参数一个。该mv命令将看到文件名列表,而不是通配符。

您需要做的是自己做同一件事(使用filepath.Glob返回[]string匹配文件的a),或者调用外壳程序使其能够完成工作(使用exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir"))。

2020-07-02