Shell-Script
提取 tar 然後進入其目錄(shell 腳本)
如何使腳本提取 tar 然後進入提取的 tar 目錄?
我在嘗試
提取物
#!/bin/bash tar -xvf $1 && cd $1
使用範例
假設有
foo.tar.xz
那麼如何使用它:./xtract foo.tar.xz
所以你可以看到我的問題在於參數,我成功提取它但由於文件副檔名而無法輸入它。那麼如何在參數中刪除它以便我可以進入
foo
目錄
shell 腳本永遠不能更改其父程序(呼叫腳本的 shell)的工作目錄。因此,儘管您可能會更改到腳本中創建的目錄*,*但一旦腳本終止(並且它的環境被破壞,包括特定目錄是程序的目前目錄這一事實),您將發現自己在任何目錄中當你執行腳本時。
但是,shell 函式在目前 shell 會話中執行,並且可以
cd
按照您期望的方式設置會話的目前工作目錄。以下是一個 shell 函式,它嘗試提取
tar
在其命令行上給出的存檔,如果成功,則更改為存檔名稱提供的目錄,並.tar
從末尾刪除(這是使用標準參數擴展完成的)。xtract () { tar -x -v -f "$1" && cd -- "${1%.tar}" }
您可以通過將上述內容粘貼到您的 shell 中來定義此函式,或者您可以將其添加到您通常添加 shell 函式和別名的任何位置,並且它將在您啟動的下一個 shell 會話中可用。
如果您想支持
xz
-compressedtar
存檔,您可能需要更改上述功能,以便它使用正確的選項tar
或您的系統(-J
或--xz
使用 GNUtar
,例如),或通過xz -d -c -- "$1"
管道將存檔從tar -x -v -f -
. 您還必須調整cd
命令,使其刪除.tar.xz
而不是僅從.tar
給定存檔文件名的末尾刪除。如果您足夠聰明,
tar
可以使用文件名後綴來正確確定壓縮算法,那麼您可以通過xtract () { tar -x -v -f "$1" && cd -- "${1%.tar.*}" }
與前一個函式的不同之處在於,我們先剝離
.tar
後跟一個點,然後是存檔名稱末尾的任何字元串,以到達我們嘗試cd
進入的目錄。