-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
89 lines (71 loc) · 1.78 KB
/
main.go
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package main
import (
"flag"
"fmt"
"log"
"os"
"path/filepath"
"time"
"github.com/shirou/gopsutil/v3/disk"
)
// file and size to store
type FileInfo struct {
Path string
Size int64
lastusage time.Time
}
// scanDirectory scans a directory and returns a list of files
func scanDirectory(dir string) ([]FileInfo, error) {
var files []FileInfo
// ref: https://pkg.go.dev/path/filepath#Walk (p.s with reference to the given )
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if !info.IsDir() {
files = append(files, FileInfo{
Path: path,
Size: info.Size(),
lastusage: info.ModTime(),
})
}
return nil
})
return files, err
}
func main() {
var size int64
//by default here pwd is used to scan
dir:=flag.String("dir", ".", "Directory path to analyze")
help:=flag.Bool("help",false,"by default PWD will be used as dir path")
flag.Int64Var(&size,"size",100,"filter with file size")
flag.Parse()
if *help{
flag.Usage()
os.Exit(0)
}
usage, err := disk.Usage(*dir)
if err != nil {
log.Fatalf("Error getting disk usage: %v", err)
}
//note: usage value is in bytes
fmt.Printf("Total disk usage: %.2f GB\n", float64(usage.Used)/1024/1024/1024)
fmt.Printf("Scanning directory: %s\n", *dir)
files, err := scanDirectory(*dir)
if err != nil {
log.Fatalf("Error scanning directory: %v", err)
}
// List large files
fmt.Println("\nLarge files in the given directory :")
flag:=false
for _, file := range files {
//greater then 100MB can be shown as large files
if file.Size > size*1024*1024 {
fmt.Printf("%s - %.2f MB - last usage at: %v\n", file.Path, float64(file.Size)/1024/1024,file.lastusage)
flag=true
}
}
if !flag{
fmt.Printf("No file is greater than %v MB",size)
}
}