我有一个包含我所有 tar 文件的 ftp 服务器,这些 tar 文件有 500MB+ 大,而且它们太多了,我需要做的就是从包含多个文件的 TAR 中获取一个文件,这些文件变成 500MB+。
我最初的想法是下载每个 tar 文件并获取我需要的单个文件,但这似乎效率低下。
我使用 Python 作为编程语言。
这个答案不是特定于 python,因为问题不是特定于 python:理论上,您可以读取数据所在的 Tar 文件部分。使用 FTP(以及 pythons ftplib),这可以通过首先执行 REST 命令来指定文件中的开始位置,然后 RETR 开始下载数据,在获得所需的数据量后,您可以关闭数据连接。
但是,Tar 是一种没有中心索引的文件格式,例如,Tar 中的每个文件都以一个小标题为前缀,其中包含有关名称、大小和其他信息的信息。因此,要获取特定文件,您必须阅读第一个标题,检查它是否是匹配文件,如果不是,则跳过不需要的文件的大小并尝试下一个。由于 Tar 中有许多较小的文件,这将不如下载完整文件(或至少下载到相关部分 - 您可能会在下载时解析文件)有效,因为每次读取的所有这些新数据连接都会导致大量开销。但是,如果您在 Tar 中有大文件,这可能会起作用。
但是,如果它不是 TAR ( *.tar
) 文件,而是 TGZ (*.tgz
或*.tar.gz
) 文件,那您就完全不走运了。这些是压缩的 Tar 文件,要获取文件的任何部分,您需要解压缩之前拥有的所有内容。因此,在这种情况下,无法下载文件或至少将所有内容下载到相关部分。