在tar文件中获取文件字节偏移量(和长度)的方法

时间:2017-03-27 16:36:36

标签: python linux file tar

我有一个包含数百万个文件的大型tar文件。出于效率原因,我不想将文件解压缩到磁盘。

相反,给定一个所需的文件名,我想写一个脚本,例如Python从tar文件中提取相关的数据块。

是否有一种简单的方法来创建索引,告诉我tar文件中每个文件的起始字节和长度,例如我可以转储到磁盘作为在上述Python脚本中使用的索引吗?

也许tar命令可以做到这一点,但我在手册页中没有看到任何明显的东西。

焦油未被压缩。

提前致谢。

3 个答案:

答案 0 :(得分:2)

为了其他具有类似用例的人的利益(即想要建立一个能够在tar文件上进行随机访问的索引)最后我在http://fomori.org/blog/?p=391调整了一个方便的实用程序,其实质是(在Python中) ):

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()

%1000处的检查可以节省RAM。我相信这可能更整洁。

答案 1 :(得分:2)

Python代码执行得不是很好。我使用下面的awk脚本为大型tar文件执行此操作。

int

答案 2 :(得分:-2)

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