0

我正在使用 python tarfile 模块从 *.tgz 文件中提取文件。这是我使用的:

import tarfile
tar = tarfile.open("some.tar")
tar.extractall(".")
tar.close()

假设“some.tar”内容为:

-a.txt ===> user:usr1 , group: grp1
-b.txt ===> user:usr2 , group: grp2

但是提取后我丢失了所有用户、组、日期...信息。它们现在属于调用脚本的任何人(在我的情况下为 root)。他们变得像:

-a.txt ===> user:root , group: root
-b.txt ===> user:root , group: root

有没有办法保留文件所有者,文件的日期信息?

tarfile 模块页面

-handles directories, regular files, hardlinks, symbolic links, fifos, character devices and block devices and is able to acquire and restore file information like timestamp, access permissions and owner.

从这个陈述中我了解到,通过“tarfile”模块很可能做到这一点,还是我理解错了?

Python 版本是 2.6.1

编辑:我以 root 身份运行此脚本

谢谢

4

2 回答 2

0

首先,您的脚本需要以 root 身份运行(在类似 unix 的系统上)。否则,你不能使用 chown。

您需要获取文件的 TarInfo 对象:

http://docs.python.org/library/tarfile.html#tarfile.TarInfo

在那里你会得到 uid(用户 id)和 gid(组 id)和(或用户名)。

然后你需要使用 chown。

于 2011-08-30T15:19:08.460 回答
0

正如 guettli 所说,您必须是 root 才能将文件的所有权更改给其他人。否则,您将打开一个巨大的安全漏洞。在使用 tar(1) 程序或尝试使用 python 中的 tarfile 包时,这是正确的。

但是请注意,一些早期版本的 Python 有一个错误(请参阅下面评论中的问题),这意味着由 root 提取的文件归 root 所有,而不是真正的所有者(用户和组)。

于 2011-08-30T15:24:15.170 回答