2017-03-27 3 views
0

私は、何百万ものファイルを含む大きなtarファイルを持っています。効率の理由から、私はディスクにファイルを解凍したくありません。tarファイルのファイルバイトオフセット(および長さ)を取得する方法

代わりに、希望のファイル名が与えられたら、私はスクリプトを書いています。 Pythonはtarファイルから関連するデータを取得します。

インデックスを作成する簡単な方法は、tarファイルのすべてのファイルの開始バイトと長さを教えてください。私は上記のPythonスクリプトで使用するためのインデックスとしてディスクにダンプできますか?

おそらく、tarコマンドでこれを行うことができますが、マニュアルページには何も明白ではありません。

タールは圧縮されていません。

ありがとうございます。同様のユースケースと他人の利益のために

答えて

0

Pythonで(私はhttp://fomori.org/blog/?p=391たのである本質で便利なユーティリティを適応し、最終的に(つまりは、tarファイルのランダムアクセスを可能にインデックスを構築したいです) ):1000%で

fp=open('index.txt','wt') 
ctr=0 
with tarfile.open(tarfname, 'r|') as db: 
    for tarinfo in db: 
    currentseek = tarinfo.offset_data 
    rec = "%d\t%d\t%d\t%s\n" % (ctr,tarinfo.offset_data, tarinfo.size, tarinfo.name) 
     fp.write(rec) 
     ctr += 1 
    if ctr % 1000 == 0: 
     db.members = [] 
fp.close() 

チェックはRAMを節約します。私はこれがもっとうまくいくかもしれないと確信しています。

-1
tar -O -xf <tar-file> <file-you-want-to-extract> | <your-python-program> 
+0

ありがとうございますが、ファイルをディスクに抽出します。 OPを参照してください - 私はこれをしたくありません。私はタール内のファイルのすべての開始バイトとファイルの長さのインデックスを作成したい...その後、私は関連する位置を追求し、データを引き出すスクリプトを記述します。 – jcollomosse

+0

linuxコマンドを修正してディスクを避けました。 IMHO、タールの書き換えを避けてください。 – Mark

関連する問題