如何在Python中将文件添加到tar文件中,而不添加目录层次结构?

83 投票
7 回答
74352 浏览
提问于 2025-04-15 19:07

当我在一个 tarfile 对象上调用 add() 方法,并传入一个文件路径时,这个文件会按照原来的文件夹结构被添加到压缩包里。换句话说,如果我解压这个压缩包,原来的文件夹结构会被完整还原出来。

有没有办法只添加一个普通文件,不带任何文件夹信息,这样解压后就能得到一个平坦的文件列表呢?

7 个回答

8

你可以试试使用“arcname”这个参数来给TarFile.add(name, arcname)。这个参数可以让你指定文件在压缩包里显示的名字。

110

使用 arcname 参数在 TarFile.add() 方法中是一种方便的方式,可以让你更好地控制归档文件的结构。

举个例子:假设你想把一个目录 repo/a.git/ 打包成一个 tar.gz 文件,但你希望在归档文件中,树的根目录是 a.git/ 而不是 repo/a.git/,你可以这样做:

archive = tarfile.open("a.git.tar.gz", "w|gz")
archive.add("repo/a.git", arcname="a.git")
archive.close()
62

你可以使用 tarfile.addfile() 这个方法,在 TarInfo 对象中,作为第一个参数,你可以指定一个和你要添加的文件不同的 name

这段代码应该会把 /path/to/filename 添加到 TAR 文件中,但提取出来时会显示为 myfilename

tar.addfile(tarfile.TarInfo("myfilename.txt"), open("/path/to/filename.txt"))

撰写回答