1

我目前正在使用Python的功能,

os.walk('/')

在 OS X 上循环遍历我的整个文件系统。我的目标是制作一个个人守护进程来跟踪:

  1. 新制作的文件/目录
  2. 调整/触摸的文件/目录
  3. 已删除的文件(可能)

这个想法

这更像是一个预防功能,我想添加到我的 Mac 中,以便能够查看奇怪的东西是否被放置在我不需要的目录中,所以如果我的 Mac 曾经被某些(但未知的)木马感染,我可能已经自己检测到了. 此外,我正在考虑稍后添加功能,以便在检测到某些问题时关闭我的互联网连接等。这可能是一个不合理的功能,但由于它只是一个个人脚本,我认为它还不错:P。

我想要达到的目标

所以我的主要问题是。第一次运行后,我将保存整个文件系统及其元数据(创建数据、修改日期)的数组。之后,我希望守护程序以“监视”模式在后台运行,实际上是用新循环的文件系统镜像文件系统的最后一个已知存储数组。现在的问题是,当我运行脚本来测试它时,我的 CPU 开始烧毁,一段时间后我的 MacBook 开始打嗝。我想在我的 for 循环中的每个目录步骤“os.walk()”之间添加睡眠。我的问题是:什么是正确的睡眠时间?我的 MacBook 的磁盘工具说我有 183.867 个文件夹和 1.013.320 个文件,总共有 1.197.187 个条目(因为文件夹实际上也是文件)。所以将我的代码设置为:

time.sleep(0.001)

.. 大约需要 2 分钟处理这 120 万个条目。我不知道这是否好,我更喜欢根据文件/文件夹总数使其更加动态。

一个额外的功能 根据我的问题,我注意到 OS X 磁盘实用程序已经知道我的文件和文件夹总数。Python 也可以在不进行极端循环的情况下获取这些数据吗?也许调用 OS X 内置的终端功能。这样,如果使用小 GUI 来显示守护程序的状态,我也可以保留一个指示器。

提前致谢!

4

2 回答 2

2

这不是直接的答案,而是针对跟踪的要求:

Newly made files/dirs
Adjusted/touched files/dirs
Deleted files (maybe)

您可以使用:http ://pyinotify.sourceforge.net/ ,它与 inotify 相关联,将发送有关文件更改、删除和创建的事件。这将避免遍历大型目录。

这是Inotify的包装。这适用于 Linux。我还看到 fink 和 macports 中有用于 OSX 的库和模块。所以这应该是更优雅的解决方案。

于 2012-06-22T16:13:39.807 回答
1

不是一个完整的答案,而是一些指示:

对于 OSX,fseventsd实现了类似于 inotify 的机制。fslogger是一个如何使用它的例子。pymacadmin似乎允许您从 Python 接口它。

您要实现的与Tripwire类似。

于 2012-06-22T17:37:05.637 回答