我有一个包含数百万个文件的大型tar文件。出于效率原因,我不想将文件解压缩到磁盘。
相反,给定一个所需的文件名,我想写一个脚本,例如Python从tar文件中提取相关的数据块。
是否有一种简单的方法来创建索引,告诉我tar文件中每个文件的起始字节和长度,例如我可以转储到磁盘作为在上述Python脚本中使用的索引吗?
也许tar命令可以做到这一点,但我在手册页中没有看到任何明显的东西。
焦油未被压缩。
提前致谢。
答案 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>