嵌套 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.gz
或 tar.bz
或 tar.xz
类型的文件时 - 您看到的是两种工具的组合 - tar
归档器和某种压缩器。
您用来打开文件的任何应用程序显然都不是专门为处理压缩的 tar 文件而设计的,因此它会将您的文件显示为带有嵌套 tar 的存档从技术上讲是正确的,但大多数现代实用程序都避免这样显示。
您可以传递 "w"
而不是 "w:gz"
,这将创建一个没有嵌套 gz 文件的 tar 文件
我尝试使用以下代码创建简单的 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.gz
或 tar.bz
或 tar.xz
类型的文件时 - 您看到的是两种工具的组合 - tar
归档器和某种压缩器。
您用来打开文件的任何应用程序显然都不是专门为处理压缩的 tar 文件而设计的,因此它会将您的文件显示为带有嵌套 tar 的存档从技术上讲是正确的,但大多数现代实用程序都避免这样显示。
您可以传递 "w"
而不是 "w:gz"
,这将创建一个没有嵌套 gz 文件的 tar 文件