如何下载存档并解压缩而不将存档保存到磁盘?


62

我想下载并解压缩指定目录下的档案。到目前为止,这是我一直在做的事情:

wget http://downloads.mysql.com/source/dbt2-0.37.50.3.tar.gz
tar zxf dbt2-0.37.50.3.tar.gz
mv dbt2-0.37.50.3 dbt2

我想即时下载并解压缩存档,而无需将其tar.gz写入磁盘。我认为可以通过将的输出wget传递给tar,并给出tar一个目标来实现,但实际上我不知道如何将各个部分放在一起。

Answers:


95

您可以通过告诉wget将其有效负载输出到stdout(带有标志-O-)并禁止其自己的输出(带有标志-q)来实现:

wget -qO- your_link_here | tar xvz -

要指定目标目录:

wget -qO- your_link_here | tar xvz - -C /target/directory

更新资料

如果您碰巧有GNU tar

wget -qO- your_link_here | tar --transform 's/^dbt2-0.37.50.3/dbt2/' -xvz

应该让您一步一步就能做到。

-q 安静

-O - 输出到标准输出


到指定的路径应该是:wget -qO- your_link_here | tar xvz - -C /target/directory
Marslo

也许只是告诉人们使用tar而不是wget呢?
亚历山大·米尔斯

wget -qO- <url> | tar -xvz -C <target folder>在古努焦油上工作。
AlikElzin-kilaka

14

另一个选项是使用curl默认情况下写入标准输出的选项:

curl -s some_url | tar xvz -C /tmp

2
我比其他人更喜欢您的选择,但是curl -s some_url | tar xvz - -C /tmp
15:44

1
FiftiN建议->例如,要查看存储库中文件的过滤列表,可以使用:$ curl -L https://api.github.com/repos/repo_owner/repo_name/tarball | tar tvfz - -C /tmp --wildcards *.py
Alex Glukhovtsev

11

这个oneliner可以解决这个问题:

tar xvzf -C /tmp/ < <(wget -q -O - http://foo.com/myfile.tar.gz)

简短说明:首先执行括号中的右侧(-q告诉wget安静地执行此操作,-O -用于将输出写入stdout)。

然后,我们使用Bash中的流程替换运算符<(创建一个命名管道,以创建一个命名管道。这样,我们创建了一个临时文件描述符,然后使用<文件重定向运算符将该描述符的内容定向到tar 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.