4

ファイルの内容に文字列を使用して、Python から階層ディレクトリ構造を持つ tar アーカイブを作成したいと考えています。この質問を読みました。これは、文字列をディレクトリとしてではなくファイルとして追加する方法を示しています。実際にディレクトリを作成せずに、その場で tar アーカイブにディレクトリを追加するにはどうすればよいですか?

何かのようなもの:

archive.tgz:
    file1.txt
    file2.txt
    dir1/
        file3.txt
        dir2/
            file4.txt
4

3 に答える 3

11

リンクされた質問に示されている例を拡張すると、次のように実行できます。

import tarfile
import StringIO
import time

tar = tarfile.TarFile("test.tar", "w")

string = StringIO.StringIO()
string.write("hello")
string.seek(0)

info = tarfile.TarInfo(name='dir')
info.type = tarfile.DIRTYPE
info.mode = 0755
info.mtime = time.time()
tar.addfile(tarinfo=info)

info = tarfile.TarInfo(name='dir/foo')
info.size=len(string.buf)
info.mtime = time.time()
tar.addfile(tarinfo=info, fileobj=string)

tar.close()

modeデフォルト値には、ディレクトリを変更してその内容を取得するために必要なディレクトリの所有者の実行権限が含まれていない可能性があるため、属性には注意してください。

于 2011-12-27T20:35:17.630 に答える
1

tar ファイル形式を見ると、実行可能のようです。各サブディレクトリに入るファイルは、名前として相対パス名 (例: dir1/file3.txt) を取得します。

唯一の秘訣は、ファイルを格納する前に各ディレクトリを定義する必要があることです (tar必要なサブディレクトリをその場で作成しません)。tarfile エントリをディレクトリとして識別するために使用できる特別なフラグがありますが、従来の目的のために、ディレクトリを表すものとしてtarで終わる名前を持つファイル エントリも受け入れるため、ゼロからファイルとして/追加できるはずです。dir1/同じテクニックを使用して長さの文字列。

于 2011-12-27T20:35:10.563 に答える