您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用golang怎么對(duì)文件的變化進(jìn)行監(jiān)聽,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
package main import ( "log" "github.com/fsnotify/fsnotify" ) func main() { watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } defer watcher.Close() done := make(chan bool) go func() { for { select { case event, ok := <-watcher.Events: if !ok { return } log.Println("event:", event) if event.Op&fsnotify.Write == fsnotify.Write { log.Println("modified file:", event.Name) } case err, ok := <-watcher.Errors: if !ok { return } log.Println("error:", err) } } }() err = watcher.Add("/tmp/foo") if err != nil { log.Fatal(err) } <-done }
補(bǔ)充:golang監(jiān)控文件變化,git自動(dòng)提交代碼
如果文件有變動(dòng),且10分鐘內(nèi),沒有再次變動(dòng),則提交代碼
package main import ( "fmt" _ "fmt" "github.com/fsnotify/fsnotify" "log" "os" "os/exec" "path/filepath" "time" ) //if the conditions are met, execute the shell script func execCmd() { cmd := exec.Command("/root/nfs_bak_pro/nfs.git.sh") err := cmd.Run() if err != nil { fmt.Println("Execute Command failed:" + err.Error()) return } fmt.Println("Execute Command finished.") } //handle folder files changed event func watchFiles(watcher *fsnotify.Watcher, ch chan int64) { for { select { case ev := <-watcher.Events: { isNotify := false if ev.Op & fsnotify.Create == fsnotify.Create { log.Println("create : ", ev.Name) isNotify = true file, 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 = true err := watcher.Remove(ev.Name) fmt.Printf("remove watch: %s, err: %v\n", ev.Name, err) } if ev.Op & fsnotify.Rename == fsnotify.Rename { log.Println("rename : ", ev.Name) if "" != ev.Name { isNotify = true err := watcher.Remove(ev.Name) fmt.Printf("remove watch: %s, err: %v\n", ev.Name, err) } } if isNotify { ch <- time.Now().Unix() } } case err := <-watcher.Errors: { log.Println("watcher error : ", err) return } } } } //if folder event met, execute the shell script after 10minutes func watchTime(ch chan int64) { var timer *time.Timer for { select { case <- ch:{ if nil != timer { log.Printf("reset timer") timer.Stop() } timer = time.NewTimer(10 * 60 * time.Second) go func() { <-timer.C execCmd() }() } } } } //watch the folder and sub folders func WatchDir(watcher *fsnotify.Watcher, dir string) { filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { if info.IsDir() { path, err := filepath.Abs(path) if err != nil { return err } err = watcher.Add(path) if err != nil { return err } } return nil }) } func main() { notifyCh := make(chan int64) watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } defer watcher.Close() WatchDir(watcher, "/data/nfs") go watchFiles(watcher, notifyCh) go watchTime(notifyCh) select {} }
#!/bin/bash cd /root/nfs_bak_pro/nfs.git log_file=/root/nfs_bak_pro/nfs_git_`date +"%Y%m%d"`.log git add --all . >> $log_file git commit -a -m "`date +"%Y-%m-%d %H:%M:%S"`" >> $log_file git push origin master >> $log_file
上述內(nèi)容就是使用golang怎么對(duì)文件的變化進(jìn)行監(jiān)聽,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。