尝试使用exec程序包运行mv命令时出现错误。
exec
mv
这是我要执行的操作的一个示例:
cmd := exec.Command("mv", "./source-dir/*", "./dest-dir") output, err := cmd.CombinedOutput() cmd.Run()
err返回以下内容 exit status 1
exit status 1
输出返回此 mv: rename ./source-dir/* to ./dest-dir/*: No such file or directory
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?
source- dir
dest-dir
谢谢
在外壳程序上键入命令时,外壳程序将./source_dir/*使用所有匹配文件的列表并将其替换,每个参数一个。该mv命令将看到文件名列表,而不是通配符。
./source_dir/*
您需要做的是自己做同一件事(使用filepath.Glob返回[]string匹配文件的a),或者调用外壳程序使其能够完成工作(使用exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir"))。
[]string
exec.Command("/bin/sh", "-c", "mv ./source_dir/* ./dest_dir")