将文件从 URL 解压缩到硬盘?

Iva*_*van 8 command-line bash unzip

如果我有文件的 URL,如何直接从终端解压缩?

例如 :

unzip www.test.com/test.zip destination-folder-on-my-pc
Run Code Online (Sandbox Code Playgroud)

zwe*_*ets 14

如果unzip要坚持Unix的管道和过滤器架构风格特征,那么人们会期望能够通过将 wget 的输出传输到 unzip 的输入中来做到这一点:

wget -O - http://www.test.com/test.zip | (cd destination-folder && unzip -)
Run Code Online (Sandbox Code Playgroud)

后面的破折号-O表示标准输出,后面的破折号unzip表示标准输入,括号的右侧在正确的目录中启动子shell。

然而,ZIP 格式将其内容索引存储在文件的末尾,并且unzip需要在开始解压缩之前读取它。因此,与gzip等人相反,它不能一次解压缩流。

作为解决方法,您需要一个临时文件:

wget -O /tmp/z.$$ http://www.test.com/test.zip && 
   (cd destination-folder && unzip /tmp/z.$$)
Run Code Online (Sandbox Code Playgroud)

其中$$仅用于生成非碰撞数字。

您可以使用-d解压缩选项,而不是运行子shell 。为了增加卫生,清理你的临时文件:

wget -O /tmp/z.$$ http://www.test.com/test.zip && 
   unzip -d destination-folder /tmp/z.$$ &&
   rm /tmp/z.$$
Run Code Online (Sandbox Code Playgroud)


A.B*_*.B. 7

您需要的不止一步:

  1. 进入目标文件夹

    cd destination
    
    Run Code Online (Sandbox Code Playgroud)
  2. 下载文件

    wget www.test.com/test.zip
    
    Run Code Online (Sandbox Code Playgroud)
  3. 提取文件

    unzip test.zip
    
    Run Code Online (Sandbox Code Playgroud)

要仅使用一个命令,请使用脚本:

#!/bin/bash
wget -P "/tmp" "$1"
filename=$(awk -F'/' {print $NF})
unzip "$filename" -d "$2"
rm "/tmp/$filename"
Run Code Online (Sandbox Code Playgroud)