使用golang怎么对文件的变化进行监听

  介绍

本篇文章为大家展示了使用golang怎么对文件的变化进行监听,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

package 主要   import  (   “log"   “;github.com/fsnotify/fsnotify"   )   func  main (), {   观察家,err :=, fsnotify.NewWatcher ()   if  err  !=, nil  {   log.Fatal (err)   }   defer  watcher.Close ()   done :=, (chan  bool)   go  func (), {   for  {   select  {   case 事件,ok :=, & lt; -watcher.Events:   if  ! ok , {   返回   }   log.Println(“事件:“,,事件)   时间==if  event.Op& fsnotify.Write  fsnotify.Write  {   log.Println (“modified 文件:“,,event.Name)   }   呃,case  ok :=, & lt; -watcher.Errors:   if  ! ok , {   返回   }   log.Println(“错误:“,,呃)   }   }   }()   时间=err  watcher.Add (“/tmp/foo")   if  err  !=, nil  {   log.Fatal (err)   }   & lt;完成   }

<>强补充:golang监控文件变化,git自动提交代码

代码如下:

如果文件有变动,且10分钟内,没有再次变动,则提交代码

package  main    import  (   ,“fmt"   ,_ “fmt"   ,“;github.com/fsnotify/fsnotify"   ,“log"   ,“os"   ,“os/exec"   ,“路径/filepath"   ,“time"   )   ,//if 从而conditions ,断开连接,满足,execute 从而shell 脚本   func  execCmd (), {   ,cmd :=, exec.Command(“/根/nfs_bak_pro/nfs.git.sh")   ,err :=, cmd.Run ()   ,if  err  !=, nil  {   ,fmt.Println (“Execute  Command 失败:“,+,err.Error ())   ,返回   ,}   ,fmt.Println (“Execute  Command 完成了!”)   }   ,//handle  folder  files  changed 事件   func  watchFiles (watcher  * fsnotify.Watcher, ch  chan  int64), {   ,for  {   ,select  {   ,case  ev :=, & lt; -watcher.Events:, {   ,isNotify :=false   ,   ,if  ev.Op ,, fsnotify.Create ==, fsnotify.Create  {   log.Println才能(“create :,,,, ev.Name)   isNotify 才能=,真的   ,   文件,才能,err :=, os.Stat (ev.Name)   if 才能;err ==, nil ,,, file.IsDir (), {   watcher.Add才能(ev.Name)   fmt.Println才能(“add  watch ,:,“,, ev.Name)   ,,}   ,}   ,   ,if  ev.Op ,, fsnotify.Remove ==, fsnotify.Remove  {   log.Println才能(“delete :,,,, ev.Name)   isNotify 才能=,真的   err 才能;:=,watcher.Remove (ev.Name)   fmt.Printf才能(“remove 看:% s,,犯错:,% v \ n",, ev.Name,,呃)   ,}   ,   ,if  ev.Op ,, fsnotify.Rename ==, fsnotify.Rename  {   log.Println才能(“rename :,,,, ev.Name)   if “才能”,!=,ev.Name  {   isNotify 才能=,真的   err 才能;:=,watcher.Remove (ev.Name)   fmt.Printf才能(“remove 看:% s,,犯错:,% v \ n",, ev.Name,,呃)   ,,}   ,}   ,   ,if  isNotify  {   ch 才能;& lt;作用;time.Now () .Unix ()   ,}   ,}   ,case  err :=, & lt; -watcher.Errors:, {   ,log.Println (“watcher  error ,:,“,,呃)   ,返回   ,}   ,}   ,}   }   ,//if  folder  event ,, execute 从而shell  script  after  10分钟   func  watchTime (ch  chan  int64), {   ,var  timer  * time.Timer   ,for  {   ,select  {   ,case  & lt;安康;ch: {   ,if  nil  !=, timer  {   log.Printf才能(“reset  timer")   timer.Stop才能()   ,}=,,timer  time.NewTimer (10, *, 60, *, time.Second)   ,go  func (), {   & lt; -timer.C才能   execCmd才能()   ,}()   ,}   ,}   ,}   }   ,//watch 从而,folder 以及sub 文件夹   func  WatchDir (watcher  * fsnotify.Watcher, dir 字符串),{   ,filepath.Walk (dir, func(字符串,path  info  os.FileInfo,, err 错误),error  {   ,if  info.IsDir (), {   ,道路,err :=, filepath.Abs(路径)   ,if  err  !=, nil  {   return 犯错   ,}=,,err  watcher.Add(路径)   ,if  err  !=, nil  {   return 犯错   ,}   ,}   return  nil   ,})   },   ,   func  main (), {   ,notifyCh :=, (chan  int64)   观察者的不同之处是,err :=, fsnotify.NewWatcher ()   ,if  err  !=, nil  {   ,log.Fatal (err)   ,}   ,defer  watcher.Close ()   ,   null   null   null   null   null   null   null   null   null   null   null   null

使用golang怎么对文件的变化进行监听