在Linux中查看文件以进行更改

时间:2012-05-10 21:24:20

标签: linux file search inotify

问题:

有没有办法跟踪Linux中文件的进度(即新文件/保存文件)?

详细说明:

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

对我来说,每次保存文件时都会将其解释为新文件。我可以用来区分创建新文件和保存现有文件的文件的识别值吗?提出这个问题的另一种方法是:“BeagleSpotlightWindows SearchGoogle Desktop等程序如何解决这个问题”?

目标:

以下是描述我想要的内容的好方法:使用Vim,如果我打开文件并保存(:w),该文件将被写入临时文件然后移过来到原始文件,诱使inotify相信创建了一个全新的文件,然后用来覆盖原始文件。但是,如果将文件添加到subversion(svn),然后使用Vim打开该文件并保存(:w),svn将知道保存的文件实际上是修改过的文件而不是新文件。 svn如何知道这一点?

2 个答案:

答案 0 :(得分:2)

我会尝试解释新的或保存在Linux中可能看起来一样。 linux与windows的一个重要区别是,inode不存储文件创建时间,只存储访问,修改(文件内容更改)和更改(inode更改)时间。因此,除非您将信息保存在其他位置(例如文件内部作为元数据),否则无法判断文件是刚创建还是仅更改。

答案 1 :(得分:1)

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

因此,对于您的数据库,您需要执行相同的操作。例如,你可以使用文件名中的简单数字哈希(或文件名本身,但字符串比较慢),并在添加文件之前快速查询文件是否已经管理。