【发布时间】:2011-11-10 01:44:21
【问题描述】:
我需要在 Linux 系统上生成自上次列表生成以来修改文件的列表。我需要在用户空间执行此操作,因此 FAM 之类的解决方案不适合我。为此,我有以下一些限制:
- 目标解决方案可用于
ext2和ext3文件系统。 - 必须在用户空间实现,不允许修改内核或模块。
- 不得依赖于文件修改时间。它应该至少使用文件大小,或者更好的校验和算法来生成delta。
- 不必是实时的,它会定期运行(例如每 10 分钟)。
有人知道这个任务已经实施的解决方案吗?为此,我尝试使用rsync,但似乎rsync 需要所有文件的副本来计算差异。
编辑
基本上,我需要一种机制,可以在给定目录下递归生成文件列表及其增量,并与之前的文件进行比较。它可以使用文件大小来产生差异,或者更好地使用差异算法(类似于rsync algorithm)。但是,像 MD5 和 SHA1 这样的加密哈希算法不适合我,因为它们的性能。请不要说我有成千上万的文件,这不是加密案例。
实时解决方案或需要更改内核的解决方案(如inotify、kqueue、FAM、Fuse)也不适合我。
谢谢。
【问题讨论】:
-
rsync 有-n 切换到假运行命令
-
@sputnick 即使使用
-n开关,它是否也会为未来的运行存储差异? -
我添加了一个可以帮助你的 Python 脚本。它也该死的快。如果您有挂载点,您可能希望将它们过滤掉以避免遍历 f.e.
/proc. -
@hochl 我正在尝试您的脚本并将提供反馈。非常感谢您的努力。
标签: linux filesystems rsync