Tar

解壓時如何重命名 tarball 中的頂級文件夾?

  • August 27, 2019

如果我有一個 tar.gz 存檔,其中包含一個名為 like 的文件夾<somename>-<somenumber>,我如何將其解壓縮到一個名為的文件夾中<somename>

例如,該文件somearchive.tar.gz包含一個頂級文件夾somearchive-0.1.2,我嘗試了類似:

tar xvfz somearchive.tar.gz --transform s/[a-zA-Z]+\-[0-9\.]+/somearchive/

但這會將其提取到預設文件夾中。

正如 steeldriver 指出的那樣,tar --transform需要一個 sed 替換錶達式,它使用基本的正則表達式語法,而不是擴展的正則表達式語法,特別是“一個或多個”運算符 is \+, not +。請參閱 為什麼我的正則表達式在 X 中有效但在 Y 中無效?

tar xvfz somearchive.tar.gz --transform 's/^[a-zA-Z]\+-[0-9.]\+/somearchive/'

或者你可以簡單地做

tar xvfz somearchive.tar.gz --transform 's!^[^/]*!somearchive!'

吉爾斯的回答完全符合我的問題。但是,我也發現這種替代方法也有效:

mkdir somearchive
tar xvfz somearchive.tar.gz --strip 1 -C somearchive

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