【发布时间】:2019-01-03 05:22:46
【问题描述】:
我想构建一个脚本来找出 FTP 服务器上的哪些文件是新文件,哪些文件已经处理。
对于 FTP 上的每个文件,我们读取信息、解析它并将我们需要的信息从它写入我们的数据库。这些文件是 xml 文件,但必须翻译。
目前我正在使用 mlsd() 获取列表,但这需要 4 分钟,因为此目录中已经有 15.000 个文件 - 每天都会更多。
我不想将此列表与我保存在文本文件中的旧列表进行比较,我想知道是否有更好的可能性。
因为此任务必须“实时”运行,所以它会每隔 1 或 2 分钟以 cronjob 结束。如果这个方法需要很长时间,这将不起作用。
解决方案应该是 PHP 或 Python。
def handle(self, *args, **options):
ftp = FTP_TLS(host=host)
ftp.login(user,passwd)
ftp.prot_p()
list = ftp.mlsd("...")
for item in list:
print(item[0] + " => " + item[1]['modify'])
此代码示例已经运行了 4 分钟。
【问题讨论】:
-
我建议不要将一个列表与另一个列表进行比较,而是保存最后一个查询的时间戳并查找自该时间戳以来创建的文件。
-
@J.Ghyllebert 为此你仍然必须使用
mlsd,所以我认为它不能解决 OP 的问题。 -
这就是我之前的想法。最新的想法是运行 mlsd -> 创建一个列表 -> 将已解析的文件压缩到 backup.zip 中并删除单个文件。下次运行 mlsd 它将排除 zip 并且运行时应该更好?
-
@Rune 不是每次都创建一个 zip,您还可以将处理后的文件移动到另一个目录。
-
搬家是个好主意。压缩不是,因为您不能在 FTP 服务器上压缩文件。您必须下载它们,删除远程副本,在本地压缩并上传 zip(这对我来说毫无意义)。 -- 虽然这些都不是真正的答案 “找出时间 A 上的目录列表和 ftp 上的时间 B 之间的区别” -- 如果您正在寻找这样的解决方案,您应该真正改变您的问题标题。