2

如何在 Python 3.4 中使用带有“跟随符号链接”功能的 tar+gzip 压缩?问题是:

  • tarfile.open() 支持 "w:gz" 模式但不支持 "dereference" 选项
  • tarfile.tarfile() 支持“取消引用”但不支持“w:gz”模式

代码:

...
mode = ""
if bckentry['method'] == "tar":
    mode = "w"
elif bckentry['method'] == "targz":
    mode = "w:gz"

archive = tarfile.TarFile(name=filepath, mode=mode)
archive.dereference = True if bckentry['followsym'] == "yes" else False
# archive = tarfile.open(filepath, mode=mode)

if bckentry['withpath'] == 'yes':
    for entry in bckentry['include_dirs']:
        archive.add(entry, filter=self.filter_tar)
elif bckentry['withpath'] == 'no':
    for entry in bckentry['include_dirs']:
        archive.add(entry, arcname=os.path.basename(entry), filter=self.filter_tar)
...
4

1 回答 1

2

tarfile.open是类方法的快捷方式TarFile.open,它依次调用TarFile构造函数。文档有点含糊,但从代码中可以明显看出,前两个将dereference关键字参数和所有其他未使用的 kwargs 传递给TarFile构造函数。

因此dereference,如果您只是将其作为关键字参数传递,您可以使用它们中的任何一个:

archive = tarfile.open(name='foo.tar.gz', mode='w:gz', dereference=True)
于 2016-09-04T20:19:53.387 回答