Shell-Script

提取 tar 然後進入其目錄(shell 腳本)

  • May 14, 2022

如何使腳本提取 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使用 GNU tar,例如),或通過xz -d -c -- "$1"管道將存檔從tar -x -v -f -. 您還必須調整cd命令,使其刪除.tar.xz而不是僅從.tar給定存檔文件名的末尾刪除。

如果您足夠聰明,tar可以使用文件名後綴來正確確定壓縮算法,那麼您可以通過

xtract () {
   tar -x -v -f "$1" &&
   cd -- "${1%.tar.*}"
}

與前一個函式的不同之處在於,我們先剝離.tar後跟一個點,然後是存檔名稱末尾的任何字元串,以到達我們嘗試cd進入的目錄。

引用自:https://unix.stackexchange.com/questions/702502