首页 > 后端开发 > Golang > 为什么 Go 中的 exec.Command('mv')` 因通配符而失败,如何修复它?

为什么 Go 中的 exec.Command('mv')` 因通配符而失败,如何修复它?

Patricia Arquette
发布: 2024-12-31 19:49:13
原创
346 人浏览过

Why Does `exec.Command(

为什么 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板