Linux Golang 文件去重:快速检测重复内容
可以使用 SHA256 哈希算法对文件内容进行计算,将哈希值作为文件的唯一标识,然后使用 map 存储所有文件的哈希值,并检查是否有重复的哈希值。
以下是一个简单的示例代码:
package main
import (
    "crypto/sha256"
    "fmt"
    "io/ioutil"
    "os"
)
func main() {
    files := os.Args[1:]
    hashes := make(map[string]string)
    for _, filename := range files {
        hash, err := fileSHA256(filename)
        if err != nil {
            fmt.Printf('%s: %s\n', filename, err)
            continue
        }
        if _, exists := hashes[hash]; exists {
            fmt.Printf('%s: duplicate\n', filename)
        } else {
            hashes[hash] = filename
        }
    }
}
func fileSHA256(filename string) (string, error) {
    data, err := ioutil.ReadFile(filename)
    if err != nil {
        return "", err
    }
    hash := sha256.Sum256(data)
    return fmt.Sprintf('%x', hash), nil
}
该程序使用命令行参数传递要处理的文件列表,逐个打开文件并计算 SHA256 哈希值。如果哈希值已经存在于哈希表中,则说明文件内容重复,否则添加到哈希表中。如果无法打开文件或计算哈希值,则输出错误信息。
原文地址: https://www.cveoy.top/t/topic/mCcM 著作权归作者所有。请勿转载和采集!