【发布时间】:2020-09-20 19:23:02
【问题描述】:
Ubuntu 16.04
重击 4.4.20
我想跟踪位于 tar.gz 文件中的 SQL 文件的最后 30 行。我注意到 SQL 备份由于文件锁定而失败。我不想解压整个压缩文件,而是简单地尾随 SQL 备份,然后 grep 查找某些短语。
StackOverflown Thread 解释说压缩文件无法做到这一点。这是否也适用于像这样创建的 tar 文件:
tar czf name.tar.gz foldername
如果这在其他帖子中有解释,请删除这个帖子,我会继续搜索。
【问题讨论】:
-
您链接到的答案并没有说出您要解释的内容。这对于 zip 文件是完全可能的。
-
...嗯,这是正确的和错误。正确的是,解压缩器必须从给定文件的开头开始,因此 tail 仍将执行解压缩文件的工作,但会丢弃该工作,直到它到达您要求的最后 N 行。但是声称你不能编写一个命令,它只会给你一个 zip 文件的最后 N 行而不在磁盘上创建任何临时文件,这是错误的。
-
...也就是说,zip 文件实际上比
tar.gz文件在seek()周围更容易。使用.tar.gz,您必须按照从头到尾的顺序进行.gz解压缩。使用 zip 文件时,它有一个页脚,说明存档中每个解压缩流的位置,因此读者可以跳转到它想要读取的特定文件,而无需先解压缩它之前的文件(如.tar.gz所必需的) . -
...无论如何,您可以选择使用 zip 吗?鉴于您的既定目标,如果您可以选择,
tar.gz是错误的存档格式。 (再说一次,如果您对存档有完全的控制权,为什么不在其中有一个仅您想要 grep 的特定内容的文件?) -
无论如何:我可以给你一个答案,从字面上做你所要求的,但它会很慢,因为它仍然会做读取和解压缩数据尾的工作正在扔掉,这可以说完全违背了使用 tail 的观点。 (假设
grep比gunzip快,并且您有大量的CPU 资源,那么您甚至可能不会比完全不使用tail 的代码获得挂钟时间优势。