【发布时间】:2021-10-11 14:46:50
【问题描述】:
我正在开发一个 Python 工具来在我的本地机器和远程服务器之间同步文件。当我将文件上传到服务器时,服务器上该文件的修改时间属性设置为上传过程的时间,而不是我想保留的源文件的mtime。我正在使用 Python ftplib 中的 FTP.storbinary() 来执行上传。我的问题:有没有一种简单的方法可以在上传时保留mtime 或在上传后设置它?谢谢。
【问题讨论】:
我正在开发一个 Python 工具来在我的本地机器和远程服务器之间同步文件。当我将文件上传到服务器时,服务器上该文件的修改时间属性设置为上传过程的时间,而不是我想保留的源文件的mtime。我正在使用 Python ftplib 中的 FTP.storbinary() 来执行上传。我的问题:有没有一种简单的方法可以在上传时保留mtime 或在上传后设置它?谢谢。
【问题讨论】:
简短的回答:不。 Python ftplib 模块不提供传输文件时间的选项。此外,rfc-959 定义的 FTP 协议没有规定直接获取不设置文件的 mtime。通过SITE 命令在某些服务器上可能是可能的,但这取决于服务器。
如果可能,您应该能够使用连接对象的sendcmd 方法传递站点命令。例如,如果服务器接受特殊的SITE SETDATE filename iso-8601-date-string,您可以使用:
resp = ftp.sendcmd(f'SITE SETDATE {file_name} {date-string}')
【讨论】:
ftplib.error_perm: 500 'SITE SETDATE' not understood :-(
SITE HELP 或 HELP SITE 可以给出服务器可以理解的 SITE 命令列表。
SITE命令被识别:QUOTA,以下SITE扩展被识别:RATIO,HELP,CHGRP,CHMOD
FEAT 命令显示了对MFMT(修改修改时间)命令的支持,这正是我所寻找的。我对其进行了测试,并且有效。方案:ftp.sendcmd(f'MFMT {date_string} {file_name}')