在编译 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!
921

被折叠的 条评论
为什么被折叠?



