目前,我正在检查树中每个文件的修改时间(来自fstat的st_mtime)的异或校验和。我将其与找到的文件数量和文件大小校验和(允许溢出)结合使用以确保安全,但我非常担心在极端病态情况下会导致误报。
我考虑的一个替代选择(安全)是按名称和文件内容的CRC32保留每个文件的清单。然而,这个选项对于许多文件(比如数千个)来说相当慢,或者至少比我想象的要慢。
因此,问题是,有什么提示或技巧可以确定目录树中是否更改了任何文件?我希望避免逐字节比较而不牺牲太多可靠性。
非常感谢您的建议。
目前,我正在检查树中每个文件的修改时间(来自fstat的st_mtime)的异或校验和。我将其与找到的文件数量和文件大小校验和(允许溢出)结合使用以确保安全,但我非常担心在极端病态情况下会导致误报。
我考虑的一个替代选择(安全)是按名称和文件内容的CRC32保留每个文件的清单。然而,这个选项对于许多文件(比如数千个)来说相当慢,或者至少比我想象的要慢。
因此,问题是,有什么提示或技巧可以确定目录树中是否更改了任何文件?我希望避免逐字节比较而不牺牲太多可靠性。
非常感谢您的建议。
readdir
返回的文件顺序可能会发生变化,即使文件系统没有变化,你可以先对每个目录中的文件进行排序(并在遍历期间对目录进行排序)。例如,假设我删除了两个具有相同时间戳的文件,并创建了另外两个具有不同时间戳的文件,如果它们是临时文件,则完全有可能。你的“文件数量和时间戳的异或值”指标无法检测到这一点。 - Steve Jessop