Golang 清理本地图床中所有未被引用的图片

x33g5p2x  于2022-02-07 转载在 Go  
字(1.2k)|赞(0)|评价(0)|浏览(383)

背景

除了博客以外,我还有一些笔记存在 https://github.com/HanquanHq/MD-Notes 上了。在用 typora 的时候,图片都默认自动存到一个本地的文件夹里了,有时候粘贴的时候,回自动保存图片,后来内容删了,图片被留下了,相当于产生了一堆”需要回收的垃圾“,所以我们来手动清理下。

代码

  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "path/filepath"
  7. "regexp"
  8. "strings"
  9. )
  10. func IsExist(str string, filepath string) bool {
  11. b, _ := ioutil.ReadFile(filepath)
  12. isExist, _ := regexp.Match(str, b)
  13. return isExist
  14. }
  15. func getNameList(path string) []string {
  16. var list []string
  17. filepath.Walk(path,
  18. func(path string, info os.FileInfo, err error) error {
  19. list = append(list, info.Name())
  20. return nil
  21. })
  22. return list
  23. }
  24. func getPathList(path string) []string {
  25. var list []string
  26. filepath.Walk(path,
  27. func(path string, info os.FileInfo, err error) error {
  28. if strings.HasSuffix(path, ".md") {
  29. list = append(list, path)
  30. }
  31. return nil
  32. })
  33. return list
  34. }
  35. func main() {
  36. rootPath := "/Users/bytedance/workspace/MD-Notes/"
  37. imgPath := "/Users/bytedance/workspace/MD-Notes/docs/images/"
  38. noteList := getPathList(rootPath)
  39. imgList := getNameList(imgPath)
  40. for _, img := range imgList {
  41. exist := false
  42. for _, note := range noteList {
  43. if IsExist(img, note) {
  44. exist = true
  45. break
  46. }
  47. }
  48. if !exist {
  49. fmt.Println("图片未被引用:", imgPath+img)
  50. err := os.Remove(imgPath + img)
  51. if err != nil {
  52. fmt.Println(err)
  53. return
  54. }
  55. }
  56. }
  57. }

效果

找到并删除了10+个未被引用的图片,总共节省了 9MB 存储空间。

相关文章

最新文章

更多