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内容是否相等,如果不相等在做处理,相等就是没有改变