获取golang中目录的校验和

时间:2018-05-01 22:52:29

标签: go tar

有没有办法在golang中生成整个目录及其内容的校验和?

我知道那个人如何抓住目录然后获取它的校验和,但我想尽可能避免这种情况。

2 个答案:

答案 0 :(得分:2)

检查Parallel digestion中的https://blog.golang.org/pipelines示例,从摘要树部分开始,可能会给您一些想法。

所以你可以从:

// MD5All reads all the files in the file tree rooted at root and returns a map
// from file path to the MD5 sum of the file's contents.  If the directory walk
// fails or any read operation fails, MD5All returns an error.
func MD5All(root string) (map[string][md5.Size]byte, error) {
    m := make(map[string][md5.Size]byte)
    err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.Mode().IsRegular() {
            return nil
        }
        data, err := ioutil.ReadFile(path)
        if err != nil {
            return err
        }
        m[path] = md5.Sum(data)
        return nil
    })
    if err != nil {
        return nil, err
    }
    return m, nil
}

到并行版本:https://blog.golang.org/pipelines/parallel.go

答案 1 :(得分:0)

Russ Cox为go mod写了dirhash

有两种方法,一种是对目录中的文件进行哈希处理,另一种是对zip进行哈希处理,而忽略诸如文件日期之类的不确定信息。

额外的元数据不一定对文件内容有意义,应该将其忽略。如果适合您的需求,我建议先研究zip方法。