go入门项目:(2) 基于命令行的文件整理小项目
介绍假设你之前下载的文件(音频,视频,文档,图片等)都下载到了一个文件夹里, 现在想把它们分类整理到相应的文件夹里去. 本文使用go实现这个小功能.
https://img2022.cnblogs.com/blog/2357964/202206/2357964-20220625232133436-977782830.gif
代码实现
[*]从命令行输入想要整理的目录
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)
}
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]