genfiles.go 704 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package main
  2. import (
  3. "crypto/rand"
  4. "flag"
  5. "fmt"
  6. "io/ioutil"
  7. mr "math/rand"
  8. "os"
  9. "path"
  10. )
  11. func name() string {
  12. var b [16]byte
  13. rand.Reader.Read(b[:])
  14. return fmt.Sprintf("%x", b[:])
  15. }
  16. func main() {
  17. var files int
  18. var maxexp int
  19. flag.IntVar(&files, "files", 1000, "Number of files")
  20. flag.IntVar(&maxexp, "maxexp", 20, "Maximum file size (max = 2^n + 128*1024 B)")
  21. flag.Parse()
  22. for i := 0; i < files; i++ {
  23. n := name()
  24. p0 := path.Join(string(n[0]), n[0:2])
  25. os.MkdirAll(p0, 0755)
  26. s := 1 << uint(mr.Intn(maxexp))
  27. a := 128 * 1024
  28. if a > s {
  29. a = s
  30. }
  31. s += mr.Intn(a)
  32. b := make([]byte, s)
  33. rand.Reader.Read(b)
  34. p1 := path.Join(p0, n)
  35. ioutil.WriteFile(p1, b, 0644)
  36. }
  37. }