有没有办法在golang中生成整个目录及其内容的校验和?
我知道那个人如何抓住目录然后获取它的校验和,但我想尽可能避免这种情况。
答案 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
}
答案 1 :(得分:0)
Russ Cox为go mod
写了dirhash。
有两种方法,一种是对目录中的文件进行哈希处理,另一种是对zip进行哈希处理,而忽略诸如文件日期之类的不确定信息。
额外的元数据不一定对文件内容有意义,应该将其忽略。如果适合您的需求,我建议先研究zip方法。