互联网上有一个服务器,它托管着封装在众多 7zip (.7z) 档案中的数 TB 数据。其中一些(但不是全部)数据对我来说很有趣。只有当我可以检查档案中的文件名时,我才知道哪些数据是有趣的。
问题:如何从远程 HTTP 服务器检索 7zip 文件列表?无需先下载整个文件?
这些档案的大小从一兆字节到几千兆字节不等,如果档案中不包含我可以使用的数据,我真的不想浪费时间和带宽下载它。
附录:我想到了一个相当迂回的解决方案,但我不停地想,一定有一个更简单的解决方案,而且其他人肯定也遇到过(或将会遇到)同样的问题。
答案1
没有仅通过“HTTP”的客户端方法来满足您的请求。
所以,如果服务器没有提供列表,这种情况就不会发生,这需要服务器端进行自定义编程和/或手动工作来生成列表。
答案2
我找到了一种在支持该系统上实现此目的的方法用户空间中的文件系统 (FUSE)。我正在回答我自己的问题,以防有人需要完成同样的事情。
有一个名为 FUSE 模块httpfs2它允许您挂载 HTTP URL,使其看起来像是本地文件系统的一部分。httpfs2 能够从远程服务器获取特定范围的字节,以响应程序发出的文件系统读取调用。
要在 Ubuntu Linux 上安装此工具:
apt-get install httpfs2
在文件系统上创建挂载点:
mkdir mount-point
挂载远程 URL:
httpfs2 http://remote.server.tld/path/archive-file.7z mount-point
现在该文件archive-file.7z
看起来像是文件系统的一部分:
ls mount-point/archive-file.7z
7za l mount-point/archive-file.7z
要卸载目录:
fusermount -u mount-point
这种方法允许您列出任何 HTTP 托管的存档的内容(使用正确的存档工具列出内容),而无需下载整个(可能很大的)存档。
答案3
httpfs2
只是向我抛出了各种错误,例如reply does not contain newline!
并且不起作用。
我成功了https://github.com/fangfufu/httpdirfs
apt install httpdirfs
mkdir ~/Downloads/httpdirfs
httpdirfs -f --cache --dl-seg-size 1 https://example.com/path/to/folder/ ~/Downloads/httpdirfs
由于某种原因,--single-file-mode
Ubuntu 22.04 中缺少该选项,因此我挂载了整个文件夹而不是单个文件。我还用它--dl-seg-size 1
来避免从慢速服务器下载不需要的内容。