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

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

我想下载并解压给定目录下的存档。到目前为止我是这样做的:

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磁盘。我认为通过管道输出wgettotar并给出tar目标是可能的,但实际上我不知道如何将各个部分组合在一起。

答案1

您可以通过告诉wget将其有效负载输出到标准输出(使用 flag -O-)并抑制其自己的输出(使用 flag -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

答案2

另一种选择是使用默认curl写入:stdout

curl -s -L https://example.com/archive.tar.gz | tar xvz - -C /tmp

答案3

这个 oneliner 就做到了这一点:

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

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

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

答案4

一种处理重定向并可以提取tar.bz2文件的衬垫。用于xz提取 gzip 文件。

curl -L https://downloads.getmonero.org/cli/linux64 | tar xj

相关内容