74 lines
1.9 KiB
Go
74 lines
1.9 KiB
Go
|
package cmd
|
|||
|
|
|||
|
import (
|
|||
|
"file_monitoring/config"
|
|||
|
"git.hpds.cc/Component/logging"
|
|||
|
"github.com/fsnotify/fsnotify"
|
|||
|
"github.com/spf13/cobra"
|
|||
|
"go.uber.org/zap"
|
|||
|
"log"
|
|||
|
)
|
|||
|
|
|||
|
var (
|
|||
|
ConfigFile string = "./config/config.yaml"
|
|||
|
)
|
|||
|
|
|||
|
func Run() *cobra.Command {
|
|||
|
//创建一个监控对象
|
|||
|
watch, err := fsnotify.NewWatcher()
|
|||
|
if err != nil {
|
|||
|
//log.Fatal(err)
|
|||
|
logging.L().Error("new watcher err", zap.Error(err))
|
|||
|
}
|
|||
|
defer watch.Close()
|
|||
|
//添加要监控的对象,文件或文件夹
|
|||
|
err = watch.Add(config.DefaultMonitoringDirectory)
|
|||
|
if err != nil {
|
|||
|
logging.L().Error("new watcher err", zap.Error(err))
|
|||
|
}
|
|||
|
//我们另启一个goroutine来处理监控对象的事件
|
|||
|
go func() {
|
|||
|
for {
|
|||
|
select {
|
|||
|
case ev := <-watch.Events:
|
|||
|
{
|
|||
|
//判断事件发生的类型,如下5种
|
|||
|
// Create 创建
|
|||
|
// Write 写入
|
|||
|
// Remove 删除
|
|||
|
// Rename 重命名
|
|||
|
// Chmod 修改权限
|
|||
|
if ev.Op&fsnotify.Create == fsnotify.Create {
|
|||
|
logging.L().Info("创建文件", zap.String("文件名", ev.Name))
|
|||
|
//log.Println("创建文件 : ", ev.Name)
|
|||
|
}
|
|||
|
if ev.Op&fsnotify.Write == fsnotify.Write {
|
|||
|
logging.L().Info("写入文件", zap.String("文件名", ev.Name))
|
|||
|
//log.Println("写入文件 : ", ev.Name)
|
|||
|
}
|
|||
|
if ev.Op&fsnotify.Remove == fsnotify.Remove {
|
|||
|
logging.L().Info("删除文件", zap.String("文件名", ev.Name))
|
|||
|
//log.Println("删除文件 : ", ev.Name)
|
|||
|
}
|
|||
|
if ev.Op&fsnotify.Rename == fsnotify.Rename {
|
|||
|
logging.L().Info("重命名文件", zap.String("文件名", ev.Name))
|
|||
|
//log.Println("重命名文件 : ", ev.Name)
|
|||
|
}
|
|||
|
if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
|
|||
|
logging.L().Info("修改权限", zap.String("文件名", ev.Name))
|
|||
|
//log.Println("修改权限 : ", ev.Name)
|
|||
|
}
|
|||
|
}
|
|||
|
case err := <-watch.Errors:
|
|||
|
{
|
|||
|
log.Println("error : ", err)
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}()
|
|||
|
|
|||
|
//循环
|
|||
|
select {}
|
|||
|
}
|