entry.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package main
  2. import (
  3. "container/list"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "os"
  8. "strings"
  9. )
  10. func WalkFoldertoFolder(dirname string, searchs []string) *list.List {
  11. results := list.List{}
  12. files, err := ioutil.ReadDir(dirname)
  13. if err != nil {
  14. fmt.Println(err)
  15. }
  16. for _, f := range files {
  17. path := fmt.Sprintf("%s/%s", dirname, f.Name())
  18. if f.IsDir() {
  19. results.PushBackList(WalkFoldertoFolder(path, searchs))
  20. } else {
  21. for _, s := range searchs {
  22. if strings.Contains(f.Name(), s) {
  23. results.PushBack(path)
  24. }
  25. }
  26. }
  27. }
  28. return &results
  29. }
  30. func copy(src, dst string) (int64, error) {
  31. sourceFileStat, err := os.Stat(src)
  32. if err != nil {
  33. return 0, err
  34. }
  35. if !sourceFileStat.Mode().IsRegular() {
  36. return 0, fmt.Errorf("%s is not a regular file", src)
  37. }
  38. source, err := os.Open(src)
  39. if err != nil {
  40. return 0, err
  41. }
  42. defer source.Close()
  43. destination, err := os.Create(dst)
  44. if err != nil {
  45. return 0, err
  46. }
  47. defer destination.Close()
  48. nBytes, err := io.Copy(destination, source)
  49. return nBytes, err
  50. }
  51. func main() {
  52. ext := []string{
  53. ".avi",
  54. ".mkv",
  55. ".m4v",
  56. ".mp4",
  57. }
  58. srcfolder := os.Args[1]
  59. cpyfolder := os.Args[2]
  60. fmt.Println("HelloWorld")
  61. results := WalkFoldertoFolder(srcfolder, ext)
  62. for file := results.Front(); file != nil; file = file.Next() {
  63. filesrc := file.Value.(string)
  64. filedst := string(filesrc[len(srcfolder):len(filesrc)])
  65. filedst = cpyfolder + filedst
  66. fmt.Println(filesrc + " / " + filedst)
  67. dirpath := string(filedst[0:strings.LastIndex(filedst, "/")])
  68. fmt.Println(dirpath)
  69. os.MkdirAll(dirpath, 0777)
  70. _, err := copy(filesrc, filedst)
  71. if err != nil {
  72. panic(err)
  73. }
  74. }
  75. }