0

私はPythontarfileモジュールを使用して、*。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 に答える