如何在Python中将文件添加到tar文件中,而不添加目录层次结构?
当我在一个 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"))