go入门项目:(2) 基于命令行的文件整理小项目

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

介绍

假设你之前下载的文件(音频,视频,文档,图片等)都下载到了一个文件夹里, 现在想把它们分类整理到相应的文件夹里去. 本文使用go实现这个小功能.

代码实现


  • 从命令行输入想要整理的目录
    main.go
    1. // 获取用户输入 - 目标文件夹需要整理
    2. scanner := bufio.NewScanner(os.Stdin)
    3. fmt.Print("你想整理哪个文件夹 - ")
    4. scanner.Scan()
    5. targetFolder := scanner.Text()
    复制代码
  • 判断是否存在该目录
    1. v// 检查文件夹是否存在
    2. _, err := os.Stat(targetFolder)
    3. if os.IsNotExist(err) {
    4.         log.Fatal("文件夹不存在")
    5. } else {
    6.         // 创建默认文件夹,如Images, Docs, Others, Videos
    7.         createDefaultFolders(targetFolder)
    8.         // 整理文件夹
    9.         organizeFolder(targetFolder)
    10. }
    复制代码
  • 分类处理
    1. switch fileExt {
    2.         case ".jpg", ".JPG", "png":
    3.         newPath := filepath.Join(targetFolder, "Images", fileInfo.Name())
    4.         err := os.Rename(oldPath, newPath)
    5.         check(err)
    6.         noOfFiles++
    7.         case ".mp4", ".mov", ".avi", ".amv":
    8.         newPath := filepath.Join(targetFolder, "Videos", fileInfo.Name())
    9.         err := os.Rename(oldPath, newPath)
    10.         check(err)
    11.         noOfFiles++
    12.         case ".pdf", ".docx", ".csv", ".xlsx":
    13.         newPath := filepath.Join(targetFolder, "Docs", fileInfo.Name())
    14.         err = os.Rename(oldPath, newPath)
    15.         check(err)
    16.         noOfFiles++
    17.         default:
    18.         newPath := filepath.Join(targetFolder, "Others", fileInfo.Name())
    19.         err = os.Rename(oldPath, newPath)
    20.         check(err)
    21.         noOfFiles++
    22. }
    复制代码
  1. 4. 根目录下使用go build生成可执行文件, 通过命令行执行该文件
  2. ```bash
  3. go build
复制代码
完整代码
  1. package main
  2. import (
  3.         "bufio"
  4.         "fmt"
  5.         "log"
  6.         "os"
  7.         "path/filepath"
  8. )
  9. func main() {
  10.         // 获取用户输入 - 目标文件夹需要整理
  11.         scanner := bufio.NewScanner(os.Stdin)
  12.         fmt.Print("你想整理哪个文件夹 - ")
  13.         scanner.Scan()
  14.         targetFolder := scanner.Text()
  15.         // targetFolder := "/home/cenjw/Downloads/Inspackage"
  16.         // 检查文件夹是否存在
  17.         _, err := os.Stat(targetFolder)
  18.         if os.IsNotExist(err) {
  19.                 log.Fatal("文件夹不存在")
  20.         } else {
  21.                 // 创建默认文件夹,如Images, Docs, Others, Videos
  22.                 createDefaultFolders(targetFolder)
  23.                 // 整理文件夹
  24.                 organizeFolder(targetFolder)
  25.         }
  26. }
  27. // function to Oraganize folders
  28. func organizeFolder(targetFolder string) {
  29.         // 读取目录
  30.         filesAndFolders, err := os.ReadDir(targetFolder)
  31.         check(err)
  32.         // 统计有多少文件需要被移动
  33.         noOfFiles := 0
  34.         for _, filesAndFolder := range         filesAndFolders {
  35.                 // 如果是文件就移动到相应的文件夹
  36.                 if !filesAndFolder.IsDir() {
  37.                         fileInfo, err := filesAndFolder.Info()
  38.                         check(err)
  39.                         // 获取文件的绝对路径
  40.                         oldPath := filepath.Join(targetFolder, fileInfo.Name())
  41.                         fileExt := filepath.Ext(oldPath) // 返回指定路径使用的文件扩展名 如 ".csv"
  42.                         switch fileExt {
  43.                         case ".jpg", ".JPG", "png":
  44.                                 newPath := filepath.Join(targetFolder, "Images", fileInfo.Name())
  45.                                 err := os.Rename(oldPath, newPath)
  46.                                 check(err)
  47.                                 noOfFiles++
  48.                         case ".mp4", ".mov", ".avi", ".amv":
  49.                                 newPath := filepath.Join(targetFolder, "Videos", fileInfo.Name())
  50.                                 err := os.Rename(oldPath, newPath)
  51.                                 check(err)
  52.                                 noOfFiles++
  53.                         case ".pdf", ".docx", ".csv", ".xlsx":
  54.                                 newPath := filepath.Join(targetFolder, "Docs", fileInfo.Name())
  55.                                 err = os.Rename(oldPath, newPath)
  56.                                 check(err)
  57.                                 noOfFiles++
  58.                         default:
  59.                                 newPath := filepath.Join(targetFolder, "Others", fileInfo.Name())
  60.                                 err = os.Rename(oldPath, newPath)
  61.                                 check(err)
  62.                                 noOfFiles++
  63.                         }
  64.                 }
  65.         }
  66.         if noOfFiles > 0 {
  67.                 fmt.Printf("%v number of files moved\n", noOfFiles)
  68.         } else {
  69.                 fmt.Printf("No files moved")
  70.         }
  71. }
  72. func check(err error) {
  73.         if err != nil {
  74.                 log.Fatal(err)
  75.         }
  76. }
  77. // function to create default folders such as Images, Docs, Others, Videos
  78. func createDefaultFolders(targetFolder string) {
  79.         defaultFolders := []string{"Videos", "Docs", "Images", "Others"}
  80.         for _, folder := range defaultFolders {
  81.                 _, err := os.Stat(folder)
  82.                 if os.IsNotExist(err) {
  83.                         os.Mkdir(filepath.Join(targetFolder, folder), 0755)
  84.                 }
  85.         }
  86. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表