dublettes.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package main
  2. import (
  3. "crypto/sha256"
  4. "encoding/hex"
  5. "encoding/json"
  6. "fmt"
  7. "io"
  8. "io/ioutil"
  9. "log"
  10. "os"
  11. "path/filepath"
  12. "runtime"
  13. flag "github.com/spf13/pflag"
  14. )
  15. var driveLetter string
  16. var report string
  17. func init() {
  18. flag.StringVarP(&report, "report", "r", "", "json formatted report file.")
  19. }
  20. func main() {
  21. log.Println("starting GoHash")
  22. flag.Parse()
  23. index := make(map[string][]string)
  24. data, err := ioutil.ReadFile(report)
  25. if err != nil {
  26. fmt.Print(err)
  27. }
  28. err = json.Unmarshal(data, &index)
  29. if err != nil {
  30. fmt.Print(err)
  31. }
  32. log.Printf("found %d entries to check.", len(index))
  33. myFolder := flag.Arg(0)
  34. file, err := os.Stat(myFolder)
  35. if os.IsNotExist(err) {
  36. log.Fatalln("File does not exists:", myFolder)
  37. }
  38. if file.IsDir() {
  39. log.Println("start with folder:", myFolder)
  40. driveLetter = ""
  41. if runtime.GOOS == "windows" {
  42. driveLetter = filepath.VolumeName(myFolder) + "/"
  43. }
  44. log.Printf("driveletter: %s", driveLetter)
  45. doSomething()
  46. } else {
  47. log.Printf("file %s has hash %s\n", myFolder, getSha256Hash(myFolder))
  48. }
  49. log.Println("done")
  50. }
  51. func doSomething() {
  52. }
  53. func getSha256Hash(fileStr string) string {
  54. f, err := os.Open(fileStr)
  55. if err != nil {
  56. log.Fatal(err)
  57. }
  58. defer f.Close()
  59. h := sha256.New()
  60. if _, err := io.Copy(h, f); err != nil {
  61. log.Fatal(err)
  62. }
  63. return hex.EncodeToString(h.Sum(nil))
  64. }