-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtraversFile.go
More file actions
73 lines (71 loc) · 1.44 KB
/
traversFile.go
File metadata and controls
73 lines (71 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package gosync
import (
"os"
"path/filepath"
)
// walk源host要同步的文件, 生成md5, 并返回列表
func Traverse(path string) ([]string, error) {
f, fErr := os.Lstat(path)
if fErr != nil {
return nil, fErr
}
var dir string
var base string
if f.IsDir() {
dir = path
base = "."
} else {
dir = filepath.Dir(path)
base = filepath.Base(path)
}
fErr = os.Chdir(dir)
if fErr != nil {
return nil, fErr
}
md5List := make([]string, 10)
var md5Str string
WalkFunc := func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
md5Str = path + ",,Directory"
md5List = append(md5List, md5Str)
}
if info.Mode().IsRegular() {
// if !info.IsDir() {
md5Str, fErr = Md5OfAFile(path)
if fErr != nil {
PrintInfor(fErr)
return fErr
}
md5Str = path + ",," + md5Str
md5List = append(md5List, md5Str)
}
if info.Mode()&os.ModeSymlink != 0 {
filename, err := os.Readlink(path)
if err != nil {
return err
}
md5Str = "symbolLink&&" + filename
md5Str = path + ",," + md5Str
md5List = append(md5List, md5Str)
}
return nil
}
fErr = filepath.Walk(base, WalkFunc)
if fErr != nil {
PrintInfor(fErr)
return nil, fErr
}
// DubugInfor(md5List)
for i, v := range md5List {
// DubugInfor(v)
if v == "" || v == ".,,Directory" {
continue
}
md5List = md5List[i:]
break
}
if md5List[len(md5List)-1] == ".,,Directory" {
return []string{}, nil
}
return md5List, nil
}