Windows下存在一些可以自行解壓的檔案,也就是所謂的自解壓檔案。使用者不用知道具體是採用哪種壓縮技術進行壓縮,即可僅通過運行該自解壓檔案實現對檔案的解壓。
但在Unix/Linux系統中,卻沒有一種方法可以達成這樣的目的。今天突然想用Unix Shell嘗試實現自解壓,經過嘗試,不是很難,也不需要高深的技術,就可以輕鬆達成這個目的。
主要的思路和Windows下的自解壓檔案思路一致,就是在現有的壓縮檔上加上一個檔案頭,該檔案頭可直接執行,執行步驟大致如下:
- 將該檔案後續的壓縮包的內容提取出來,放到一個臨時檔案中;
- 解壓該臨時檔案;
- 刪除該臨時檔案;
- 退出。
因此,只需要寫一個指令碼程式,在每個需要解壓的檔案頭上增加這部分內容即可。
以下是針對tar檔案添加解包檔案頭的Shell指令碼(extend.sh):
# !/bin/sh
[ $# != "1" ] && echo "Usage: extend.sh tarfile" && exit 0
FILENAME="$1.sh"
echo "# !/bin/sh" > $FILENAME
echo "LINES=\`wc -l \$0 | awk '{ print \$1 }'\`" >> $FILENAME
echo "LINES=\`expr \$LINES - 6\`" >> $FILENAME
echo "tail -n \$LINES \$0 > _TEMP_.tar " >> $FILENAME
echo "tar xvf _TEMP_.tar" >> $FILENAME
echo "rm _TEMP_.tar" >> $FILENAME
echo "exit 0" >> $FILENAME
chmod +x $FILENAME
cat $1 >> $FILENAME
具體使用方法是:extend.sh tarfile,使用該命令後,在目前的目錄下產生一個sh檔案。該檔案就是tarfile的自解壓檔案。
如果看不懂以上的Shell指令碼,可以先看看“測試編程”欄目中的Unix Shell編程入門部分。