1

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

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. 如何查看目录是否被修改?- 我需要这样做,因为我希望遍历的文件夹很大。如果我可以检查目录是否已被修改并且不会递归地翻阅未更改的目录,这将有很大帮助。

谢谢!

4

4 回答 4

2

如果要比较两个文件夹之间的两个文件,则可以对这两个文件使用os.path.getmtime()并比较结果。如果它们相同,则它们没有被修改。请注意,这将适用于文件和文件夹。

于 2012-05-11T03:43:31.340 回答
1

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

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

于 2012-05-11T03:46:41.893 回答
0

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

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
于 2012-05-11T07:58:10.000 回答
0

如果您可以承认使用命令行工具,则可以使用rsync而不是重新发明轮子。rsync使用文件修改时间和文件大小来确定文件是否已更改。

rsync --verbose --recursive --dry-run dir1 dir2dir1应该得到和中的文件之间的差异dir2。您可以将输出写入日志文件以对其进行操作。

于 2012-05-11T08:26:32.990 回答