【问题标题】:Nested tar is created while creating simple tar.gz in python在 python 中创建简单的 tar.gz 时会创建嵌套的 tar
【发布时间】:2020-07-27 17:30:56
【问题描述】:

我尝试使用下面的代码使用 python 创建给定目录中所有文件的简单 tar 文件。

目录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>,就像在 linux 上使用 tar 命令创建 tar 文件的方式一样。

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

【问题讨论】:

    标签: python python-3.6 tarfile


    【解决方案1】:

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

    您的代码工作正常。

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        相关资源
        最近更新 更多