3

问题:

有什么方法可以跟踪 Linux 中文件的进度(即新文件/保存文件)?

细节:

我知道inotify可用于跟踪整个文件夹以进行文件创建、删除和修改。然而,这些都是非常低的水平。文本编辑器通常在保存文件时,将修改后的缓冲区写入临时位置,然后移动它并覆盖原始文件。当我想要的是 a 时,inotify 会将其视为 aCREATE和a 。MOVEMODIFY

在我看来,每次保存文件时都会将其解释为新文件,这似乎与直觉相反。我可以使用文件的任何标识值来区分创建新文件和保存现有文件吗?提出这个问题的另一种方法是:“ BeagleSpotlightWindows SearchGoogle Desktop等程序如何解决这个问题”?

目标:

这是描述我想要的东西的好方法:使用Vim,如果我打开一个文件并保存它:winotify已创建,然后用于覆盖原始文件。但是,如果将文件添加到 subversion ( svn),然后使用打开该文件Vim并保存 ( :w),svn将知道保存的文件实际上是修改后的文件,而不是新文件。这怎么svn知道?

4

2 回答 2

2

我将尝试解释,而在 Linux 中 new 或 save 可能看起来相同。linux与windows的一大区别是inode不存储文件创建时间,只存储访问、修改(文件内容更改)和更改(inode更改)时间。因此,除非您将信息保存在其他地方,例如文件本身作为元数据,否则您无法判断文件是刚刚创建还是刚刚更改。

于 2012-05-10T21:37:15.160 回答
1

johnshen64 回答了你为什么你没有看到它被修改过。关于 SVN(或 Git),他们会将文件识别为已修改,因为他们保留了已管理文件的“密钥”。

所以对于你的数据库,你需要做同样的事情。例如,您可以使用文件名中的简单数字哈希(或文件名本身,但字符串比较很慢),并在添加文件之前快速查询文件是否已被管理。

于 2012-05-11T10:45:54.110 回答