2016-01-29 32 views
-2

我試圖創造條件,CD到文件後,我解壓後運行一個腳本。我已經爲.tar文件完成了這項工作,但是無法提供zip的正則表達式。這是我運行的強制覆蓋解壓縮命令。bash腳本要解壓的壓縮文件,然後cd到

unzip -o my_file.zip 

Archive: my_file.zip 
inflating: my_file/load.file 
inflating: my_file/eccn.txt 
inflating: my_file/my_file.tgz 

以下是我已經嘗試使用sed

unzip -o my_file.zip | sed "s|/.*$||" 
Archive: my_file.zip 
    inflating: my_file 
    inflating: my_file 
    inflating: my_file 

這裏是我如何處理的.tar文件:

tar -xvzf $fname          #tar it 
topDir=$(tar -xvzf $fname | sed "s|/.*$||" | uniq)  #tars it verbosely and pipes it to uniq 
[ $(wc -w <<< $topDir) == 1 ] || exit 1     #check to see there is one entry in $topDir 
cd $topDir            #cd into $topDir 
echo your current dir is $PWD 

tar -xvzf my_file.tgz | sed "s|/.*$||" 
my_file 
my_file 
my_file 
my_file 
my_file 

我的問題是如何獲得my_file之前擺脫一切(例如infalting :),然後我可以cd到提取的文件中?

+0

很難理解你到底在問什麼。你說「我已經爲.tar文件做了這個」。你可以發佈你已經做了什麼tar文件,爲你工作,所以我們可以更好地瞭解什麼被問? – Asaph

+0

我在這裏有點困惑。你爲什麼需要'sed'來進入一個目錄?你究竟在做什麼? – pfnuesel

+0

我更新了我什麼,我用tar文件沒有問題,我希望做的zip文件類似,但拉鍊的輸出是不同的東西。 – kkmoslehpour

回答

1

如果你想要做的是解壓縮文件的再cd到一個文件夾中,做到這一點:

unzip my_file.zip; cd my_file 

另外值得一提的是zip文件可能包含在根目錄多個文件或目錄水平。所以在一般情況下,並不存在一個到cd的目錄。事實上,可能根本沒有,它仍然是一個完全有效的zip文件。

如果你確信你正在使用的每一個zip文件都只有1個目錄,要發現該目錄在代碼中動態的名稱,下面的命令應該得到你這個目錄到這樣你的變量可以將cd放入它:

DIR=$(zipinfo -1 my_file.zip | grep -oE '^[^/]+' | uniq) 
unzip my_file.zip 
cd $DIR 
+1

downvoter會照顧評論嗎? – Asaph

+0

不是我,但OP顯然希望裁談會被解壓的目錄,而不只是一些隨機的硬編碼目錄。通過將全部內容放入當前目錄來破壞zip內容也不是解決方案。 –

+1

正如我在我的回答中所說的那樣,在一般情況下無法完成,因爲不能保證只有一個目錄「cd」。有效的zip文件可能包含多個甚至零個目錄。 – Asaph