golang对指定路径下百万文件去重文件内容相同才视为同一文件提供代码
以下是一个基于哈希算法的Go代码示例,用于对指定路径下的百万文件进行去重,如果文件内容相同,则视为同一文件:
package main
import (
"crypto/md5"
"encoding/hex"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
func main() {
// 指定要去重的目录路径
dir := "/path/to/directory"
// 哈希表用于存储文件哈希值
hashMap := make(map[string]string)
// 遍历指定目录下的所有文件
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
// 读取文件内容并计算哈希值
bytes, err := ioutil.ReadFile(path)
if err != nil {
return err
}
hash := md5.Sum(bytes)
hashStr := hex.EncodeToString(hash[:])
// 如果哈希表中已经存在相同的哈希值,则认为是重复文件
if _, ok := hashMap[hashStr]; ok {
fmt.Printf("%s is a duplicate of %s\n", path, hashMap[hashStr])
} else {
hashMap[hashStr] = path
}
}
return nil
})
if err != nil {
fmt.Println(err)
}
}
该代码使用了Go标准库中的filepath.Walk函数来遍历指定目录下的所有文件,然后使用ioutil.ReadFile函数读取文件内容,并使用md5.Sum函数计算文件内容的哈希值。最后,将哈希值存储在一个哈希表中,并将文件路径与哈希值关联。如果哈希表中已经存在相同的哈希值,则说明该文件是重复文件。
原文地址: https://www.cveoy.top/t/topic/Luk 著作权归作者所有。请勿转载和采集!