filter.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package filter
  2. import (
  3. "os"
  4. "path/filepath"
  5. "strings"
  6. "github.com/sirupsen/logrus"
  7. )
  8. func SkipFileInfo(l *logrus.Logger, curFile os.DirEntry, fileFullPath string) bool {
  9. if curFile.IsDir() == true {
  10. // 排除缓存文件夹,见 #532
  11. if strings.HasPrefix(curFile.Name(), ".@__thumb") == true {
  12. l.Debugln("curFile is dir and match `.@__thumb`, skip")
  13. return true
  14. }
  15. }
  16. // 跳过不符合的文件,比如 MAC OS 下可能有缓存文件,见 #138
  17. fi, err := curFile.Info()
  18. if err != nil {
  19. l.Errorln("curFile.Info:", curFile.Name(), err)
  20. return true
  21. }
  22. // 封面缓存文件夹中的文件都要跳过 .@__thumb #581
  23. // 获取这个文件的父级文件夹的名称,然后判断是否是 .@__thumb 开头的
  24. parentFolderName := filepath.Base(filepath.Dir(fileFullPath))
  25. if strings.HasPrefix(parentFolderName, ".@__thumb") == true {
  26. l.Debugln("curFile is in .@__thumb folder, skip")
  27. return true
  28. }
  29. // 软链接问题 #558
  30. if fi.Size() < 1000 {
  31. fileInfo, err := os.Lstat(fileFullPath)
  32. if err != nil {
  33. l.Errorln("os.Lstat:", fileFullPath, err)
  34. return true
  35. }
  36. if fileInfo.Mode()&os.ModeSymlink != 0 {
  37. // 确认是软连接
  38. l.Debugln("curFile is symlink,", fileFullPath)
  39. //realPath, err := filepath.EvalSymlinks(fileFullPath)
  40. //if err == nil {
  41. // fmt.Println("Path:", realPath)
  42. //}
  43. } else {
  44. l.Debugln("curFile.Size() < 1000:", curFile.Name())
  45. return true
  46. }
  47. }
  48. if fi.Size() == 4096 && strings.HasPrefix(curFile.Name(), "._") == true {
  49. l.Debugln("curFile.Size() == 4096 && Prefix Name == ._*", curFile.Name())
  50. return true
  51. }
  52. // 跳过预告片,见 #315
  53. if strings.HasSuffix(strings.ReplaceAll(curFile.Name(), filepath.Ext(curFile.Name()), ""), "-trailer") == true {
  54. l.Debugln("curFile Name has -trailer:", curFile.Name())
  55. return true
  56. }
  57. return false
  58. }