go入门项目:(2) 基于命令行的文件整理小项目
介绍
假设你之前下载的文件(音频,视频,文档,图片等)都下载到了一个文件夹里, 现在想把它们分类整理到相应的文件夹里去. 本文使用go实现这个小功能.
本文来自博客园,作者:Arway,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/gobeginner-proj-organize-folder.html
代码实现
-
从命令行输入想要整理的目录
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++ }
- 根目录下使用go build生成可执行文件, 通过命令行执行该文件
go build
本文来自博客园,作者:Arway,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/gobeginner-proj-organize-folder.html
完整代码
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) } } }
本文来自博客园,作者:micromatrix,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/gobeginner-proj-organize-folder.html
posted on 2022-06-25 00:02 micromatrix 阅读(75) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界