diff --git a/bug20260813.md b/bug20260813.md new file mode 100644 index 0000000..02dab14 --- /dev/null +++ b/bug20260813.md @@ -0,0 +1,89 @@ +# 项目审查记录 2026-08-13 + +> 审查方式:静态代码审查(`go build` / `go vet` 均通过,此文件不含编译级错误) +> 审查范围:全部 `.go` 源码 + +--- + +## 一、严重 Bug + +### 1. WEBP / BMP / PSB 永远进「读取异常」文件夹(专用分支是死代码) + +- **位置**:`util/image.go:9-19`、`core/handle_image.go:22,35,46` +- **问题**:`supportImageTypes` 中包含了 `.bmp`、`.webp`、`.psb`,导致 `handle_image.go:22` 的通用分支总是先命中,调用 `image.DecodeConfig`(`main.go:6-8` 只注册了 png/jpeg/gif 解码器),对 webp/bmp 必然失败,文件全部落入「读取异常」目录。 +- **影响**:`handle_image.go:35`(webp)、`:46`(bmp)的专用处理分支永远不会执行,与 README 承诺支持的格式不符。 +- **修复方向**:从 `supportImageTypes` 中移除 `.bmp` / `.webp` / `.psb`,让专用分支生效;或在通用分支前先特判这三类格式。 + +### 2. PSD 从未被识别为图片,`ImagePsdList` 恒为空 + +- **位置**:`core/file_scanner.go:70-79`、`core/handle_image.go:57` +- **问题**:PSD 文件的 MIME 为 `application/vnd.adobe.photoshop`(不包含 `image/` 前缀),且 `.psd` 不在 `supportImageTypes` 中,因此在 `DoFilter` 阶段就被丢弃,永远不会进入 `GlobalImagePathList`。 +- **影响**:`handle_image.go:57` 的 PSD 分支不可达,README 声称的「PSD 单独归入图片_PSD」功能实际失效。 +- **修复方向**:在过滤阶段对 `.psd` / `application/vnd.adobe.photoshop` 单独识别并入图片列表。 + +### 3. 同名文件移动时数据丢失风险(已处理) + +- **位置**:`util/video.go:152-169`(`moveFileToDir`) +- **问题**:目标文件名只取 `BaseName`。不同子目录下的同名文件(如 `a/photo.jpg`、`b/photo.jpg`)会被移动到/复制到同一目标:Unix 下 `os.Rename` 静默覆盖,跨盘 fallback 的 `copyFile`(`os.Create`)也会截断覆盖目标。 +- **影响**:真实数据丢失风险,且无任何告警。 +- **修复方向**:目标名冲突时追加序号或 hash,确保不覆盖已有文件。 + +### 4. BMP 自顶向下格式(负高度)导致解析错乱(已处理) + +- **位置**:`core/bmp.go:59`、`core/handle_image.go:96-98` +- **问题**:`ReadBmpImage` 直接返回 `int32` 宽高,负高度被 `fmt.Sprintf("%d-%d")` 拼成 `"640--480"`,`strings.Split("-")` 后 `width2Height[1]` 为空串,`String2int` 返回 0,图片被错误归类。 +- **影响**:此类 BMP 图片分辨率判定错误(高度变 0,全部按横屏普通处理)。 +- **修复方向**:读取时对高度取绝对值,或改用不易混淆的分隔符/结构化存储。 + +### 5. 重复运行会重新整理已整理过的目录(已处理) + +- **位置**:`core/file_scanner.go:20`、`main.go` +- **问题**:`filepath.Walk` 扫描整个根目录。第二次运行时,上次生成的 `{uid}-图片_*`、`{uid}-视频_*` 等目录会被再次扫描,其中已分类的文件会被再次移动,形成无限嵌套/重复归类。 +- **影响**:重复执行程序导致目录结构越来越乱,违背 README「重复运行不会相互覆盖」的描述。 +- **修复方向**:扫描时跳过已生成的 `{uid}-` 前缀目录,或提供过滤白名单。 + +--- + +## 二、次要问题 + +### 6. ffprobe 输出解析脆弱 + +- **位置**:`util/video.go:53-101` +- **问题**:对多视频流(常见于 MKV)的多行输出处理靠猜测(`\r\n\r\n\r\n\r\n` split、`N/AxN/A` 字符串替换等),且不校验 0 值分辨率,解析出错时归类到「普通」而非「读取异常」。 + +### 7. 视频「读取异常 / 已忽略」目录命名不一致 + +- **位置**:`core/handle_video.go:56,62` +- **问题**:这两个目录没有 uid 前缀(如 `读取异常`、`已忽略`),与其它 `{uid}-视频_*` 目录风格不统一,且与图片侧带 uid 的命名方式不一致。 + +### 8. 死代码 / 未使用数据 + +- **位置**:`util/file.go:47-112`、`vars/video.go`、`util/file.go:17-21`、`vars/global.go:5` +- **问题**:`VideoPath2DurationMap` / `VideoPath2WidthHeightTagMap` 赋值后从未使用(重命名逻辑已被注释掉);`util/file.go` 中保留大段注释代码;`GetFileDirectory`、`GlobalFilePath2FileNameMap` 未被使用。 + +### 9. `doPickImageFile` 空判断误报 + +- **位置**:`core/handle_image.go:91` +- **问题**:判断的是全局 `vars.ImagePath2WidthHeightMap` 而非入参 `imagePath2WidthHeightMap`;当所有图片都是错误/忽略时,会误打印「当前目录下没有扫描到图片文件」。 + +### 10. 目录创建失败未处理 + +- **位置**:`core/handle_image.go`(各 `move*Image` 函数)、`core/handle_video.go`(各 `move*Video` 函数) +- **问题**:多数 `util.CreateDir` 的返回值被忽略,若目录创建失败仍继续执行 `DoMoveFileToDir`,文件移动会静默失败。 + +### 11. 临时 ffprobe.exe 清理不保证 + +- **位置**:`core/handle_video.go:13-24,68-71` +- **问题**:通过流程末尾手动 `os.Remove` 清理,若中途异常(panic / 提前 return)会残留 `ffprobe.exe`;下次运行该文件会被扫描当作普通文件。建议 `defer` 清理。 + +--- + +## 三、优化建议 + +1. **修复严重 bug 1/2 的关键**:调整 `supportImageTypes` 列表 / 过滤逻辑,确保 webp、bmp、psb、psd 走各自正确的分支。 +2. **重复运行防护**:扫描时跳过已生成的 `{uid}-` 目录。 +3. **合并 ffprobe 调用**:分辨率 + 时长可用一次 `-show_streams -show_format` 取回,每视频省一次子进程创建。 +4. **消除重复代码**:图片/视频各有约 60 个几乎相同的分组 + 移动函数,可用「分组名 → 列表」映射表驱动,大幅减小编码量。 +5. **使用 `filepath.Join`**:代替 `rootDir + separator + ...` 字符串拼接,避免路径分隔符与平台问题。 +6. **`moveFileToDir` 增加同名去重**:冲突时追加序号/hash,杜绝覆盖。 +7. **清理死代码**:删除注释掉的 rename 逻辑、未使用的 map 与函数。 diff --git a/core/bmp.go b/core/bmp.go index cf0b005..45cd99a 100644 --- a/core/bmp.go +++ b/core/bmp.go @@ -56,7 +56,8 @@ func ReadBmpImage(filePath string) (error, int32, int32) { fmt.Printf("=== Failed to Read file: %v\n", err) return err, 0, 0 } - return err, infoHeader.Width, infoHeader.Height + // 自顶向下 BMP 的高度为负值,取绝对值避免影响后续解析 + return err, absInt32(infoHeader.Width), absInt32(infoHeader.Height) //fmt.Printf("=== File size: %d bytes\n", fileHeader.FileSize) //fmt.Printf("=== Image dimensions: %dx%d\n", ) //fmt.Printf("=== Bits per pixel: %d\n", infoHeader.BitsPerPixel) @@ -76,3 +77,11 @@ func ReadBmpImage(filePath string) (error, int32, int32) { //} //fmt.Printf("=== Read %d bytes of pixel data.\n", len(data)) } + +// absInt32 返回 int32 的绝对值 +func absInt32(v int32) int32 { + if v < 0 { + return -v + } + return v +} diff --git a/core/file_scanner.go b/core/file_scanner.go index 95eb4cf..9890b1d 100644 --- a/core/file_scanner.go +++ b/core/file_scanner.go @@ -87,6 +87,9 @@ func visit(currentPath string, info os.FileInfo, err error) error { if err != nil { return err // 如果有错误,直接返回 } + if info.IsDir() && vars.GlobalPickerDir != "" && currentPath == vars.GlobalPickerDir { + return filepath.SkipDir // 跳过白名单目录(已整理文件的输出目录) + } if !info.IsDir() { vars.GlobalFilePathList = append(vars.GlobalFilePathList, currentPath) // filename, include ext diff --git a/core/handle_image.go b/core/handle_image.go index 26f7b7f..b04f956 100644 --- a/core/handle_image.go +++ b/core/handle_image.go @@ -2,7 +2,6 @@ package core import ( "fmt" - uuid "github.com/satori/go.uuid" _ "image/gif" // 导入gif支持 _ "image/jpeg" // 导入jpeg支持 _ "image/png" // 导入png支持 @@ -12,7 +11,7 @@ import ( "strings" ) -func DoHandleImage(rootDir string) { +func DoHandleImage(pickerDir string) { total := len(vars.GlobalImagePathList) // 总数 successCount := 0 // 成功数 errorCount := 0 // 失败数 @@ -63,33 +62,32 @@ func DoHandleImage(rootDir string) { ignoreCount = ignoreCount + 1 vars.ImageIgnorePathList = append(vars.ImageIgnorePathList, imageFilePath) } - uid := strings.ReplaceAll(uuid.NewV4().String(), "-", "") if len(vars.ImagePsdList) > 0 { - psdImagePath := rootDir + string(os.PathSeparator) + uid + "-图片_PSD" + psdImagePath := pickerDir + string(os.PathSeparator) + "图片_PSD" if util.CreateDir(psdImagePath) { util.DoMoveFileToDir(vars.ImagePsdList, psdImagePath) } } if len(vars.ImageReadErrorPathList) > 0 { - readInfoErrorPath := rootDir + string(os.PathSeparator) + uid + "-图片_读取异常" + readInfoErrorPath := pickerDir + string(os.PathSeparator) + "图片_读取异常" if util.CreateDir(readInfoErrorPath) { util.DoMoveFileToDir(vars.ImageReadErrorPathList, readInfoErrorPath) } } if len(vars.ImageIgnorePathList) > 0 { - ignorePath := rootDir + string(os.PathSeparator) + uid + "-图片_已忽略" + ignorePath := pickerDir + string(os.PathSeparator) + "图片_已忽略" if util.CreateDir(ignorePath) { util.DoMoveFileToDir(vars.ImageIgnorePathList, ignorePath) } } - doPickImageFile(uid, rootDir, vars.ImagePath2WidthHeightMap) - fmt.Printf("=== 图片处理完毕(UID): %s \n\n", uid) + doPickImageFile(pickerDir, vars.ImagePath2WidthHeightMap) + fmt.Printf("=== 图片处理完毕 \n\n") } // 条件图片并分组存放 -func doPickImageFile(uid string, rootDir string, imagePath2WidthHeightMap map[string]string) { +func doPickImageFile(pickerDir string, imagePath2WidthHeightMap map[string]string) { if len(vars.ImagePath2WidthHeightMap) == 0 { - fmt.Printf("=== 当前目录下没有扫描到图片文件, %s \n", rootDir) + fmt.Printf("=== 当前目录下没有扫描到图片文件, %s \n", pickerDir) return } for currentImagePath, infoStr := range imagePath2WidthHeightMap { @@ -111,10 +109,10 @@ func doPickImageFile(uid string, rootDir string, imagePath2WidthHeightMap map[st } handleSquareImage(currentImagePath, width) } - moveHorizontalImage(rootDir, uid) - moveVerticalImage(rootDir, uid) - moveSquareImage(rootDir, uid) - moveGifImage(rootDir, uid) + moveHorizontalImage(pickerDir) + moveVerticalImage(pickerDir) + moveSquareImage(pickerDir) + moveGifImage(pickerDir) } // 统一处理gif @@ -262,249 +260,249 @@ func handleSquareImage(currentImagePath string, width int) { } // 移动水平图片 -func moveHorizontalImage(rootDir string, uid string) { +func moveHorizontalImage(pickerDir string) { pathSeparator := string(os.PathSeparator) // 标准 if len(vars.ImageHorizontalStandard720PList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_720P" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_720P" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard720PList, imageDirPath) } if len(vars.ImageHorizontalStandard1D5KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1D5KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_1D5KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard1D5KList, imageDirPath) } if len(vars.ImageHorizontalStandard1080PList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1080P" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_1080P" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard1080PList, imageDirPath) } if len(vars.ImageHorizontalStandard2DKList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2DKP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_2DKP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard2DKList, imageDirPath) } if len(vars.ImageHorizontalStandard2D5KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2D5KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_2D5KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard2D5KList, imageDirPath) } if len(vars.ImageHorizontalStandardUltraWide2List) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide2KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide2KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide2List, imageDirPath) } if len(vars.ImageHorizontalStandardUltraWide3List) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide3KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide3KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide3List, imageDirPath) } if len(vars.ImageHorizontalStandardUltraWide4List) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_ultraWide4KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_ultraWide4KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandardUltraWide4List, imageDirPath) } if len(vars.ImageHorizontalStandard4KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_4KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard4KList, imageDirPath) } if len(vars.ImageHorizontalStandard4KHList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4KHP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_4KHP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard4KHList, imageDirPath) } if len(vars.ImageHorizontalStandard8KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_8KP" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_8KP" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalStandard8KList, imageDirPath) } // 非标准 if len(vars.ImageHorizontalNormalList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_普通" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_普通" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalNormalList, imageDirPath) } if len(vars.ImageHorizontal1KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_1K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_1K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal1KList, imageDirPath) } if len(vars.ImageHorizontal2KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_2K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_2K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal2KList, imageDirPath) } if len(vars.ImageHorizontal3KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_3K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_3K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal3KList, imageDirPath) } if len(vars.ImageHorizontal4KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_4K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_4K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal4KList, imageDirPath) } if len(vars.ImageHorizontal5KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_5K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_5K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal5KList, imageDirPath) } if len(vars.ImageHorizontal6KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_6K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_6K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal6KList, imageDirPath) } if len(vars.ImageHorizontal7KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_7K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_7K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal7KList, imageDirPath) } if len(vars.ImageHorizontal8KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_8K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_8K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal8KList, imageDirPath) } if len(vars.ImageHorizontal9KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_9K" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_9K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontal9KList, imageDirPath) } if len(vars.ImageHorizontalHKList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_横屏_原图" + imageDirPath := pickerDir + pathSeparator + "图片_横屏_原图" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageHorizontalHKList, imageDirPath) } } // 移动垂直图片 -func moveVerticalImage(rootDir string, uid string) { +func moveVerticalImage(pickerDir string) { pathSeparator := string(os.PathSeparator) // 非标准 if len(vars.ImageVerticalNormalList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_普通" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_普通" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVerticalNormalList, imageDirPath) } if len(vars.ImageVertical1KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_1K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_1K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical1KList, imageDirPath) } if len(vars.ImageVertical2KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_2K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_2K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical2KList, imageDirPath) } if len(vars.ImageVertical3KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_3K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_3K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical3KList, imageDirPath) } if len(vars.ImageVertical4KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_4K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_4K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical4KList, imageDirPath) } if len(vars.ImageVertical5KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_5K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_5K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical5KList, imageDirPath) } if len(vars.ImageVertical6KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_6K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_6K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical6KList, imageDirPath) } if len(vars.ImageVertical7KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_7K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_7K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical7KList, imageDirPath) } if len(vars.ImageVertical8KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_8K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_8K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical8KList, imageDirPath) } if len(vars.ImageVertical9KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_9K" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_9K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVertical9KList, imageDirPath) } if len(vars.ImageVerticalHKList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_竖屏_原图" + imageDirPath := pickerDir + pathSeparator + "图片_竖屏_原图" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageVerticalHKList, imageDirPath) } } // 移动等比图片 -func moveSquareImage(rootDir string, uid string) { +func moveSquareImage(pickerDir string) { pathSeparator := string(os.PathSeparator) // 非标准 if len(vars.ImageSquareNormalList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_普通" + imageDirPath := pickerDir + pathSeparator + "图片_等比_普通" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquareNormalList, imageDirPath) } if len(vars.ImageSquare1KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_1K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_1K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare1KList, imageDirPath) } if len(vars.ImageSquare2KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_2K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_2K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare2KList, imageDirPath) } if len(vars.ImageSquare3KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_3K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_3K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare3KList, imageDirPath) } if len(vars.ImageSquare4KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_4K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_4K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare4KList, imageDirPath) } if len(vars.ImageSquare5KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_5K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_5K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare5KList, imageDirPath) } if len(vars.ImageSquare6KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_6K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_6K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare6KList, imageDirPath) } if len(vars.ImageSquare7KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_7K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_7K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare7KList, imageDirPath) } if len(vars.ImageSquare8KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_8K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_8K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare8KList, imageDirPath) } if len(vars.ImageSquare9KList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_9K" + imageDirPath := pickerDir + pathSeparator + "图片_等比_9K" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquare9KList, imageDirPath) } if len(vars.ImageSquareHKList) > 0 { - imageDirPath := rootDir + pathSeparator + uid + "-图片_等比_原图" + imageDirPath := pickerDir + pathSeparator + "图片_等比_原图" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageSquareHKList, imageDirPath) } } // 移动gif图片 -func moveGifImage(rootDir string, uid string) { +func moveGifImage(pickerDir string) { if len(vars.ImageGifList) > 0 { pathSeparator := string(os.PathSeparator) - imageDirPath := rootDir + pathSeparator + uid + "-图片_GIF" + imageDirPath := pickerDir + pathSeparator + "图片_GIF" util.CreateDir(imageDirPath) util.DoMoveFileToDir(vars.ImageGifList, imageDirPath) } diff --git a/core/handle_video.go b/core/handle_video.go index 839cc80..20929fd 100644 --- a/core/handle_video.go +++ b/core/handle_video.go @@ -2,7 +2,6 @@ package core import ( "fmt" - uuid "github.com/satori/go.uuid" "kenaito-media-picker/util" "kenaito-media-picker/vars" "os" @@ -10,7 +9,7 @@ import ( "time" ) -func DoHandleVideo(rootDir string) { +func DoHandleVideo(pickerDir string) { // 释放ffprobe readerFileName := "./ffprobe.exe" if util.CheckFileIsExist(readerFileName) { @@ -53,18 +52,18 @@ func DoHandleVideo(rootDir string) { vars.VideoIgnorePathList = append(vars.VideoIgnorePathList, videoFilePath) } if len(vars.VideoReadErrorPathList) > 0 { - readInfoErrorPath := rootDir + string(os.PathSeparator) + "读取异常" + readInfoErrorPath := pickerDir + string(os.PathSeparator) + "读取异常" if util.CreateDir(readInfoErrorPath) { util.DoMoveFileToDir(vars.VideoReadErrorPathList, readInfoErrorPath) } } if len(vars.VideoIgnorePathList) > 0 { - ignorePath := rootDir + string(os.PathSeparator) + "已忽略" + ignorePath := pickerDir + string(os.PathSeparator) + "已忽略" if util.CreateDir(ignorePath) { util.DoMoveFileToDir(vars.VideoIgnorePathList, ignorePath) } } - doPickVideoFile(rootDir, vars.VideoPath2WidthHeightMap) + doPickVideoFile(pickerDir, vars.VideoPath2WidthHeightMap) // 删除ffprobe if util.CheckFileIsExist(readerFileName) { _ = os.Remove(readerFileName) @@ -73,9 +72,9 @@ func DoHandleVideo(rootDir string) { } // 条件视频并分组存放 -func doPickVideoFile(rootDir string, videoPath2WidthHeightMap map[string]string) { +func doPickVideoFile(pickerDir string, videoPath2WidthHeightMap map[string]string) { if len(videoPath2WidthHeightMap) == 0 { - fmt.Printf("=== 当前目录下没有扫描到视频文件, %s \n", rootDir) + fmt.Printf("=== 当前目录下没有扫描到视频文件, %s \n", pickerDir) readerFileName := "./ffprobe.exe" if util.CheckFileIsExist(readerFileName) { _ = os.Remove(readerFileName) @@ -97,269 +96,268 @@ func doPickVideoFile(rootDir string, videoPath2WidthHeightMap map[string]string) } handleSquareVideo(currentVideoPath, width, height, suffix) } - uid := strings.ReplaceAll(uuid.NewV4().String(), "-", "") - moveNormalVideo(uid, rootDir) - moveHorizontalVideo(uid, rootDir) - moveVerticalVideo(uid, rootDir) - moveSquareVideo(uid, rootDir) - moveGifVideo(uid, rootDir) + moveNormalVideo(pickerDir) + moveHorizontalVideo(pickerDir) + moveVerticalVideo(pickerDir) + moveSquareVideo(pickerDir) + moveGifVideo(pickerDir) } // 移动垂直视频 -func moveVerticalVideo(uid string, rootDir string) { +func moveVerticalVideo(pickerDir string) { pathSeparator := string(os.PathSeparator) if len(vars.VideoVertical1KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_1k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_1k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical1KList, videoDirPath) } if len(vars.VideoVertical2KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_2k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_2k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical2KList, videoDirPath) } if len(vars.VideoVertical3KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_3k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_3k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical3KList, videoDirPath) } if len(vars.VideoVertical4KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_4k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_4k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical4KList, videoDirPath) } if len(vars.VideoVertical5KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_5k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_5k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical5KList, videoDirPath) } if len(vars.VideoVertical6KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_6k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_6k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical6KList, videoDirPath) } if len(vars.VideoVertical7KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_7k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_7k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical7KList, videoDirPath) } if len(vars.VideoVertical8KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_8k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_8k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical8KList, videoDirPath) } if len(vars.VideoVertical9KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_9k" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_9k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVertical9KList, videoDirPath) } if len(vars.VideoVerticalHKList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_原画质" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_原画质" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVerticalHKList, videoDirPath) } } // 移动水平视频 -func moveHorizontalVideo(uid string, rootDir string) { +func moveHorizontalVideo(pickerDir string) { pathSeparator := string(os.PathSeparator) if len(vars.VideoHorizontal1KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_1k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal1KList, videoDirPath) } if len(vars.VideoHorizontal2KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_2k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal2KList, videoDirPath) } if len(vars.VideoHorizontal3KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_3k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_3k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal3KList, videoDirPath) } if len(vars.VideoHorizontal4KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_4k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal4KList, videoDirPath) } if len(vars.VideoHorizontal5KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_5k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_5k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal5KList, videoDirPath) } if len(vars.VideoHorizontal6KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_6k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_6k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal6KList, videoDirPath) } if len(vars.VideoHorizontal7KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_7k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_7k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal7KList, videoDirPath) } if len(vars.VideoHorizontal8KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_8k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_8k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal8KList, videoDirPath) } if len(vars.VideoHorizontal9KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_9k" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_9k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontal9KList, videoDirPath) } if len(vars.VideoHorizontalHKList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_原画质" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_原画质" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalHKList, videoDirPath) } if len(vars.VideoHorizontalStandard720PList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_720P" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_720P" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard720PList, videoDirPath) } if len(vars.VideoHorizontalStandard1D5PList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1D5KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_1D5KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard1D5PList, videoDirPath) } if len(vars.VideoHorizontalStandard1080PList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_1080P" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_1080P" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard1080PList, videoDirPath) } if len(vars.VideoHorizontalStandard2DKList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2DKP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_2DKP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard2DKList, videoDirPath) } if len(vars.VideoHorizontalStandard2D5KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_2D5KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_2D5KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard2D5KList, videoDirPath) } if len(vars.VideoHorizontalStandardUltraWide2List) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide2KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide2KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide2List, videoDirPath) } if len(vars.VideoHorizontalStandardUltraWide3List) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide3KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide3KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide3List, videoDirPath) } if len(vars.VideoHorizontalStandardUltraWide4List) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_UltraWide4KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_UltraWide4KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandardUltraWide4List, videoDirPath) } if len(vars.VideoHorizontalStandard4KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_4KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard4KList, videoDirPath) } if len(vars.VideoHorizontalStandard4KHList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_4KHP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_4KHP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard4KHList, videoDirPath) } if len(vars.VideoHorizontalStandard8KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_8KP" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_8KP" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalStandard8KList, videoDirPath) } } // 移动等比视频 -func moveSquareVideo(uid string, rootDir string) { +func moveSquareVideo(pickerDir string) { pathSeparator := string(os.PathSeparator) if len(vars.VideoSquare1KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_1k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_1k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare1KList, videoDirPath) } if len(vars.VideoSquare2KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_2k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_2k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare2KList, videoDirPath) } if len(vars.VideoSquare3KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_3k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_3k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare3KList, videoDirPath) } if len(vars.VideoSquare4KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_4k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_4k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare4KList, videoDirPath) } if len(vars.VideoSquare5KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_5k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_5k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare5KList, videoDirPath) } if len(vars.VideoSquare6KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_6k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_6k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare6KList, videoDirPath) } if len(vars.VideoSquare7KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_7k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_7k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare7KList, videoDirPath) } if len(vars.VideoSquare8KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_8k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_8k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare8KList, videoDirPath) } if len(vars.VideoSquare9KList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_9k" + videoDirPath := pickerDir + pathSeparator + "视频_等比_9k" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquare9KList, videoDirPath) } if len(vars.VideoSquareHKList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_原画质" + videoDirPath := pickerDir + pathSeparator + "视频_等比_原画质" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquareHKList, videoDirPath) } } // 移动gif视频 -func moveGifVideo(uid string, rootDir string) { +func moveGifVideo(pickerDir string) { pathSeparator := string(os.PathSeparator) if len(vars.VideoHorizontalGifList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_GIF" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_GIF" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalGifList, videoDirPath) } if len(vars.VideoVerticalGifList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_GIF" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_GIF" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVerticalGifList, videoDirPath) } if len(vars.VideoSquareGifList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_GIF" + videoDirPath := pickerDir + pathSeparator + "视频_等比_GIF" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquareGifList, videoDirPath) } } // 移动普通视频 -func moveNormalVideo(uid string, rootDir string) { +func moveNormalVideo(pickerDir string) { pathSeparator := string(os.PathSeparator) if len(vars.VideoHorizontalNormalList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_横屏_普通" + videoDirPath := pickerDir + pathSeparator + "视频_横屏_普通" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoHorizontalNormalList, videoDirPath) } if len(vars.VideoVerticalNormalList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_竖屏_普通" + videoDirPath := pickerDir + pathSeparator + "视频_竖屏_普通" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoVerticalNormalList, videoDirPath) } if len(vars.VideoSquareNormalList) > 0 { - videoDirPath := rootDir + pathSeparator + uid + "-视频_等比_普通" + videoDirPath := pickerDir + pathSeparator + "视频_等比_普通" util.CreateDir(videoDirPath) util.DoMoveFileToDir(vars.VideoSquareNormalList, videoDirPath) } diff --git a/main.go b/main.go index a1a4ea6..d534fc7 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,7 @@ import ( "kenaito-media-picker/core" "kenaito-media-picker/vars" "os" + "path/filepath" "time" ) @@ -20,13 +21,16 @@ func main() { fmt.Println("=== 获取当前路径异常", err) return } + pickerDir := filepath.Join(rootDir, filepath.Base(rootDir)+"-picker") + vars.GlobalPickerDir = pickerDir + fmt.Printf("=== 整理输出目录(白名单): %s \n", pickerDir) scanner := core.FileScanner{} scanner.DoScan(rootDir) scanner.DoFilter() if len(vars.GlobalImagePathList) > 0 { - core.DoHandleImage(rootDir) + core.DoHandleImage(pickerDir) } if len(vars.GlobalVideoPathList) > 0 { - core.DoHandleVideo(rootDir) + core.DoHandleVideo(pickerDir) } } diff --git a/util/video.go b/util/video.go index 2e469c9..5c03485 100644 --- a/util/video.go +++ b/util/video.go @@ -3,13 +3,16 @@ package util import ( "bytes" "fmt" - "github.com/redmask-hb/GoSimplePrint/goPrint" "io" "math" "os" "os/exec" + "path/filepath" "strconv" "strings" + + "github.com/redmask-hb/GoSimplePrint/goPrint" + uuid "github.com/satori/go.uuid" ) var supportVideoTypes = []string{ @@ -148,10 +151,9 @@ func DoMoveFileToDir(filePathList []string, videoDirPath string) { bar.PrintEnd("=== Finish") } -// 移动文件到目录,跨文件系统时自动 fallback 为 copy+delete +// 移动文件到目录,跨文件系统时自动 fallback 为 copy+delete,目标文件名使用 uuid+原文件名防止同名覆盖 func moveFileToDir(sourceFilePath string, targetDirectory string) bool { - splits := strings.Split(sourceFilePath, string(os.PathSeparator)) - fileName := splits[len(splits)-1] + fileName := strings.ReplaceAll(uuid.NewV4().String(), "-", "") + "_" + filepath.Base(sourceFilePath) targetFilePath := targetDirectory + fileName err := os.Rename(sourceFilePath, targetFilePath) if err == nil { diff --git a/vars/global.go b/vars/global.go index 66bc52a..7ee34eb 100644 --- a/vars/global.go +++ b/vars/global.go @@ -6,3 +6,4 @@ var GlobalFilePath2FileNameMap = make(map[string]string) // 文件路径和文 var GlobalFilePath2FileExtMap = make(map[string]string) // 文件路径和文件扩展名的映射关系 var GlobalVideoPathList []string // 所有视频文件的路径 var GlobalImagePathList []string // 所有图片文件的路径 +var GlobalPickerDir string // 已整理文件的输出目录(白名单,扫描时跳过)