A:增加打包时自动将指定文件复制到目标文件夹
U:可通过目录完成 cmd 命令调用
This commit is contained in:
1 parent
a345134e04
commit
cf48204070
2 files changed
+109
-5
No files matched your search
@@ -3,10 +3,12 @@ package utils
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"rear/pkg/logger"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -76,8 +78,9 @@ func detectTools() error {
|
|||||||
// findTool 查找工具
|
// findTool 查找工具
|
||||||
func findTool(name string, execDir string) string {
|
func findTool(name string, execDir string) string {
|
||||||
// Windows 下添加 .exe 后缀
|
// Windows 下添加 .exe 后缀
|
||||||
|
exeName := name
|
||||||
if runtime.GOOS == "windows" {
|
if runtime.GOOS == "windows" {
|
||||||
name = name + ".exe"
|
exeName = name + ".exe"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查找顺序:
|
// 查找顺序:
|
||||||
@@ -87,10 +90,14 @@ func findTool(name string, execDir string) string {
|
|||||||
// 4. 系统 PATH
|
// 4. 系统 PATH
|
||||||
|
|
||||||
searchPaths := []string{
|
searchPaths := []string{
|
||||||
filepath.Join(execDir, name),
|
filepath.Join(execDir, exeName),
|
||||||
filepath.Join(execDir, "bin", name),
|
filepath.Join(execDir, "bin", exeName),
|
||||||
filepath.Join(execDir, "tools", name),
|
filepath.Join(execDir, "tools", exeName),
|
||||||
|
filepath.Join(execDir, "tools", name, exeName),
|
||||||
}
|
}
|
||||||
|
jsonBytes, _ := json.Marshal(searchPaths)
|
||||||
|
msg := string(jsonBytes)
|
||||||
|
logger.Warn(msg)
|
||||||
|
|
||||||
for _, path := range searchPaths {
|
for _, path := range searchPaths {
|
||||||
if _, err := os.Stat(path); err == nil {
|
if _, err := os.Stat(path); err == nil {
|
||||||
@@ -99,7 +106,7 @@ func findTool(name string, execDir string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 尝试从 PATH 中查找
|
// 尝试从 PATH 中查找
|
||||||
if path, err := exec.LookPath(name); err == nil {
|
if path, err := exec.LookPath(exeName); err == nil {
|
||||||
return path
|
return path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,15 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"embed"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
"path/filepath"
|
||||||
"rear/internal/config"
|
"rear/internal/config"
|
||||||
"rear/internal/container"
|
"rear/internal/container"
|
||||||
"rear/internal/db"
|
"rear/internal/db"
|
||||||
@@ -22,6 +26,9 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//go:embed tools/windows_amd64/exiftool/*
|
||||||
|
var exiftoolFS embed.FS
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// 日志初始化
|
// 日志初始化
|
||||||
err := logger.InitDefaultLogger()
|
err := logger.InitDefaultLogger()
|
||||||
@@ -45,6 +52,21 @@ func main() {
|
|||||||
// 初始化基础服务(启动写操作处理协程)
|
// 初始化基础服务(启动写操作处理协程)
|
||||||
repositories.InitBaseService()
|
repositories.InitBaseService()
|
||||||
|
|
||||||
|
// 创建运行目录
|
||||||
|
execPath, err := os.Executable()
|
||||||
|
execDir := filepath.Dir(execPath)
|
||||||
|
|
||||||
|
// 将 CLI 放到到运行目录
|
||||||
|
join := filepath.Join(execDir, "tools", "exiftool")
|
||||||
|
srcDir := `.\tools\windows_amd64\exiftool\exiftool` // 源目录
|
||||||
|
//destDir := `.\build\tools\exiftool` // 目标目录
|
||||||
|
|
||||||
|
// 复制整个目录
|
||||||
|
if err := copyDirectory(srcDir, join); err != nil {
|
||||||
|
fmt.Printf("复制失败: %v\n", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 初始化外部(CLI)工具管理
|
// 初始化外部(CLI)工具管理
|
||||||
// utils.EnsureInitialized()
|
// utils.EnsureInitialized()
|
||||||
|
|
||||||
@@ -123,3 +145,78 @@ func startHttp(con *container.Container) {
|
|||||||
|
|
||||||
logger.Info("Server exited")
|
logger.Info("Server exited")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func copyDirectory(src, dest string) error {
|
||||||
|
|
||||||
|
// 获取源目录信息
|
||||||
|
srcInfo, err := os.Stat(src)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("源目录不存在: %s, 错误: %v", src, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建目标目录
|
||||||
|
if err := os.MkdirAll(dest, srcInfo.Mode()); err != nil {
|
||||||
|
return fmt.Errorf("创建目标目录失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取源目录内容
|
||||||
|
entries, err := os.ReadDir(src)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("读取源目录失败: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 遍历并复制每个文件/目录
|
||||||
|
for _, entry := range entries {
|
||||||
|
srcPath := filepath.Join(src, entry.Name())
|
||||||
|
destPath := filepath.Join(dest, entry.Name())
|
||||||
|
|
||||||
|
if entry.IsDir() {
|
||||||
|
// 递归复制子目录
|
||||||
|
if err := copyDirectory(srcPath, destPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 复制文件
|
||||||
|
if err := copyFile(srcPath, destPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func copyFile(src, dest string) error {
|
||||||
|
// 打开源文件
|
||||||
|
srcFile, err := os.Open(src)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer srcFile.Close()
|
||||||
|
|
||||||
|
// 获取源文件信息
|
||||||
|
srcInfo, err := srcFile.Stat()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保目标目录存在
|
||||||
|
if err := os.MkdirAll(filepath.Dir(dest), 0755); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建目标文件
|
||||||
|
destFile, err := os.Create(dest)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer destFile.Close()
|
||||||
|
|
||||||
|
// 复制文件内容
|
||||||
|
if _, err := io.Copy(destFile, srcFile); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 设置文件权限
|
||||||
|
return os.Chmod(dest, srcInfo.Mode())
|
||||||
|
}
|
||||||
Reference in new issue
Block a user