// 通过信号机制实现一个文件监听程序,当文件发生变化时,打印出文件名,同时备份当前文件,启动时自动备份一次
package main
import (
"github.com/fsnotify/fsnotify"
"log"
"fmt"
)
func main() {
watch, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watch.Close()
// 添加要监控的对象,文件或者文件夹
err = watch.Add("./testDir")
if err != nil {
log.Fatal(err)
}
// 使用 goroutine 来处理监控事件
go func() {
for {
select {
case ev := <-watch.Events:
{
// 判断事件发生的类型,大致有:
// Create 创建
// Write 写入
// Remove 删除
// Rename 重命名
// Chmod 修改权限
if ev.Op&fsnotify.Write == fsnotify.Write {
fmt.Println("modified file:", ev.Name)
}
if ev.Op&fsnotify.Create == fsnotify.Create {
fmt.Println("create file:", ev.Name)
}
if ev.Op&fsnotify.Remove == fsnotify.Remove {
fmt.Println("remove file:", ev.Name)
}
if ev.Op&fsnotify.Rename == fsnotify.Rename {
fmt.Println("rename file:", ev.Name)
}
if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
fmt.Println("chmod file:", ev.Name)
}
}
case err := <-watch.Errors:
{
log.Println("error:", err)
return
}
}
}
}()
// 阻塞主 goroutine
select {}
}