Python 查找已递归更改的文件

Python 查找已递归更改的文件,python,Python,我试图编写一个简单的脚本,递归地翻阅一个目录,并检查是否有任何文件被更改。到目前为止,我只进行了遍历: import fnmatch import os from optparse import OptionParser rootPath = os.getcwd() pattern = '*.js' for root, dirs, files in os.walk(rootPath): for filename in files: pri

我试图编写一个简单的脚本,递归地翻阅一个目录,并检查是否有任何文件被更改。到目前为止,我只进行了遍历:

import fnmatch
import os 
from optparse import OptionParser

rootPath = os.getcwd() 
pattern = '*.js' 

for root, dirs, files in os.walk(rootPath):    
    for filename in files:        
        print( os.path.join(root, filename))
我有两个问题:

1。如何判断文件是否已被修改?

2。如何检查目录是否已被修改?-我需要这样做,因为我希望遍历的文件夹很大。如果我可以检查目录是否已被修改,而不是递归地翻阅未更改的目录,这将非常有帮助


谢谢

如果要在两个文件夹之间比较两个文件,可以在两个文件上使用并比较结果。如果它们是相同的,它们就没有被修改过。请注意,这对文件和文件夹都有效。

判断文件是否已被修改的典型快速方法是使用
os.path.getmtime(path)
(假设是Linux或类似环境)。这将为您提供修改时间戳,您可以将其与存储的时间戳进行比较,以确定文件是否已被修改


getmtime()
也适用于目录,但它只会告诉您是否已在目录中添加、删除或重命名文件;它不会告诉您是否在目录中修改了文件。

这是我自己的实现,您可能正在寻找它。请注意,除了时间戳之外,您可能还希望跟踪已经添加或删除的文件(就像我一样)。如果没有,您可以在第行更改代码:

if now == before:
代码如下:

# check if any txt file in folder "wd" has been modified (rewritten added or deleted)
def src_dir_modified(wd):
    now = []
    global before
    all_files = glob.glob(os.path.join(wd,'*.txt'))

    for infile in all_files:
        now.append([infile, os.stat(infile).st_mtime])
    if now == before: # compare files and their time stamps
        return False
    else:
        before = now
        print 'Source code has been modified.'
        return True

如果您可以使用命令行工具,那么您可以使用
rsync
而不是重新发明控制盘
rsync
使用文件修改时间和文件大小来决定文件是否已更改


rsync--verbose--recursive--dry run dir1 dir2
应获取
dir1
dir2
中文件之间的差异。您可以将输出写入日志文件以对其执行操作。

您可能需要澄清一下“修改”是什么意思。您是否正在与快照进行比较?或者只是在一段时间内寻找修改?如果没有参照系,你无法知道是否有任何东西发生了变化。从很久以前就改了?从快照修改?等等……啊,说得好。我正在将它与另一个文件夹进行比较。你能使用hashlib吗?对每个文件夹中的每个文件进行md5哈希(key=>filename,value=>md5哈希),并与对应文件进行比较?