解压zip_go|用Go写一个zip解压脚本
用服务器自带的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目录下
查看帮助:
![](/assets/blank.gif)
这里命令行,简单实用了flag,可以用cobra库来替代,优化命令行
解压zip_go|用Go写一个zip解压脚本相关推荐
- python写mysql脚本_使用python写一个监控mysql的脚本,在zabbix web上加上模板
使用python写一个监控mysql的脚本,在zabbix web上加上模板: ##先使用MySQLdb的接口关联数据库. [root@cml python]# cat check_Mysql_cus ...
- 用python写一个自动群发微信脚本
使用 Python 写一个自动群发微信脚本需要使用微信第三方 API 来实现.推荐使用 itchat 库,它提供了简单易用的 API,可以方便地编写微信自动化脚本. 首先,你需要安装 itchat 库 ...
- 教大家用按键精灵写一个快手自动抢红包脚本
教大家用按键精灵写一个快手自动抢红包脚本 先设计好界面,为了节省大家的时间,界面方面我们早就设计好了,请看下面 设计好界面后就进入写代码的步骤,这个其实你可以先录制一遍,然后把录制的代码进行二次修改, ...
- python写一个网络测速脚本_Python实现网络测试的脚本分享详解
这篇文章主要给大家介绍了关于利用Python实现网络测试的方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 前言 最近同学让我帮忙写一个测试网 ...
- HuggingFace Datasets来写一个数据加载脚本
HuggingFace Datasets上传本地文件作为训练数据 这两天用自己的数据来做训练,看到datasets库中的教程,进行翻译,记下如何使用本地/私有数据集. 文章目录 HuggingFace ...
- 用if写一个备份mysql的脚本
#!/bin/bash # 备份数据库 BAK_DIR=/data/backup/`date +%Y%m%d` MYSQLDB=dexin MYSQLUSER=root MYSQLPW=123456 ...
- shell linux中用shell写一个占用CPU的脚本
使用场景: 向公司申请的虚机资源自己工作用的比较方便,因占用较小basis要求回收掉,现写一个脚本,让CPU跑满一些. 首先看下共有几颗逻辑CPU cat /proc/cpuinfo |grep &q ...
- python写一个网络测速脚本_利用Python实现网络测试的脚本分享
前言 最近同学让我帮忙写一个测试网络的工具.由于工作上的事情,断断续续地拖了很久才给出一个相对完整的版本.其实,我Python用的比较少,所以基本都是边查资料边写程序. 程序的主要逻辑如下: 读取一个 ...
- linux spt 脚本,写一个简单的FGO脚本
前言 正好最近事情比较少,就抓紧时间简单写了一个FGO脚本(API),当初的想法相当简单,就是想写一个abstract的FGO的API来实现对FGO的操作,同时还可以当脚本来用. 思路 因为是关于FG ...
最新文章
- 【MATLAB】数据分析之求函数的极限(limit)
- python利用WMI监控windows状态如CPU、内存、硬盘
- SQL Server远程部署
- 一组PHP可逆加密解密算法
- VB 二进制数组与十六进制字符串相互转换
- 防止html网页被f12抓取,JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码...
- ASP.NET 事件日历(some resource about Event Calendar)
- Managing Configuration Data Programmatically in ASP.NET 2.0
- python题库填空_Python题库
- 不属于多媒体计算机应用实例,河北职称计算机应用能力考试试题(九)
- 硬盘 主分区 和 逻辑分区 区别
- .ps格式的文件怎么打开?
- 打开支付宝 html,如何处理支付宝支付后端返回的html代码
- SDN控制器的功能及作用—Vecloud
- 拥有一把工科生专属的尺子
- springboot zipkin调用链
- fonttype: Font T1 is of type Type3
- python实现调用腾讯云翻译API
- android banner 广告,Android convinientbanner顶部广告轮播控件使用详解
- win10的WLS环境搭建记录