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

Method to get file byte offsets (and lengths) in tar files

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

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

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

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

tar 未压缩。

提前致谢。

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

为了其他有类似用例的人的利益(即想要建立一个索引以实现对 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。我相信这会更整洁。

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

tar -tvf <tar-file> -R | awk '
BEGIN{
  getline;
  f=;
  s=;
}
{
  offset = int() * 512 - and((s+511), -512)
  print offset,s,f;
  f=;
  s=;
}'