package main import ( "os" "path/filepath" "fmt" "crypto/sha256" "encoding/hex" "encoding/binary" "io" ) func main() { println("Kuferek 1.0") if len(os.Args) > 1 { scanDir(os.Args[1]) } else { scanDir("/home/mrp/Pictures") } } func scanDir(dir string) { fmt.Printf("Scanning: %s", dir) visit := func(path string, f os.FileInfo, err error) error { if f.IsDir() && path != dir { scanDir(path) return filepath.SkipDir } if f.Mode().IsRegular() { fmt.Printf("Visited: %s Size: %d bytes, Sha256: %s\n", path, f.Size(), fileSha256(path)) } return nil } filepath.Walk(dir, visit) } func fileSha256(filePath string) (result string) { file, err := os.Open(filePath) if err != nil { return } defer file.Close() fileStat, err := file.Stat() if err != nil { return } hash := sha256.New() if _, err = io.Copy(hash, file); err != nil { return } result = hex.EncodeToString(hash.Sum(nil)) return }