我只是尝试使用archive/tar和compress/gzip来自动处理我的一些备份.
我的问题是:我有各种.tar文件和.tar.gz文件浮动,因此我想提取.tar.gz文件的哈希值(md5)和.tar文件的哈希值(md5)同样,理想情况下一次运行.
我到目前为止的示例代码完全适用于.tar.gz中的文件的哈希以及.gz,但.tar的哈希是错误的,我无法找出问题是什么.
我查看了tar/reader.go文件,我看到有一些跳过,但我认为一切都应该在io.Reader接口上运行,因此TeeReader仍然应该捕获所有字节.
package main
import (
"archive/tar"
"compress/gzip"
"crypto/md5"
"fmt"
"io"
"os"
)
func main() {
tgz, _ := os.Open("tb.tar.gz")
gzMd5 := md5.New()
gz, _ := gzip.NewReader(io.TeeReader(tgz, gzMd5))
tarMd5 := md5.New()
tr := tar.NewReader(io.TeeReader(gz, tarMd5))
for {
fileMd5 := md5.New()
hdr, err := tr.Next()
if err == io.EOF {
break
}
io.Copy(fileMd5, tr)
fmt.Printf("%x %s\n", fileMd5.Sum(nil), hdr.Name)
}
fmt.Printf("%x tb.tar\n", tarMd5.Sum(nil))
fmt.Printf("%x tb.tar.gz\n", gzMd5.Sum(nil))
}
Run Code Online (Sandbox Code Playgroud)
现在为以下示例:
$ echo "a" > a.txt
$ echo "b" > b.txt
$ tar …Run Code Online (Sandbox Code Playgroud)