从控制台归档的 TARBall 中提取文件

Extract file from TARBall archived from console

我遇到下一个问题:

有 TAR 存档我必须使用 file-roller 编译一段时间作为脚本例程使用 file-roller 命令。 现在我不得不将我的脚本更改为更多 "technical" 和跨平台直接引用 TAR 命令: 为此,我只是 cd 到特定目录并使用此命令:

tar -cvzf "path/to/archive.tar.gz" "." > /dev/null 2>&1

“.”的问题目录转换为存档内的路径,文件存储在子目录“.”下。接下来的方式:

archive.tar.gz
-> ./
   -> file1.ext
   -> file2.ext

我已经设法使用 --transform 选项以这种方式将文件放回存档的根文件夹中:

tar -cvzf "path/to/archive.tar.gz" --transform "s,.,," "." > /dev/null 2>&1

结果是正确组织的存档,文件移动到存档根文件夹:

archive.tar.gz
-> file1.ext
-> file2.ext

file-roller 可读的输出存档,tar 的文件提取功能已损坏:

tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/" file1.ext

TAR 必须立即报告:存档或类似文件中没有此类文件或目录。

tar -x -f "path/to/archive.tar" -C "$TEMP_DIR/"

仍然正常工作,并将存档中的所有文件提取到“$TEMP_DIR/”。

您需要去掉第一个点和斜杠:

tar -cvzf "path/to/archive.tar.gz" --transform "s,./,," "." > /dev/null 2>&1

或者你可以简单地做(如果你没有隐藏文件)

tar -cvzf "path/to/archive.tar.gz" * > /dev/null 2>&1

提取可以直接在tar.gz上运行:

tar zxf "path/to/archive.tar.gz" -C "$TEMP_DIR/" tarred-file.ext