You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python ftplib上传文件时如何保留源文件的mtime修改时间属性

FTP上传保留源文件修改时间的解决方案

方案1:上传完成后通过MFMT命令设置(兼容性最优)

绝大多数主流FTP服务端(如vsftpd、FileZilla Server等)都支持MFMT扩展命令,专门用于修改远程文件的修改时间,实现步骤如下:

  • 读取本地源文件的mtime,转换为YYYYMMDDHHMMSS格式的UTC时间字符串
  • 完成文件上传后,通过ftplib的sendcmd方法发送MFMT命令即可生效
import os
import time
from ftplib import FTP

# 初始化FTP连接
ftp = FTP('FTP服务端地址')
ftp.login(user='登录用户名', passwd='登录密码')

local_file = './本地待上传文件路径'
remote_file = '/远程服务器保存路径'

# 读取本地文件mtime,转换为MFMT要求的UTC时间格式
local_mtime = os.path.getmtime(local_file)
utc_mtime = time.gmtime(local_mtime)
mtime_format = time.strftime('%Y%m%d%H%M%S', utc_mtime)

# 执行文件上传
with open(local_file, 'rb') as f:
    ftp.storbinary(f'STOR {remote_file}', f)

# 设置远程文件修改时间
cmd_resp = ftp.sendcmd(f'MFMT {mtime_format} {remote_file}')
# 返回213状态码代表设置成功
if cmd_resp.startswith('213'):
    print('远程文件修改时间设置完成')

ftp.quit()

方案2:服务端不支持MFMT时的替代方案

少部分老旧FTP服务端不支持MFMT,可尝试使用SITE UTIME扩展命令实现,示例代码如下:

# 三个时间戳分别对应atime、mtime、ctime,按顺序传入
cmd_resp = ftp.sendcmd(f'SITE UTIME {remote_file} {int(local_mtime)} {int(local_mtime)} {int(local_mtime)}')

注意:SITE UTIME属于非标准扩展命令,参数顺序和格式没有统一规范,需要根据你使用的FTP服务端的实际规则调整参数。

特殊情况说明

如果上述两种命令你的FTP服务端都不支持,说明该服务端未提供修改文件时间的能力,你可以考虑切换为SFTP协议实现文件同步,SFTP协议原生支持修改远程文件的属性参数。
转换时间格式时请统一使用UTC时间,避免时区差导致设置的时间出现偏差。

内容的提问来源于stack exchange,提问作者atarax42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 21:15:00