2017-02-10 44 views
0

我想解壓一個.tgz文件並跳轉到發佈的目錄。我知道在終端的命令是:如何在shell腳本中跳轉解壓目錄?

tar -xvzf xxx.tgz 

,然後跳轉到direcotory:

cd xxx 

但我怎麼能做到這一點的shell腳本?我不知道如何獲得釋放'tar'命令的目錄,任何人都可以幫助我?

+0

任何你可以輸入一個終端將在shell腳本工作,所以你的腳本無非是把文件中的這兩個命令並執行它 – arco444

+0

但在終端,我得到的目錄名稱手動和「CD」,以更,在腳本中我不知道如何獲取目錄名稱。 – geekzhu

+0

解壓縮tar,gz後的目錄名是相同的,例如。除非另有說明,'xxx.tar.gz'解包成xxx。 – vish4071

回答

0

如前所述here

test1=$(tar -axvf something-1.3.5a.tar.gz) 
cd $(echo $test1 | cut -f1 -d" ") 
0

下將解除存檔xxx.tgzcd到哪個目錄它提取到:

tar -xvzf xxx.tgz && cd $(tar -tf ${_} | head -1 | cut -d/-f 1) 

這需要一點考慮在內,該目錄將存檔提取到可能與檔案名稱不同。該方法提取檔案,然後檢查其內容,以確定它實際提取到的位置。有一定程度的脆弱性需要注意,並且可能需要對不尋常的文件名進行調整。

這裏有一對夫婦的其他(較籠統的)例子:

mkdir -p xxx && tar -xvzf ${_}.tgz -C ${_%%.tgz} 

將創建目錄xxxxxx提取xxx.tgz即使正常提取到xyz

tar -xvzf xxx.tgz && cd ${_%%.tgz} 

解檔xxx.tgz然後使用bash的參數替換到cdxxx目錄。

+0

這假定tar文件名的前綴與所有文件被提取的目錄相同。這是一個非常普遍的慣例,但不能保證。話雖如此,它將適用於很多情況,所以對於請求者所需要的內容來說可能就足夠了。 – sheltond