为什么 Go 中的 MV 通配符 Exec 命令失败?
当尝试使用 Go 中的 exec 包执行 mv 命令时,如果命令包含用于选择多个文件的通配符星号 (*),您可能会遇到错误。出现此问题的原因是,与 shell 不同,Go 运行时不会将星号解释为通配符。
要解决此问题,您有两个选项:
选项 1:手动展开通配符
您可以使用 filepath.Glob() 函数自行手动扩展通配符,该函数返回一个切片匹配文件路径。操作方法如下:
import ( "filepath/glob" "os/exec" ) cmd := exec.Command("mv") files, err := glob.Glob("./source-dir/*") if err != nil { // Handle error } args := []string{"--", "./dest-dir"} args = append(args, files...) cmd.Args = args output, err := cmd.CombinedOutput()
选项 2:调用 Shell
或者,您可以调用 Shell 并让它为您执行通配符扩展。下面是您的操作方法:
import ( "os/exec" ) cmd := exec.Command("sh", "-c", "mv ./source-dir/* ./dest-dir") output, err := cmd.CombinedOutput()
此方法利用 shell 自己的通配符处理功能。
递归文件移动
如果您需要要将所有文件从一个目录递归移动到另一个目录,可以使用 filepath.Walk() 函数迭代源目录并对遇到的每个子目录和文件执行 mv 命令。
以上是为什么 Go 中的 exec.Command('mv')` 因通配符而失败,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!