要列出档案的内容,我可以执行以下操作:
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 下载它们。