用服务器自带的unzip命令解压zip包时,经常遇到编码问题,所以用Go写一个zip解压脚本来处理zip包

代码如下:

package mainimport ("archive/zip""bytes""flag""fmt""io""io/ioutil""log""os""path/filepath""golang.org/x/text/encoding/simplifiedchinese""golang.org/x/text/transform")func unzip(zipFile string, destDir string) error {zipReader, err := zip.OpenReader(zipFile)if err != nil {return err}defer zipReader.Close()var decodeName stringfor _, f := range zipReader.File {if f.Flags == 0 {i := bytes.NewReader([]byte(f.Name))decoder := transform.NewReader(i, simplifiedchinese.GB18030.NewDecoder())content, _ := ioutil.ReadAll(decoder)decodeName = string(content)} else {decodeName = f.Name}fpath := filepath.Join(destDir, decodeName)if f.FileInfo().IsDir() {os.MkdirAll(fpath, os.ModePerm)} else {if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {return err}inFile, err := f.Open()if err != nil {return err}defer inFile.Close()outFile, err := os.OpenFile(fpath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())if err != nil {return err}defer outFile.Close()_, err = io.Copy(outFile, inFile)if err != nil {return err}}}return nil}var (src stringdst string)func usage() {fmt.Fprintf(os.Stderr, `gounzip version: gounzip/1.0Usage:gounzip --src='/mnt/a.zip' --dst='/tmp'gounzip --src '/mnt/a.zip' --dst '/tmp'gounzip -src='/mnt/a.zip' -dst='/tmp'gounzip -src '/mnt/a.zip' -dst '/tmp'Options:`)flag.PrintDefaults()}func init() {flag.StringVar(&src, "src", "", "zip file ")flag.StringVar(&dst, "dst", "/tmp", "unzip dir")flag.Usage = usageflag.Parse()}func main() {err := unzip(src, dst)if err != nil {log.Println(err)}}

编译后放到bin目录下

查看帮助:

这里命令行,简单实用了flag,可以用cobra库来替代,优化命令行

解压zip_go|用Go写一个zip解压脚本相关推荐

  1. python写mysql脚本_使用python写一个监控mysql的脚本,在zabbix web上加上模板

    使用python写一个监控mysql的脚本,在zabbix web上加上模板: ##先使用MySQLdb的接口关联数据库. [root@cml python]# cat check_Mysql_cus ...

  2. 用python写一个自动群发微信脚本

    使用 Python 写一个自动群发微信脚本需要使用微信第三方 API 来实现.推荐使用 itchat 库,它提供了简单易用的 API,可以方便地编写微信自动化脚本. 首先,你需要安装 itchat 库 ...

  3. 教大家用按键精灵写一个快手自动抢红包脚本

    教大家用按键精灵写一个快手自动抢红包脚本 先设计好界面,为了节省大家的时间,界面方面我们早就设计好了,请看下面 设计好界面后就进入写代码的步骤,这个其实你可以先录制一遍,然后把录制的代码进行二次修改, ...

  4. python写一个网络测速脚本_Python实现网络测试的脚本分享详解

    这篇文章主要给大家介绍了关于利用Python实现网络测试的方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近同学让我帮忙写一个测试网 ...

  5. HuggingFace Datasets来写一个数据加载脚本

    HuggingFace Datasets上传本地文件作为训练数据 这两天用自己的数据来做训练,看到datasets库中的教程,进行翻译,记下如何使用本地/私有数据集. 文章目录 HuggingFace ...

  6. 用if写一个备份mysql的脚本

    #!/bin/bash # 备份数据库 BAK_DIR=/data/backup/`date +%Y%m%d` MYSQLDB=dexin MYSQLUSER=root MYSQLPW=123456 ...

  7. shell linux中用shell写一个占用CPU的脚本

    使用场景: 向公司申请的虚机资源自己工作用的比较方便,因占用较小basis要求回收掉,现写一个脚本,让CPU跑满一些. 首先看下共有几颗逻辑CPU cat /proc/cpuinfo |grep &q ...

  8. python写一个网络测速脚本_利用Python实现网络测试的脚本分享

    前言 最近同学让我帮忙写一个测试网络的工具.由于工作上的事情,断断续续地拖了很久才给出一个相对完整的版本.其实,我Python用的比较少,所以基本都是边查资料边写程序. 程序的主要逻辑如下: 读取一个 ...

  9. linux spt 脚本,写一个简单的FGO脚本

    前言 正好最近事情比较少,就抓紧时间简单写了一个FGO脚本(API),当初的想法相当简单,就是想写一个abstract的FGO的API来实现对FGO的操作,同时还可以当脚本来用. 思路 因为是关于FG ...

最新文章

  1. 【MATLAB】数据分析之求函数的极限(limit)
  2. python利用WMI监控windows状态如CPU、内存、硬盘
  3. SQL Server远程部署
  4. 一组PHP可逆加密解密算法
  5. VB 二进制数组与十六进制字符串相互转换
  6. 防止html网页被f12抓取,JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码...
  7. ASP.NET 事件日历(some resource about Event Calendar)
  8. Managing Configuration Data Programmatically in ASP.NET 2.0
  9. python题库填空_Python题库
  10. 不属于多媒体计算机应用实例,河北职称计算机应用能力考试试题(九)
  11. 硬盘 主分区 和 逻辑分区 区别
  12. .ps格式的文件怎么打开?
  13. 打开支付宝 html,如何处理支付宝支付后端返回的html代码
  14. SDN控制器的功能及作用—Vecloud
  15. 拥有一把工科生专属的尺子
  16. springboot zipkin调用链
  17. fonttype: Font T1 is of type Type3
  18. python实现调用腾讯云翻译API
  19. android banner 广告,Android convinientbanner顶部广告轮播控件使用详解
  20. win10的WLS环境搭建记录

热门文章

  1. 07-主队列和全局队列
  2. Eureka服务注册中心
  3. android 广播机制
  4. MySQL之简单示例
  5. 单点登录与权限管理本质:session和cookie介绍
  6. C# richtextbox 自动下拉到最后 方法 RichTextBox读取txt中文后出现乱码
  7. Android进阶笔记:Messenger源码详解
  8. java中读取properties文件内容五种方式
  9. 软件框架设计的艺术----读书总结
  10. rpm、yum、编译安装轻松管理centos7程序包