genfiles.go 856 B

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