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

代码实现
- 从命令行输入想要整理的目录
main.go- // 获取用户输入 - 目标文件夹需要整理
- scanner := bufio.NewScanner(os.Stdin)
- fmt.Print("你想整理哪个文件夹 - ")
- scanner.Scan()
- targetFolder := scanner.Text()
复制代码 - 判断是否存在该目录
- v// 检查文件夹是否存在
- _, err := os.Stat(targetFolder)
- if os.IsNotExist(err) {
- log.Fatal("文件夹不存在")
- } else {
- // 创建默认文件夹,如Images, Docs, Others, Videos
- createDefaultFolders(targetFolder)
- // 整理文件夹
- organizeFolder(targetFolder)
- }
复制代码 - 分类处理
- switch fileExt {
- case ".jpg", ".JPG", "png":
- newPath := filepath.Join(targetFolder, "Images", fileInfo.Name())
- err := os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- case ".mp4", ".mov", ".avi", ".amv":
- newPath := filepath.Join(targetFolder, "Videos", fileInfo.Name())
- err := os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- case ".pdf", ".docx", ".csv", ".xlsx":
- newPath := filepath.Join(targetFolder, "Docs", fileInfo.Name())
- err = os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- default:
- newPath := filepath.Join(targetFolder, "Others", fileInfo.Name())
- err = os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- }
复制代码
- 4. 根目录下使用go build生成可执行文件, 通过命令行执行该文件
- ```bash
- go build
复制代码 完整代码
- package main
- import (
- "bufio"
- "fmt"
- "log"
- "os"
- "path/filepath"
- )
- func main() {
- // 获取用户输入 - 目标文件夹需要整理
- scanner := bufio.NewScanner(os.Stdin)
- fmt.Print("你想整理哪个文件夹 - ")
- scanner.Scan()
- targetFolder := scanner.Text()
- // targetFolder := "/home/cenjw/Downloads/Inspackage"
- // 检查文件夹是否存在
- _, err := os.Stat(targetFolder)
- if os.IsNotExist(err) {
- log.Fatal("文件夹不存在")
- } else {
- // 创建默认文件夹,如Images, Docs, Others, Videos
- createDefaultFolders(targetFolder)
- // 整理文件夹
- organizeFolder(targetFolder)
- }
- }
- // function to Oraganize folders
- func organizeFolder(targetFolder string) {
- // 读取目录
- filesAndFolders, err := os.ReadDir(targetFolder)
- check(err)
- // 统计有多少文件需要被移动
- noOfFiles := 0
- for _, filesAndFolder := range filesAndFolders {
- // 如果是文件就移动到相应的文件夹
- if !filesAndFolder.IsDir() {
- fileInfo, err := filesAndFolder.Info()
- check(err)
- // 获取文件的绝对路径
- oldPath := filepath.Join(targetFolder, fileInfo.Name())
- fileExt := filepath.Ext(oldPath) // 返回指定路径使用的文件扩展名 如 ".csv"
- switch fileExt {
- case ".jpg", ".JPG", "png":
- newPath := filepath.Join(targetFolder, "Images", fileInfo.Name())
- err := os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- case ".mp4", ".mov", ".avi", ".amv":
- newPath := filepath.Join(targetFolder, "Videos", fileInfo.Name())
- err := os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- case ".pdf", ".docx", ".csv", ".xlsx":
- newPath := filepath.Join(targetFolder, "Docs", fileInfo.Name())
- err = os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- default:
- newPath := filepath.Join(targetFolder, "Others", fileInfo.Name())
- err = os.Rename(oldPath, newPath)
- check(err)
- noOfFiles++
- }
- }
- }
- if noOfFiles > 0 {
- fmt.Printf("%v number of files moved\n", noOfFiles)
- } else {
- fmt.Printf("No files moved")
- }
- }
- func check(err error) {
- if err != nil {
- log.Fatal(err)
- }
- }
- // function to create default folders such as Images, Docs, Others, Videos
- func createDefaultFolders(targetFolder string) {
- defaultFolders := []string{"Videos", "Docs", "Images", "Others"}
- for _, folder := range defaultFolders {
- _, err := os.Stat(folder)
- if os.IsNotExist(err) {
- os.Mkdir(filepath.Join(targetFolder, folder), 0755)
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |