python里监控某个文件夹的变化

在centos里,编写python脚本,监控某个文件夹的变化

1、需求:添加了文件或者文件夹,或者是删除了某个文件或者文件夹,要将提示信息按找如下的要求写到一个特定的文件里,可以每隔一分钟监控一次,也可以每隔30秒监控一次:
如:2022-6-12 14:42 /root文件下新增了文件a.txt
2022-6-12 14:42/root文件夹下删除了b.txt

#导入os模块和time模块
import os
import time
#利用os模块的方法,用start记录最开始你要监控的文件夹里面有哪些文件
start = os.listdir("/lianxi/lhj")
while True:
    #如果一开始监控的文件夹和30秒以后的文件夹里面的内容不同了,就把30秒以后的文件夹记录到end中
    if start != os.listdir("/lianxi/lhj"):
        end = os.listdir("/lianxi/lhj")
        #如果start的长度小于end,则肯定是新增了文件夹
        if len(start)<len(end):
            for i in end:
                if i in start:
                    continue
                else:
                # 打开文件text.txt,将信息保存到这个文件中
                    with open("/lianxi/text.txt", "a") as fp:
                        # 用os模块的方法执行shell语句,将截取到的时间和修改信息进行拼接,
                        # 这里截取的时间就是文件夹的修改时间,因为无论是新增文件还剩删除文件,文件夹本身都被修改了
                        os.system("stat lhj|grep '最近更改'|awk -F':' '{print $2}'|awk -F'.' '{print $1}' >>/lianxi/text.txt")
                        fp.write(f"/lianxi/lhj文件下新增了文件{i}\n")
                    #最开始start要加上新增的文件夹然后进行下一次的匹配
                    start.append(i)
        #如果start的长度大于end则是删除了文件或者文件夹,其他的东西和新增文件是一个道理
        if len(start)>len(end):
            for i in start:
                if i not in end:
                    with open("/lianxi/text.txt", "w+") as fp:
                        os.system("stat lhj|grep '最近更改'|awk -F':' '{print $2}'|awk -F'.' '{print $1}'  >>/lianxi/text.txt")
                        fp.write(f"/lianxi/lhj文件下删除了文件{i}\n")
    #这里判断长度如果相等就是文件夹里面没有改变
    else:
        print("/lianxi/lhj没有改变")
    #每隔30秒进行一次监控
    time.sleep(30)

注:
这个脚本还不太完美,因为是用长度来衡量的,所以在30秒内新建一个文件,然后马上又删除另外一个文件,这里还是会显示没有改变,但其实已经改变了,后续改进的话,要在最后的长度判断里,加上一个判断,当长度相等的时候,看初始的start和最后的end内容是否相等,如果不相等在做处理,相等就是没有改变

你可能感兴趣的:(python,开发语言)