Tar

使用單個 tar 呼叫提取多個 .tar.gz 文件

  • January 3, 2022

我想知道是否(當然,如何)可以告訴tar在一次執行中提取多個文件。

我是一個有多年經驗的 Unix 使用者,當然我知道你可以使用fororfind或類似的東西tar為你想要提取的每個存檔呼叫一次,但我想不出一個工作命令行導致我的tar一次提取兩個 .tar.gz 文件。(不,沒有任何問題for,我只是在問是否可以沒有。)

我是出於好奇而問這個問題,也許

  • 有一個奇怪的tar地方支持這個
  • 有人知道如何使用我嘗試時向我建議的-M參數tar``tar -zxv -f a.tgz -f b.tgz
  • 我們都是盲人,這很容易做到——但我在網路上找不到任何沒有使用foror findor or or or xargsor like 的提示。

請不要回复tar -zxvf *.tar.gz(因為那行不通),而僅在您完全確定的情況下回复“不起作用”(也許也有一個很好的解釋原因)。

**編輯:**有人指出我在 Stack Overflow 上回答了這個問題,它非常詳細地說,如果不破壞目前的tar語法,這是不可能的,但我認為這不是真的。恕我直言,使用tar -zxv -f a.tgz -f b.tgzortar -zxv --all-args-are-archives *.tar.gz不會破壞現有語法。

這是可能的,語法很簡單:

$ cat *.tar | tar -xvf - -i

-i 選項忽略 tar 檔案末尾的 EOF,來自手冊頁:

-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)

對於 * .tar.gz

for file in *.tar.gz; do tar -zxf "$file"; done

對於 * .tar.bz2

for file in *.tar.bz2; do tar -jxf "$file"; done

對於 * .tar.xz

for file in *.tar.xz; do tar -Jxf "$file"; done

對於 * .tar.zst 新:

for file in *.tar.zst; do tar --zstf -xf "$file"; done

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