在 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=;
}'
我有一个包含数百万个文件的大型 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=;
}'