golang 调用linux命令实现对zip的操作

88 篇文章 0 订阅

好久没写文章了,实在是太忙。每周6天,早10晚10, 有时候晚上到11点。

哎,一把辛酸泪。

最近有个需求:我们做的是游戏加速器。目前有上百个客户,每个客户需要有一个对应的zip包。按照以往的设计,可能就是每个客户上传一个zip,但是一个个的去上传是不可能的,几个客户还好,多了的话上传工作量急剧增加。

经部门老大提议:让前端只用上传一个zip(暂且称为原始zip),再利用后台上传逻辑:在上传的时候往这个原始zip里面写个xml的配置文件,客户端的程序去读取zip里面的xml,就能知道每个客户自己对应的zip。

=====也就是在zip包里面添加一个config.xml文件,如果已经存在的,直接删掉,重新添加config.xml

其实这个需求直接使用linux的zip 相关命令,两行就可实现的。

使用zip命令里面删除指定的文件

zip -d 压缩包.zip 指定的文件名

使用zip命令添加指定文件

zip -m 压缩包.zip 指定的文件名

利用go自带的os/exec包里面的api,调用linux命令执行对zip的操作,直接上代码

// 删除指定zip目录下的指定文件
func DeleteFileFromZip(zip, fileName string) (error) {
	cmd := exec.Command("zip", "-d", zip, fileName)
	logger.Info("向zip下删除指定的文件 DeleteFileFromZip", "zip", zip, "file", fileName)
	out, err := cmd.CombinedOutput()
	if err != nil {
		fmt.Println(err)
		logger.Error("删除指定zip目录下的指定文件 DeleteFileFromZip 出错", "err", err.Error(), "zip", zip)
		return errors.New("系统繁忙,请稍后再试")
	}
	fmt.Println(string(out))
	logger.Info("删除指定zip目录下的指定文件", "result", string(out))
	return nil
}
// 向zip下添加指定的文件
func AddFile2Zip(zip, file string) (error) {
	//cmd := exec.Command("cd", basePath)
	// 首先在当前目录下建立指定名称的xml文件
	cmd := exec.Command("zip", "-m", zip, file)
	logger.Info("向zip下添加指定的文件 AddFile2Zip", "zip", zip, "file", file)
	out, err := cmd.CombinedOutput()
	if err != nil {
		logger.Error("向zip下添加指定的文件AddFile2Zip 出错", "err", err.Error(), "zip", zip, "file", file)
		return errors.New("系统繁忙,请稍后再试")
	}
	logger.Info("向zip下添加指定的文件", "result", string(out))
	return nil
}

这里有个注意点:就是在操作zip压缩包的时候,文件应该首先存在,不可只给一个文件名。以上两个func第一个参数都必须给出文件的路径地址。如果只有一个文件名,那么会导致无法向zip添加文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值