嵌套 tar 是在 python 中创建简单 tar.gz 时创建的

Nested tar is created while creating simple tar.gz in python

我尝试使用以下代码创建简单的 tar 文件,其中包含给定目录中存在的所有文件,使用 python。

D:/tmp/目录下只有一些普通文件,里面没有子目录。

import os
import tarfile

def createTar(path, tar_name):
    with tarfile.open(tar_name, "w:gz") as tar_obj:
        for root, dirs, files in os.walk(path):
            for file in files:
                tar_obj.add(os.path.join(root, file))

createTar("D:/tmp/", "D:/sample.tar.gz")

上面的示例代码有效,但它创建了嵌套的 tar 文件,如结构 D:\sample.tar.gz\sample.tar\<all files> 而不是 D:\sample.tar.gz\<all files> ,就像 tar 文件是如何在 linux 上创建的tar命令。

有人可以解释为什么它会创建两个 tar 文件,就像一个文件在另一个文件中一样吗?

您没有嵌套的 tar 文件。 gz 文件中有一个 tar 文件。

您的代码工作正常。

gz 是它自己的格式。它类似于 zip,但只能容纳 一个 个文件。 tar 是一种未压缩的存档格式。它没有自己的压缩。

因此,每当您看到 tar.gztar.bztar.xz 类型的文件时 - 您看到的是两种工具的组合 - tar 归档器和某种压缩器。

您用来打开文件的任何应用程序显然都不是专门为处理压缩的 tar 文件而设计的,因此它会将您的文件显示为带有嵌套 tar 的存档从技术上讲是正确的,但大多数现代实用程序都避免这样显示。

您可以传递 "w" 而不是 "w:gz",这将创建一个没有嵌套 gz 文件的 tar 文件