Command-Line

如何將 wget 的輸出重定向為解壓縮的輸入?

  • December 9, 2021

我必須從此連結下載文件。文件下載是一個 zip 文件,我必須將其解壓縮到目前文件夾中。

通常,我會先下載它,然後執行 unzip 命令。

wget http://www.vim.org/scripts/download_script.php?src_id=11834 -O temp.zip
unzip temp.zip

但是這樣,我需要執行兩個命令,等待第一個完成執行下一個,另外,我必須知道temp.zip要給它的文件的名稱unzip

是否可以將輸出重定向wgetunzip?就像是

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

引用自:https://unix.stackexchange.com/questions/2690