有没有办法跟踪Linux中文件的进度(即新文件/保存文件)?
我知道inotify可用于跟踪整个文件夹以进行文件创建,删除和修改。但是,那些水平很低。文本编辑器通常在保存文件时,将修改后的缓冲区写入临时位置,然后移动它并覆盖原始文件。当我想要的是CREATE
时,可以通过inotify将其视为MOVE
和MODIFY
。
对我来说,每次保存文件时都会将其解释为新文件。我可以用来区分创建新文件和保存现有文件的文件的识别值吗?提出这个问题的另一种方法是:“Beagle,Spotlight,Windows Search和Google Desktop等程序如何解决这个问题”?
以下是描述我想要的内容的好方法:使用Vim
,如果我打开文件并保存(:w
),该文件将被写入临时文件然后移过来到原始文件,诱使inotify
相信创建了一个全新的文件,然后用来覆盖原始文件。但是,如果将文件添加到subversion(svn
),然后使用Vim
打开该文件并保存(:w
),svn
将知道保存的文件实际上是修改过的文件而不是新文件。 svn
如何知道这一点?
答案 0 :(得分:2)
我会尝试解释新的或保存在Linux中可能看起来一样。 linux与windows的一个重要区别是,inode不存储文件创建时间,只存储访问,修改(文件内容更改)和更改(inode更改)时间。因此,除非您将信息保存在其他位置(例如文件内部作为元数据),否则无法判断文件是刚创建还是仅更改。
答案 1 :(得分:1)
johnshen64回答你为什么你没有看到它被修改。关于SVN(或Git),他们会将文件识别为已修改,因为它们保留了已管理文件的“密钥”。
因此,对于您的数据库,您需要执行相同的操作。例如,你可以使用文件名中的简单数字哈希(或文件名本身,但字符串比较慢),并在添加文件之前快速查询文件是否已经管理。