在 go-inotify 中查看递归目录

Posted

技术标签:

【中文标题】在 go-inotify 中查看递归目录【英文标题】:Watch recursive directories in go-inotify 【发布时间】:2016-04-29 05:01:20 【问题描述】:

我使用这个 go library https://godoc.org/golang.org/x/exp/inotify 在 Linux inotify 中的文件和文件夹监视程序,当我们直接在 Linux 中使用它时,它提供了一个参数来监视递归目录,即 --r 但是在这个包装器中我如何指定 while调用函数。

package main

import (
"golang.org/x/exp/inotify"
"log"
)

func main() 
  watcher, err := inotify.NewWatcher()
  if err != nil 
      log.Fatal(err)
  
  err = watcher.Watch("/home/minions")
  if err != nil 
      log.Fatal(err)
  
  for 
      select 
      case ev := <-watcher.Event:
          log.Println("event:", ev)
      case err := <-watcher.Error:
          log.Println("error:", err)
      
  

这是我的代码。

【问题讨论】:

【参考方案1】:

你不能。 INotify 不是递归的,因此您必须列出所有子目录(注意留意新目录的创建!)并根据需要添加新手表。

一个竞争库有一个用于递归目录监视的开放票,但截至 2016 年仍未解决:https://github.com/howeyc/fsnotify/issues/56

【讨论】:

但是我没有使用这个包,正如我在问题中提到的那样,我正在使用这个godoc.org/golang.org/x/exp/inotify 并且从这个unix.stackexchange.com/questions/164794/… 我发现至少 inotifywatch 有这个递归选项。 @ShilpiAgrawal:是的,我知道。我的答案仍然成立。请再读一遍。仅仅因为其他一些程序有递归选项并不意味着你的库有。 我知道@JohnZwinck 但我问这个问题是因为我使用它的库只是该程序的包装器所以,我想他们可能有它。反正没问题,我想改用python的看门狗。 @ShilpiAgrawal:您在 Go 中使用的库是 INotify 的 C 库的包装器,而不是支持递归的程序。 Go 库不调用单独的程序,它只是调用本身不支持递归监视的 C 库。 深入gohugo.io的源码,如果你想挖掘它,是一个递归手表。我怀疑他只是遍历所有目录并在所有目录中发出监视。使用提供的频道

以上是关于在 go-inotify 中查看递归目录的主要内容,如果未能解决你的问题,请参考以下文章

递归查看文件目录下所有文件

Java非递归的方式获取目录中所有文件(包括目录)

inotify+rsync实现实时同步

R语言使用fs包的dir_info函数查看文件夹下所有目录的大小递归地计算所有目录的实际大小(多少M多少GTabulate and display folder size)

R语言使用fs包的dir_info函数查看文件夹下所有目录的大小递归地计算所有目录的实际大小(多少M多少GTabulate and display folder size)

递归查找目录下所有指定文件(包括深层目录)