以下是一个基于哈希算法的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函数计算文件内容的哈希值。最后,将哈希值存储在一个哈希表中,并将文件路径与哈希值关联。如果哈希表中已经存在相同的哈希值,则说明该文件是重复文件。

golang对指定路径下百万文件去重文件内容相同才视为同一文件提供代码

原文地址: https://www.cveoy.top/t/topic/Luk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录