Tar
tar 提取到具有相同基本名稱的目錄中?
我有一個壓縮文件,例如
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>
這將完成任務,儘管可能還有一個更緊湊的答案。