繁体   English   中英

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

[英]Nested tar is created while creating simple tar.gz in python

我尝试使用下面的代码使用 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>的结构,如 tar 文件的创建方式在 linux 上使用 tar 命令。

有人可以解释为什么它会在另一个内部创建两个 tar 文件吗?

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

您的代码工作正常。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM