列出互联网上的 tarball 中的文件

列出互联网上的 tarball 中的文件

要列出档案的内容,我可以执行以下操作:

tar -tzvf mytarball.tar.gz

但这仅适用于本地文件。有人能指出如何(如果可能的话)处理互联网上的文件吗?

我尝试用一​​个文件

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -tzv

但给予

gzip: stdin: unexpected end of file
tar: Child returned status 1
tar: Error is not recoverable: exiting now

那么 tar 能否正确处理列表流?是否有任何压缩格式允许这样做(无需下载整个文件)?

答案1

您的命令工作,如果你告诉wget将下载的文件输出到标准输出而不是文件:

wget -q -O /dev/stdout http://… | tar -tzv

然而,它将要需要下载整个文件,至少对于 Tar 和 Zip 档案来说是这样。Zip 格式将其“目录”放在最后;而 Tar 没有单个目录,只有线性的标头+数据对流,因此文件名分散在各处。

(当然应该有可以通过这种方式列出的档案格式,但我不知道任何其他格式的具体细节。)

答案2

编辑:除非服务器有 API 或其他东西来处理文件并输出结果,否则无法通过互联网列出文件的内容。您应该将文件下载到本地,然后处理该文件。

这应该可行。

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz && tar -tzvf git-1.8.0.tar.gz

除了http://www.cyberciti.biz/faq/list-the-contents-of-a-tar-or-targz-file/

列出柏油文件

$ tar -tvf file.tar

列出压缩文件文件

$ tar -ztvf file.tar.gz

列出压缩文件文件

$ tar -jtvf file.tar.bz2

答案3

您可以使用:

wget -qO- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

该文件将被下载、解压,并且屏幕上将显示该文件。

但是如果你想要创建一个文件请求一个没有保存, 使用:

wget -q -O- https://git-core.googlecode.com/files/git-1.8.0.tar.gz | tar -xvz

在此处输入图片描述

答案4

要将 http 数据输出从文件重定向到 stdout,您需要使用-O切换,然后你就可以抓住它

wget -q https://git-core.googlecode.com/files/git-1.8.0.tar.gz -O - | tar -tzv

但你为什么还要这样做呢?Tar 没有文件列表,所以你需要下载完整文件才能获得文件列表,而且你还需要再下载完整文件才能获得想要的文件。所以如果你打算从那里获取一些文件压缩文件,最好先保存,然后再删除。

这样做的唯一好处是获得一些文件列表索引. 获取远程文件列表压缩文件好多了,但仍然无法使用 wget 下载它们。

相关内容