递归修改文件未来时间戳为当前时间

在编译 Qt 代码时,如果有参与编译的代码文件时间戳相对当前系统时间为未来时间,可能报错误或者警告信息,不能通过编译。

将时间戳为“未来”时间的文件,修改时间戳为过去的时间就可以解决上述问题。

编写了下面的 python 脚本,实现给定路径下递归查找未来时间戳文件并修正,免去人工查找辛劳:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Nov  3 10:01:48 2025

@author: farman
"""
import pathlib
import os
import time
import sys

def get_files_recursive(path_to_search_in, file_ext):
    files_found = []
    
    p = pathlib.Path(path_to_search_in)
    
    files = p.glob("*")
    
    for file in files:
        if file.is_dir():
            #print("dir", file)
            files_found += get_files_recursive(file, file_ext)
    
    p = pathlib.Path(path_to_search_in)
    files = p.glob(file_ext)
    
    for file in files:
        if file.is_file():
            #print("file", file)
            files_found.append(file)
    
    return files_found


def fix_file_time(file, new_create_time, new_modify_time):
    os.utime(file, (new_create_time, new_modify_time))
    return


def fix_file_time_of_path_recursive(path_to_search_in, file_ext):
    files = get_files_recursive(path_to_search_in, file_ext)

    now_time = time.time()

    for file in files:
        create_time = os.path.getctime(file)
        modify_time = os.path.getmtime(file)
        
        if modify_time > now_time or create_time > now_time:
            print("Fix future time file:", file)
            fix_file_time(file, now_time, now_time)

    return

#------------------------------------------------------------------

if __name__ == "__main__":    
    if    len(sys.argv) == 1:
        path_to_search_in = "."
        file_ext          = "*"
    elif  len(sys.argv) == 2:
        path_to_search_in = sys.argv[1]
        file_ext          = "*"
    else:
        path_to_search_in = sys.argv[1]
        file_ext          = sys.argv[2]
    
    fix_file_time_of_path_recursive(path_to_search_in, file_ext)

使用方法:

复制上面的代码,保存到本地文件 file_time_fixer.py;

运行 python3 file_time_fixer.py 修正 file_time_fixer.py 所在路径下所有未来时间戳的文件;

运行 python3 file_time_fixer.py  path 修正 path 路径下所有未来时间戳的文件;

运行 python3 file_time_fixer.py  path  *.x 修正 path 路径下所有后缀为 .x 的未来时间戳的文件。

Enjoy!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值