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)
您需要的不止一步:
进入目标文件夹
cd destination
Run Code Online (Sandbox Code Playgroud)下载文件
wget www.test.com/test.zip
Run Code Online (Sandbox Code Playgroud)提取文件
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)
打开编辑器以创建一个名为的新文件unzip_by_url
并将其放入~/bin
或/usr/bin/local
nano unzip_by_url
Run Code Online (Sandbox Code Playgroud)并粘贴上面的代码。
保存并关闭
使文件可执行
chmod +x /path/to/file/unzip_by_url
Run Code Online (Sandbox Code Playgroud)现在启动脚本:
unzip_by_url www.test.com/test.zip destination-folder-on-my-pc
Run Code Online (Sandbox Code Playgroud)