Command-Line
如何將 wget 的輸出重定向為解壓縮的輸入?
我必須從此連結下載文件。文件下載是一個 zip 文件,我必須將其解壓縮到目前文件夾中。
通常,我會先下載它,然後執行 unzip 命令。
wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip unzip temp.zip
但是這樣,我需要執行兩個命令,等待第一個完成執行下一個,另外,我必須知道
temp.zip
要給它的文件的名稱unzip
。是否可以將輸出重定向
wget
到unzip
?就像是unzip < `wget http://www.vim.org/scripts/download_script.php?src_id=11834`
但它沒有用。
bash: `wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip`: ambiguous redirect
此外,
wget
執行了兩次,並下載了兩次文件。
您必須將文件下載到臨時文件,因為(引用 unzip 手冊頁):
尚不支持從標準輸入讀取的檔案,但 funzip 除外(然後只能提取檔案的第一個成員)。
只需將命令放在一起:
wget "http://www.vim.org/scripts/download_script.php?src_id=11834" -O temp.zip unzip temp.zip rm temp.zip
但為了使其更靈活,您可能應該將其放入腳本中,以便節省一些輸入,並確保您不會意外覆蓋某些內容,您可以使用該
mktemp
命令為您的臨時文件創建一個安全的文件名:#!/bin/bash TMPFILE=`mktemp` PWD=`pwd` wget "$1" -O $TMPFILE unzip -d $PWD $TMPFILE rm $TMPFILE