如何在不使用 inotifywait 的情况下监视目录的文件更改?

Posted

技术标签:

【中文标题】如何在不使用 inotifywait 的情况下监视目录的文件更改?【英文标题】:How to monitor a directory for file changes without using inotifywait? 【发布时间】:2018-08-15 12:42:43 【问题描述】:

我需要一个用于开发的 VM,而我的主机是我的 IDE 所在的位置。我发现 inotifywait 不适用于共享文件夹,因为我正在使用 Virtual Box 与我的 Linux 来宾共享本地文件夹。

基本上,我有一个简单的 bash 脚本,它需要监视目录并等待任何文件更改。 Inotifywait 将是最好的选择,但我无法让它与我的共享文件夹一起使用。

我想知道我的问题是否还有其他选择?

【问题讨论】:

这是stackexchange中一个问题的重复:unix.stackexchange.com/questions/305394/… 是的,但它并没有任何像样的解决方案,而且是 1 年前,事情可能已经改变了...... @Erdss4 是的,但它确实没有任何体面的解决方案因为对于试图滥用基于状态的数据没有没有体面的解决方案存储结构作为基于事件的消息服务。 inotify 起作用的唯一原因是它与操作系统内核中基于状态的结构挂钩。这不适用于从另一台服务器共享的文件系统。 @AndrewHenle 如果可以在共享资源上远程使用 inotify 调用,它可以工作,但它需要改进网络文件系统协议。 @peterh 没错,但 NFSv4 和 SMB/CIFS 已经足够复杂了...... 【参考方案1】:

根据文件的大小和您可以更改的性质:

创建文件的校验和(md5、CRC、SHA256)并观察变化 检查文件大小并注意更改

【讨论】:

是的,这就是我最终的目标。我刚刚使用 tar 计算了目录的哈希值。每次发生更改时,哈希都会指示文件更改...

以上是关于如何在不使用 inotifywait 的情况下监视目录的文件更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不轮询的情况下监视页面的更改?

在 bash 中使用 inotifywait 监视文件夹以进行队列

在脚本中使用 inotifywait -m 而不创建额外的进程?

使用 inotifywait 监视多个目录并运行脚本

在不监视默认文本的情况下,有没有办法更新滚动下拉菜单的文本?

将文件夹添加到监视目录时不会触发 inotifywait close_write