使用shell脚本或python检查目录内容是否已更改

时间:2011-02-01 12:08:07

标签: python shell latex

我有一个程序可以在特定目录中创建文件。 当这些文件准备好后,我运行Latex来生成.pdf文件。 所以,我的问题是,如何将此目录更改用作触发器 使用shell脚本或python脚本调用Latex?

最好的问候

7 个答案:

答案 0 :(得分:5)

inotify取代dnotify

Why?

  

... dnotify要求为您要监视更改的每个目录打开一个文件描述符...

     

此外,文件描述符固定目录,不允许卸载后备设备,这会导致涉及可移动介质的方案出现问题。使用inotify时,如果您正在观看已卸载的文件系统上的文件,则会自动删除监视并收到卸载事件。

......等等。

More Why?

  

与其祖先dnotify不同,inotify不会因各种限制而使您的工作复杂化。例如,如果您在可移动媒体上观看文件,则这些文件不会被锁定。与之相比,dnotify要求文件本身是开放的,因此真正“锁定”它们(妨碍卸载媒体)。

Reference

答案 1 :(得分:3)

dnotify你需要什么?

答案 2 :(得分:3)

make on unix系统通常用于按日期跟踪文件更改时需要重建的内容。我通常使用rather good makefile来完成这项工作。谷歌代码似乎还有另外alternative

答案 3 :(得分:3)

您不仅需要检查更改,还需要知道在运行LaTeX之前所有更改已完成。例如,如果您在修改了第一个文件后启动了LaTeX,并且还有更多的更改仍未处理,那么您将使用部分数据并且必须稍后重新运行。

等待第一个程序完成:

#!/bin/bash
first-program &&
  run-after-changes-complete

使用&&表示第二个命令仅在第一个命令成功完成时执行(零退出代码)。因为这个简单的脚本将始终运行第二个命令,即使第一个命令没有更改任何文件,您可以将其合并到您已经熟悉的任何构建系统中,例如make。

答案 4 :(得分:2)

Python FAMFAM(文件更改监视器)

的Python接口

您还可以查看Pyinotify,它是用于监控文件系统更改的模块。

答案 5 :(得分:1)

我自己并不是一个蟒蛇人。但是,在一个紧要关头,假设你在Linux上,你可以定期shell并“ls -lrt / path / to / directory”(获取目录内容并按上次修改排序),并比较最后两次调用的结果为了区别。如果是这样,那么就会发生变化。不是很详细,但完成工作。

答案 6 :(得分:0)

您可以使用实现MD5算法的本机python模块hashlib

>>> import hashlib
>>> import os
>>> m = hashlib.md5()
>>> for root, dirs, files in os.walk(path):
    for file_read in files:
        full_path = os.path.join(root, file_read)
        for line in open(full_path).readlines():
            m.update(line)


>>> m.digest()
'pQ\x1b\xb9oC\x9bl\xea\xbf\x1d\xda\x16\xfe8\xcf'

您可以将此结果保存在文件或变量中,并将其与下次运行的结果进行比较。这将检测任何子目录中任何文件的更改。

这不考虑文件权限更改;如果您还需要监控这些更改,可以通过在os.stat变量附加表示权限的字符串(例如,可通过m访问,属性取决于您的系统)来解决此问题。

相关问题