`
DarkWingBoy
  • 浏览: 50275 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

golang压缩,解压tar.gz文件

 
阅读更多

http://www.dotcoo.com/golang-tar-gzip

golang处理压缩包,我最常用的就是tar.gz了,所以今天写了一个测试一下.代码放这里以后浏览.

压缩文件

package main
  
import (
    "fmt"
    "os"
    "io"
    "archive/tar"
    "compress/gzip"
)
  
func main() {
    // file write
    fw, err := os.Create("tar/lin_golang_src.tar.gz")
    if err != nil {
        panic(err)
    }
    defer fw.Close()
  
    // gzip write
    gw := gzip.NewWriter(fw)
    defer gw.Close()
  
    // tar write
    tw := tar.NewWriter(gw)
    defer tw.Close()
  
    // 打开文件夹
    dir, err := os.Open("file/")
    if err != nil {
        panic(nil)
    }
    defer dir.Close()
  
    // 读取文件列表
    fis, err := dir.Readdir(0)
    if err != nil {
        panic(err)
    }
  
    // 遍历文件列表
    for _, fi := range fis {
        // 逃过文件夹, 我这里就不递归了
        if fi.IsDir() {
            continue
        }
  
        // 打印文件名称
        fmt.Println(fi.Name())
  
        // 打开文件
        fr, err := os.Open(dir.Name() + "/" + fi.Name())
        if err != nil {
            panic(err)
        }
        defer fr.Close()
  
        // 信息头
        h := new(tar.Header)
        h.Name = fi.Name()
        h.Size = fi.Size()
        h.Mode = int64(fi.Mode())
        h.ModTime = fi.ModTime()
  
        // 写信息头
        err = tw.WriteHeader(h)
        if err != nil {
            panic(err)
        }
  
        // 写文件
        _, err = io.Copy(tw, fr)
        if err != nil {
            panic(err)
        }
    }
  
    fmt.Println("tar.gz ok")
}

解压文件

package main
  
import (
    "fmt"
    "os"
    "io"
    // "time"
    "archive/tar"
    "compress/gzip"
)
  
func main() {
    // file read
    fr, err := os.Open("tar/lin_golang_src.tar.gz")
    if err != nil {
        panic(err)
    }
    defer fr.Close()
  
    // gzip read
    gr, err := gzip.NewReader(fr)
    if err != nil {
        panic(err)
    }
    defer gr.Close()
  
    // tar read
    tr := tar.NewReader(gr)
  
    // 读取文件
    for {
        h, err := tr.Next()
        if err == io.EOF {
            break
        }
        if err != nil {
            panic(err)
        }
  
        // 显示文件
        fmt.Println(h.Name)
  
        // 打开文件
        fw, err := os.OpenFile("file2/" + h.Name, os.O_CREATE | os.O_WRONLY, 0644/*os.FileMode(h.Mode)*/)
        if err != nil {
            panic(err)
        }
        defer fw.Close()
  
        // 写文件
        _, err = io.Copy(fw, tr)
        if err != nil {
            panic(err)
        }
          
    }
  
    fmt.Println("un tar.gz ok")
}

呼呼,以后打包下载东西的时候可以使用了.

分享到:
评论

相关推荐

    Go语言压缩和解压缩tar.gz文件的方法

    本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 代码如下:package main import (  “fmt”...

    官网最新golang安装包 go1.9.2.linux-amd64.tar.gz

    1. **解压**:首先,你需要使用`tar -zxvf go1.9.2.linux-amd64.tar.gz`命令来解压缩文件。 2. **移动到适当的目录**:将解压后的`go`目录移动到`/usr/local`下,这通常是安装软件的标准位置:`sudo mv go /usr/...

    golang.org.x.net.tar.gz包下载

    `golang.org.x.net.tar.gz`是一个压缩包,包含了`x.net`模块的所有源代码和相关资源,方便开发者下载和使用。 在`golang.org.x.net`模块中,我们可以找到许多与网络编程相关的子包,这些子包提供了丰富的功能,如...

    go1.11.1.linux-amd64.tar.gz

    首先,用户需要使用`wget`或`curl`命令下载文件,然后使用`tar`命令来解压`.tar.gz`文件。这个过程通常涉及以下步骤: 1. 下载文件:`wget https://dl.google.com/go/go1.11.1.linux-amd64.tar.gz` 或 `curl -O ...

    go1.13.4.linux-amd64.tar.gz

    标题“go1.13.4.linux-amd64.tar.gz”指的是Go编程语言的1.13.4版本的Linux AMD64架构的二进制发行版,被压缩成一个tar.gz文件。这个文件通常包含Go语言的完整编译器、解释器和其他必要的工具,供在64位Linux系统上...

    go1.9.2.linux-amd64.tar.gz 官网最新golang的Linux安装包

    2. 解压:使用`tar`命令解压缩文件,例如:`tar -C /usr/local -xzf go1.9.2.linux-amd64.tar.gz`,这将把解压后的目录放在 `/usr/local/go` 下。 3. 配置环境变量:在`~/.bashrc`或`~/.bash_profile`文件中添加以下...

    go1.21.0.linux-amd64.tar.gz

    描述 "go1.21.0.linux-amd64.tar.gz" 没有提供额外的信息,但通常这样的压缩包解压后会包含一个名为 "go" 的目录,该目录下会有 bin、pkg、src 等子目录,分别对应可执行文件、编译后的库以及源代码的位置。...

    go1.16.6.linux-amd64.tar.gz

    - 使用`tar`命令解压文件,例如`tar -C /usr/local -zxvf go1.16.6.linux-amd64.tar.gz`,这会将内容解压到 `/usr/local/go` 目录下。 - 配置环境变量,如在`~/.bashrc`或`~/.zshrc`中添加`export GOPATH=$HOME/go...

    go-go1.5.2.tar.gz 已经编译,linux 32位和64位 都可以用

    标题中的"Go-go1.5.2.tar.gz"指的是Go语言的1.5.2版本,它已经被打包成一个tar.gz格式的压缩文件,这种格式在Linux系统中非常常见,因为它可以有效地压缩和传输大量文件。 1. **Go语言介绍**:Go语言由Robert ...

    go1.6.3.linux-amd64.tar.gz

    这个包是使用tar.gz格式压缩的,这是一种常见的在Unix-like系统上用于归档和压缩文件的方法。tar允许将多个文件和目录打包成一个单一的文件,而gzip则用于进一步压缩这个tar文件,以减少存储空间。 Go语言是由...

    go1.4.2.linux-amd64.tar.gz

    这个文件是一个tar归档,后缀为.gz,意味着它是使用gzip压缩算法进行压缩的,这是Linux中常见的压缩格式。 在Linux上安装这个包,用户首先需要使用`tar`命令解压文件,然后可能需要将解压后的目录移动到适当的位置...

    go1.3.3.linux-386.tar.gz

    ".tar"文件是将多个文件或目录打包成一个单一的文件,而".gz"则是使用gzip工具进行压缩,以减少文件大小,便于存储和传输。 5. **安装过程**:在Linux环境下,安装这个压缩包通常涉及以下步骤: - 使用`tar -zxvf ...

    go-cqhttp_linux_amd64.tar.gz

    1. **解压文件**:使用`tar -zxvf go-cqhttp_linux_amd64.tar.gz`命令解压缩文件。 2. **查看README**:阅读并遵循README.md中的指南进行操作。 3. **配置go-cqhttp**:编辑配置文件,如`config.json`,设置QQ账号、...

    go1.9.3.linux-amd64.tar.gz官网最新版

    3. **文件格式**:`.tar.gz`是一种常见的归档文件格式,它首先使用tar工具将多个文件打包成一个单一的文件,然后用gzip工具进行压缩,以减少下载和存储空间。 描述中提到的"官网最新版"意味着这是官方提供的最新...

    go1.4.2.linux-amd64.tar.gz(go 1.4.2 linux系统 64位)

    `.tar.gz`文件是一种常见的档案格式,用于在Linux和Unix-like系统中打包和压缩多个文件。在这种情况下,`go1.4.2.linux-amd64.tar.gz`包含了Go 1.4.2的Linux 64位二进制文件、库、文档和其他相关资源。用户可以通过...

    go1.21.1.linux-amd64.tar.gz

    ".tar.gz"后缀表明这是一个经过tar归档并使用gzip压缩的文件,这是一种常见的在Unix和Linux系统中打包和压缩文件的方法。 描述中提到"适用于Linux 2.6.32或更高版本,Intel 64位处理器",这意味着该软件包可以在...

    go1.4.2.linux-386.tar.gz

    - 将`.tar`和`.gz`结合在一起,`tar.gz`文件就是一个打包并压缩的文件,解压后可以得到原始的文件结构。 5. **安装步骤**: - 使用`tar`命令解压文件:`tar -zxvf go1.4.2.linux-386.tar.gz` - 解压后,将Go的...

    go1.17.13.linux-adm64.tar.gz

    这个包采用tar.gz格式,是Linux系统中常用的归档和压缩方式,用于将多个文件或目录打包成一个单一的可下载文件,同时进行gzip压缩以减小文件大小,方便传输和存储。 Golang,又称为Go语言,是由Google开发的一种...

    go1.8.linux-amd64.tar.gz

    在解压"go1.8.linux-amd64.tar.gz"后,我们通常会得到一个名为"/go"的目录,其中包含了Go语言的完整安装,包括二进制文件(如`go`, `godoc`, `gofmt`等),标准库,以及必要的工具和文档。这些组件使得用户能够在...

Global site tag (gtag.js) - Google Analytics