|
|
@ -5,7 +5,6 @@ import ( |
|
|
"fmt" |
|
|
"fmt" |
|
|
"os" |
|
|
"os" |
|
|
"path/filepath" |
|
|
"path/filepath" |
|
|
"runtime" |
|
|
|
|
|
"scagent/util" |
|
|
"scagent/util" |
|
|
|
|
|
|
|
|
"go.uber.org/zap" |
|
|
"go.uber.org/zap" |
|
|
@ -44,8 +43,8 @@ func (f *FileRpcService) GetFilePath(args *Args, replay *string) error { |
|
|
logger := util.NewProductionLogger() |
|
|
logger := util.NewProductionLogger() |
|
|
defer logger.Sync() |
|
|
defer logger.Sync() |
|
|
// 并发处理
|
|
|
// 并发处理
|
|
|
go scanFileUnderPath(args.FilePath, args.Scope, logger, replay) |
|
|
scanFileUnderPath(args.FilePath, args.Scope, logger, replay) |
|
|
runtime.Gosched() |
|
|
// runtime.Gosched()
|
|
|
//
|
|
|
//
|
|
|
return nil |
|
|
return nil |
|
|
} |
|
|
} |
|
|
@ -54,11 +53,10 @@ func (f *FileRpcService) GetFilePath(args *Args, replay *string) error { |
|
|
func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay *string) { |
|
|
func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay *string) { |
|
|
var flplist FlpList // 文件列表
|
|
|
var flplist FlpList // 文件列表
|
|
|
|
|
|
|
|
|
// 遍历目录下的文件
|
|
|
|
|
|
var allFiles []string // 存储所有文件路径
|
|
|
|
|
|
|
|
|
|
|
|
// 遍历所有的文件,时间长
|
|
|
// 遍历所有的文件,时间长
|
|
|
if scope == "all" { |
|
|
if scope == "all" { |
|
|
|
|
|
// 遍历目录下的文件
|
|
|
|
|
|
var allFiles []string // 存储所有文件路径
|
|
|
// 递归遍历目录及其子目录
|
|
|
// 递归遍历目录及其子目录
|
|
|
err := filepath.WalkDir(rootDir, func(path string, d os.DirEntry, err error) error { |
|
|
err := filepath.WalkDir(rootDir, func(path string, d os.DirEntry, err error) error { |
|
|
// 处理遍历过程中的错误(如权限不足)
|
|
|
// 处理遍历过程中的错误(如权限不足)
|
|
|
@ -87,14 +85,17 @@ func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay |
|
|
// 加入到列表
|
|
|
// 加入到列表
|
|
|
hash := util.CalacHash(file) |
|
|
hash := util.CalacHash(file) |
|
|
// 文件大小
|
|
|
// 文件大小
|
|
|
fsize := fmt.Sprintf("%.2f KB", d.Size()/1024) |
|
|
fsize := fmt.Sprintf("%.2f KB", float64(d.Size())/1024) |
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: file, Size: fsize, Hash: hash}) |
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: file, Size: fsize, Hash: hash}) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
// 遍历对一个的目录
|
|
|
// 遍历对一个的目录
|
|
|
if scope == "dir" { |
|
|
if scope == "dir" { |
|
|
|
|
|
fmt.Printf("目录路径: %s\n", rootDir) |
|
|
// 遍历目录下的文件
|
|
|
// 遍历目录下的文件
|
|
|
finfo, err := os.Stat(rootDir) |
|
|
finfo, err := os.Stat(rootDir) |
|
|
|
|
|
// fmt.Printf("目录信息: %v\n", finfo)
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
if err != nil { |
|
|
logger.Error("获取目录信息出错", zap.Error(err)) |
|
|
logger.Error("获取目录信息出错", zap.Error(err)) |
|
|
} |
|
|
} |
|
|
@ -104,30 +105,39 @@ func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
logger.Error("读取目录出错", zap.Error(err)) |
|
|
logger.Error("读取目录出错", zap.Error(err)) |
|
|
} |
|
|
} |
|
|
|
|
|
// fmt.Printf("目录下的文件: %v\n", files)
|
|
|
for _, file := range files { |
|
|
for _, file := range files { |
|
|
|
|
|
// 拼装路径
|
|
|
|
|
|
realpath := filepath.Join(rootDir, file.Name()) |
|
|
// fmt.Printf("文件路径: %s\n", file.Name())
|
|
|
// fmt.Printf("文件路径: %s\n", file.Name())
|
|
|
fileinfo, err := os.Stat(file.Name()) |
|
|
fileinfo, err := os.Stat(realpath) |
|
|
|
|
|
// fmt.Printf("文件信息: %v\n", fileinfo)
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
if err != nil { |
|
|
logger.Error("获取文件信息出错", zap.Error(err)) |
|
|
logger.Error("获取文件信息出错", zap.Error(err)) |
|
|
continue |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var fsize string |
|
|
var fsize string |
|
|
|
|
|
fsize = "0kb" |
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
if file.IsDir() { |
|
|
if file.IsDir() { |
|
|
fsize = "0" |
|
|
fsize = "0" |
|
|
} else { |
|
|
} else { |
|
|
fsize = fmt.Sprintf("%d", fileinfo.Size()) |
|
|
fsize = fmt.Sprintf("%d", fileinfo.Size()) |
|
|
} |
|
|
} |
|
|
// 加入到列表
|
|
|
// 加入到列表
|
|
|
hash := util.CalacHash(file.Name()) |
|
|
hash := util.CalacHash(realpath) |
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: filepath.Join(rootDir, file.Name()), Size: fsize, Hash: hash}) |
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: filepath.Join(rootDir, file.Name()), Size: fsize, Hash: hash}) |
|
|
// allFiles = append(allFiles, filepath.Join(rootDir, file.Name()))
|
|
|
// allFiles = append(allFiles, filepath.Join(rootDir, file.Name()))
|
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 遍历文件
|
|
|
} else { |
|
|
|
|
|
ssize := fmt.Sprintf("%.2f KB", float64(finfo.Size())/1024) |
|
|
|
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: rootDir, Size: ssize, Hash: util.CalacHash(rootDir)}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//
|
|
|
//
|
|
|
|
|
|
|
|
|
// 将文件列表转换为json字符串
|
|
|
// 将文件列表转换为json字符串
|
|
|
@ -135,6 +145,7 @@ func scanFileUnderPath(rootDir string, scope string, logger *zap.Logger, replay |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
logger.Error("转换为json字符串出错", zap.Error(err)) |
|
|
logger.Error("转换为json字符串出错", zap.Error(err)) |
|
|
} |
|
|
} |
|
|
|
|
|
// fmt.Printf("json字符串: %s\n", jsonStr)
|
|
|
// 执行结果存到replay
|
|
|
// 执行结果存到replay
|
|
|
*replay = string(jsonStr) |
|
|
*replay = string(jsonStr) |
|
|
|
|
|
|
|
|
|