<p>棘手的问题,我将从两个方面给你答案:</p>
<p>首先,作为可选部分,您可以监视文件修改本身,并添加自定义操作</p>
<p>在Windows/Linux/Mac/BSD上工作的文件修改跟踪示例</p>
<pre><code>import time
import watchdog.events
import watchdog.observers
class StateHandler(watchdog.events.PatternMatchingEventHandler):
def on_modified(self, event):
print(event.event_type)
print(event.key)
print(event.src_path)
# Add your code here to do whatever you want on file modification
def on_created(self, event):
pass
def on_moved(self, event):
pass
def on_deleted(self, event):
pass
fs_event_handler = StateHandler()
fs_observer = watchdog.observers.Observer()
fs_observer.schedule(fs_event_handler, r'C:\Users\SomeUser\SomeFolder', recursive=True)
fs_observer.start()
try:
while True:
time.sleep(2)
except KeyboardInterrupt:
fs_observer.stop()
fs_observer.join()
</code></pre>
<p>使用上述文件系统观察器,您可以触发安全事件日志检查。
您也可以按计划任务触发它们,但在文件系统修改时触发它们更有趣</p>
<p>为了使安全事件日志包含文件修改信息,您需要使用SACL列表对所需目录启用文件审核(右键单击您的文件夹“安全、审核”)。
然后,您可以查看文件事件的安全日志</p>
<p>可以使用<code>windows_tools</code>查看安全日志。
使用<code>python -m pip install windows_tools.wmi_queries</code>安装它(显然只适用于Windows)</p>
<p>然后执行以下操作:</p>
<pre><code>from windows_tools.wmi_queries import *
result = query_wmi('SELECT * FROM Win32_NTLogEvent WHERE Logfile="Security" AND TimeGenerated > "{}"'.format(create_current_cim_timestamp(hour_offset=1)))
for r in result:
print(r)
</code></pre>
<p>您可以添加<code>WHERE</code>子句,如<code>EventCode={integer}</code>,以便只过滤您需要的事件(文件修改或其他)。
通常,您搜索的事件代码是4656466046634670(打开删除、编辑、创建)</p>
<p>请参阅<a href="https://docs.microsoft.com/en-us/previous-versions/windows/desktop/eventlogprov/win32-ntlogevent" rel="nofollow noreferrer">This microsoft article</a>,以了解事件日志类接受哪些WHERE子句</p>
<p>免责声明:我是windows_工具包的作者</p>