Tar

tar 提取到具有相同基本名稱的目錄中?

  • April 15, 2021

我有一個壓縮文件,例如myArchive123.tar.gz. 它裡麵包含一個文件夾,如helloWorld

如果我提取它:tar -xf myArchive123.tar.gz我得到helloWorld文件夾:

ls 
myArchive123.tar.gz
helloWorld 

我希望輸出與文件名相同的名稱減去 .tar.gz 副檔名。IE:

tar <magic paramaters> myArchive123.tar.gz 
ls 
myArchive123.tar.gz
myArchive123
cd myArchive123
ls 
 helloWorld

這可以做到嗎?

  • 我永遠不知道檔案裡有什麼。可以是一個文件夾,也可以是很多文件。
  • 如果 tar 做不到,我可以使用其他工具。
  • 我可以使用可以變成腳本的更長的形式

編輯

與此同時,我自己編寫了一個似乎可以完成工作的腳本。(請參閱下面我發布的答案)。如果可以改進,請隨時發表評論/其他答案。最主要的是它應該可以打包成一個單行,比如:

extract <file>

使用gnu tar,您可以使用--xform(或--transform)添加/prefix/到每個文件名之前:

tar -xf myArchive.tar.gz --xform='s|^|myArchive/|S'

請注意,沒有前導/,表達式以從文件名轉換中排除符號連結目標結尾。 要對其進行測試(試執行):prefix/``sed``S

tar -tf myArchive.tar.gz --xform='s|^|myArchive/|S' --verbose --show-transformed-names

為了讓您開始,這是一個非常簡單的腳本,您可以呼叫它extract <file>

STRIP=${1%.*} #去掉最後一個後綴
NAME=${STRIP%.tar} #strip *.tar*後綴,如果存在
tar -xf "$1" --xform="s|^|$NAME/|S" #執行命令

好吧,您至少可以分幾步完成。如果你做了

mkdir <archive name>
tar -xf <archive name>.tar.gz --strip-components=1 -C <archive name>

這將完成任務,儘管可能還有一個更緊湊的答案。

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