package main import ( "crypto/sha256" "encoding/hex" "encoding/json" "fmt" "io" "io/ioutil" "log" "os" "path/filepath" "runtime" flag "github.com/spf13/pflag" ) var driveLetter string var report string func init() { flag.StringVarP(&report, "report", "r", "", "json formatted report file.") } func main() { log.Println("starting GoHash") flag.Parse() index := make(map[string][]string) data, err := ioutil.ReadFile(report) if err != nil { fmt.Print(err) } err = json.Unmarshal(data, &index) if err != nil { fmt.Print(err) } log.Printf("found %d entries to check.", len(index)) myFolder := flag.Arg(0) file, err := os.Stat(myFolder) if os.IsNotExist(err) { log.Fatalln("File does not exists:", myFolder) } if file.IsDir() { log.Println("start with folder:", myFolder) driveLetter = "" if runtime.GOOS == "windows" { driveLetter = filepath.VolumeName(myFolder) + "/" } log.Printf("driveletter: %s", driveLetter) doSomething() } else { log.Printf("file %s has hash %s\n", myFolder, getSha256Hash(myFolder)) } log.Println("done") } func doSomething() { } func getSha256Hash(fileStr string) string { f, err := os.Open(fileStr) if err != nil { log.Fatal(err) } defer f.Close() h := sha256.New() if _, err := io.Copy(h, f); err != nil { log.Fatal(err) } return hex.EncodeToString(h.Sum(nil)) }