【问题标题】:How to intercept file update in Linux?如何在 Linux 中拦截文件更新?
【发布时间】:2016-03-27 10:44:46
【问题描述】:

我有一个目录 /home/my_username/my_directory

对于 my_directory 中的每个文件,我希望如果文件被更新,那么将生成旧版本和新版本之间的差异,然后将通知特定程序(我自己的程序)。

【问题讨论】:

  • 您使用 Linux 中的 'inotify' 机制来执行此操作 - 但是如果您需要更多帮助,您应该指定您的编程语言。但是,人们不会为您编写整个程序。
  • @nos :我认为 inotify 只会在执行更新后通知我(因此我无法进行 diff),不是吗?
  • 是的,因此您最好对应用程序进行编码,以便在更改原始文件时对其进行备份。 (或者只是将这些文件保存在版本控制系统中)
  • @nos :这是可能的,git 会这样做,除了“隐藏”文件仅在提交期间更新,但我需要两倍的存储大小。那么 Dropbox 是如何做到的呢?我很确定他们也“监听”文件系统事件,但是当文件更新时他们需要做差异。 Dropbox 是否也保留“旧副本”?
  • Dropbox 不提供对文件系统的低级读/写访问,并且 Dropbox 应用程序逻辑在覆盖底层文件系统的数据之前可能会发生差异。请注意,Dropbox 提供完整的修订历史记录,而不仅仅是与上一个版本的差异。

标签: linux io filesystems


【解决方案1】:

您可以使用http://sourceforge.net/projects/fuse/ 下的“用户空间中的文件系统”(FUSE)

它允许你拦截和修改给定目录的每个文件系统访问(你必须先用你自己的 FUSE 驱动程序挂载它)。

您可以在http://www.cs.nmsu.edu/~pfeiffer/fuse-tutorial/ 下找到有关如何执行此操作的教程

【讨论】:

  • 谢谢。不过,我知道这种替代方法(尽管我没有尝试过)。我希望有一个更简单的替代方案,但我确实将 Fuse 作为最后的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-28
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2013-11-21
  • 2021-10-28
  • 1970-01-01
相关资源
最近更新 更多