前言

需求来源,阿里云等狗云服务商为了不让用户方便迁移,在用户下载相册内容时,抹去创建时间修改时间等文件信息,导致我们使用自定义的相册服务(如群晖的photos、immich等)时,无法按时间线管理。

如果你是用windows,可以使用照片时间修复软件,效果更好:

如果你是在macOS或者linux系统上使用命令行执行,请看下文:

安装exiftool

ubuntu apt install libimage-exiftool-perl

其他安装方式见官网exiftool

根据文件名里的时间字符串修复照片的修改时间

linux只能改FileModifyDate

exiftool "-FileModifyDate<filename" /volume1/photo/t2/*.*

PS: windows、macOS专用指令:(FileCreateDate)

exiftool "-FileCreateDate<filename" *.*

其他

exiftool不能识别时间戳,只能识别20250206、2025_0206之类的字符串。

如果文件名里的时间是时间戳,可以先自行用脚本转换成exiftool可以用的格式:

t.py:

import os
import re
import datetime
 
# 目标目录
directory = "/volume1/photo/t2"
 
# 正则表达式匹配13位数字的UNIX时间戳
pattern = re.compile(r'(\d{13})')
 
for filename in os.listdir(directory):
    match = pattern.search(filename)
    if match:
        timestamp = int(match.group(1)) / 1000  # 转换为秒
        date = datetime.datetime.utcfromtimestamp(timestamp)
        formatted_date = date.strftime('%Y%m%d_%H%M%S')
        
        # 替换文件名中的时间戳部分
        new_filename = filename.replace(match.group(1), f"IMG_{formatted_date}")
        
        # 构建完整的文件路径
        old_filepath = os.path.join(directory, filename)
        new_filepath = os.path.join(directory, new_filename)
        
        # 重命名文件
        os.rename(old_filepath, new_filepath)
        print(f'Renamed "{filename}" to "{new_filename}"')
 
print("Renaming complete.")

python t.py