仅使用 URL 从在线 tar 存档中提取文件

仅使用 URL 从在线 tar 存档中提取文件

我在网上找到了一个大小超过 50GB 的 tar 文件。我只需要从该 tar 文件中提取一些小内容(100MB)。我发现,为了 100MB 而下载整个 50GB 的文件会浪费我的时间和带宽。

所以我的问题是,有没有什么方法可以用来对在线 tar 文件执行操作(仅具有 URL),而无需下载整个 tar 存档。

答案1

我假设协议是 HTTP。在我的 Kubuntu 中,正确的工具是httpfs2

httpfs2是基于 FUSE 的文件系统,用于将 http 或 https URL 作为文件挂载到文件系统中。http 中没有可列出目录的概念,因此只能挂载单个 URL。服务器必须能够发送字节范围。

如果相关 tar 文件的 URL 是http://ser.ver/bar.tar,请按以下步骤操作:

mkdir foo
httpfs2 -f http://ser.ver/bar.tar ./foo

我使用-f(保持在前台)有两个原因:

  1. 如果出现问题,进程就会退出,我可以立即看到。
  2. 该过程打印到控制台,因此无论如何切换到另一个控制台都很方便。

现在您的文件系统中应该有./foo/bar.tar可用的文件。该文件是可查找的且是只读的。提取您需要的内容,然后卸载(选择一个):

  • fusermount -u ./foo
  • Ctrl+在运行C的控制台中httpfs2
  • killall httpfs2

我已经通过安装以下 ISO 文件测试了该解决方案:

http://cdimage.ubuntu.com/cdimage/kubuntu/releases/17.10/release/kubuntu-17.10.1-desktop-amd64.iso

并使用 进行浏览ark

第二次测试是使用我局域网中 Debian 服务器托管的 30+ GB tar 存档。存档是专门为这次测试创建的,我注意到哪些文件是在开头附近添加的,哪些文件是在结尾附近添加的。然后在 Kubuntu 客户端上,我mc进入httpfs2已挂载的存档并从存档结尾附近复制一个文件。实际复制花了一段时间才开始(我认为httpfs2是“快进”到所选文件),然后一切顺利。我敢肯定整个存档从未被发送过。

服务器进程是apache2。类似测试python3 -m http.server 80在安装阶段失败;这个服务器太简单了。

答案2

你可能不能做这样的事。

因为在线存档文件实际上驻留在远程计算机上,所以如果您想在线进行提取,那实际上是远程主机在执行这项工作,而不是您的 CPU。并且要做到这一点,远程主机应该提供列出或提取存档文件的能力,只有这样它才不仅仅是 ftp 的使用。

相关内容