當我調用我的腳本時,需要找到存檔的類型(壓縮方法),並按照壓縮方法使用帶有正確選項的tar。如何在bash中找到存檔的壓縮方法
我發現該文件命令返回有關文件的信息,所以我可以得到第二列,並使用一些條件,並檢查它是什麼(我只需要支持tar壓縮gzip或bzip2不壓縮和zip但我不應該'通過後綴檢查,但通過內容)。
所以我想問問是否有更好的方法來獲得壓縮的檔案方法,然後由文件和獲得第二列。謝謝
當我調用我的腳本時,需要找到存檔的類型(壓縮方法),並按照壓縮方法使用帶有正確選項的tar。如何在bash中找到存檔的壓縮方法
我發現該文件命令返回有關文件的信息,所以我可以得到第二列,並使用一些條件,並檢查它是什麼(我只需要支持tar壓縮gzip或bzip2不壓縮和zip但我不應該'通過後綴檢查,但通過內容)。
所以我想問問是否有更好的方法來獲得壓縮的檔案方法,然後由文件和獲得第二列。謝謝
你最好的選擇是要麼依賴於file
因爲你是現在,或者查找可能的幻數(通常放置在文件開頭的文件類型標識符)並自行解決。
例如,ZIP文件以「PK」開頭,BZip2文件以「BZ」開頭。這些神奇的數字可能會更長,但這就是我剛纔看到一對夫婦時注意到的。
GNU焦油的最新版本本身就是數字,所以你不需要tar -xvf myarchive.tar.gz就足夠了
否則使用例如這樣的:
function extract()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted via >extract<" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
如果要檢查的內容,並照顧唯一的bzip2或gzip壓縮tar歸檔,這樣做:
function extract() {
if file $1 | grep bzip2 >/dev/null ; then
tar -xvjf $1
elif file $1 | grep gzip >/dev/null ; then
tar -xvzf $1
else
echo "'$1' is not a valid file"
fi
}
我需要通過代碼而不是tar,所以我需要查找,在你的例子中,你使用的是postfix的權利?我不應該使用它,我必須使用該檔案中的內容。 – 2011-03-21 14:49:12
不清楚你不喜歡'file'程序的輸出(並且真的不清楚你在說什麼...你應該使用關鍵字,命令名等標記 – nhed 2011-03-21 15:33:41