This is a creation in Article, where the information may have evolved or changed.
Package Mainimport ("Flag" "Log" "Os/exec" "Strings" "Sync" "Time" "Github.com/go-fsnotify/fsnotify") Var (sleeptime Intpath stringcmd Stringargs []string] func init () {flag. Intvar (&sleeptime, "T", "-t=30") flag. Stringvar (&path, "P", "./", "-p=filepath or Dirpath") flag. Stringvar (&cmd, "C", "", "-c=command") str: = flag. String ("A", "", "-a=" args1 args2 "') flag. Parse () args = strings. Split (*str, "")}func Main () {Watch, err: = Fsnotify. Newwatcher () if err! = Nil {log. PRINTLN ("Init Monitor Error:", err.) Error ()) return}if err: = Watch.add (path); Err! = Nil {log. PRINTLN ("ADD Monitor Path Error:", path) Return}var (cron bool = Falselock = new (sync). Mutex)) for {select {case event: = <-watch.events:log. Printf ("Monitor event%s", event.) String ()) if!cron {cron = Truego func () {T: = time. After (time. Second * time. Duration (sleeptime)) <-tif err: = Call (cmd, args ...); Err! = Nil {log. PRINTLN (Err)}lock. Lock () cron = Falselock. Unlock ()} ()}case err: = <-watch.errors:log. PrINTLN (ERR) Return}}}func call (Programe string, args ... string) error {cmd: = Exec.command (programe, args ...) BUF, err: = cmd. Output () if err! = Nil {return err}log. Printf ("\n%s\n", String (BUF)) return nil}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.