Python中的文件扫描守护程序(OS X)

时间:2012-06-22 16:09:56

标签: python macos filesystems

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

os.walk('/')

在OS X上遍历我的整个文件系统。我的目标是创建一个跟踪的个人守护程序:

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

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

    我想要实现的目标

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

    time.sleep(0.001)
    

    ..大约需要在大约2分钟内处理这些1.2万条记录。我不知道这是不是很好,我更喜欢根据文件/文件夹的总数来更加动态。

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

    提前致谢!

2 个答案:

答案 0 :(得分:2)

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

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

您可以使用:http://pyinotify.sourceforge.net/与inotify绑定,并在文件更改,删除和创建时发送事件。这将避免遍历大型目录。

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

答案 1 :(得分:1)

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

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

您要实施的内容与Tripwire类似。