如何在不添加目录层次的情况下将文件添加到使用Python的tar文件中?
当我用带有文件path的tarfile
对象调用add()
时,该文件被添加到与目录层次关联的tarball中。 换句话说,如果我解压tarfile,那么原始目录层次结构中的目录就会被复制。
有没有简单地添加一个纯文件没有目录信息的方式,解压缩生成的tarball产生一个平面的文件列表?
您可以在TarInfo
对象中使用tarfile.addfile()
,这是第一个参数,您可以指定一个与您要添加的文件不同的name
。
这段代码应该为TAR文件添加/path/to/filename
,但是会将其解压为myfilename
:
tar.addfile(tarfile.TarInfo("myfilename.txt"), open("/path/to/filename.txt"))
TarFile.add()方法的参数arch是一个替代方便的方法来匹配您的目的地。
例如:你想把一个目录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()
也许你可以使用TarFile.add(name,arcname)的“arcname”参数。 它需要一个替代名称,该文件将在档案中。