func main() { var watch_dir = flag.String("watch-dir", ".", "Path to watch") var scripts_dir = flag.String("scripts-dir", "./scripts", "Path for supporting shell scripts") flag.Parse() watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } done := make(chan bool) // Process events go func() { for { select { case ev := <-watcher.Event: log.Println("got event", ev) if !ev.IsCreate() { continue } err := runEvent(ev.Name, *watch_dir, *scripts_dir) if err != nil { log.Println("error handling event:", err) } case err := <-watcher.Error: log.Println("error:", err) done <- true } } }() for k, _ := range fileHandlers { full_path := filepath.Join(*watch_dir, k) dir_path := filepath.Dir(full_path) err = watcher.Watch(dir_path) if err != nil { log.Println("warn: error setting up watcher (dir doesn't exist?):", err) } err = runEvent(full_path, *watch_dir, *scripts_dir) if err != nil { log.Println("warn: initalizing event failed:", err) } } <-done watcher.Close() }
func ExampleNewWatcher() { watcher, err := fsnotify.NewWatcher() if err != nil { log.Fatal(err) } go func() { for { select { case ev := <-watcher.Event: log.Println("event:", ev) case err := <-watcher.Error: log.Println("error:", err) } } }() err = watcher.Watch("/tmp/foo") if err != nil { log.Fatal(err) } }