如何在Python 2.4中使用TarFile反引用标志?

2 投票
2 回答
1374 浏览
提问于 2025-04-16 23:11

我写了一个脚本,可以把我们所有的日志文件收集到一个tar文件里。但是问题是,这个文件里没有包含软链接的数据。我试着使用一个叫做“dereference”的标志,但在Python 2.4.3中并不支持这个功能。

我不能使用命令行,因为命令行有长度限制,而我想支持很多日志文件。

user ~/Desktop]$python
Python 2.4.3 (#1, Jun 11 2009, 14:09:37)

[GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2

>>> import tarfile
>>> tarfile.TarFile('test.tar.gz', mode='w', dereference=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: __init__() got an unexpected keyword argument 'dereference'
>>>

2 个回答

0

你难道不可以直接在tar命令中使用-T或者--files-from这个选项吗?

3

根据Python 2.4 的文档dereference = True 是被支持的。看起来从 Python 2.3 开始,tarfile 就已经支持这个功能了。

除非你是在非 Posix 系统上(比如 Windows),否则你可能是用错了。请把你的代码和使用 dereference = True 时遇到的错误发出来,这样我们才能帮你找出问题所在。

另外,提到的软链接是指符号链接吗?因为 dereference = True 就是用来处理这个的。

补充一下:我刚刚查看了Python 2.4 中 tarfile 的代码。它不支持构造函数中的 dereference 参数,但似乎必要的代码可以实际进行解引用(与Python 2.6 的源代码对比过)。所以,

import tarfile
tf = tarfile.TarFile('test.tar.gz', mode='w')
tf.dereference = True

应该可以正常工作。请更新你的结果。

撰写回答