【问题标题】:Directly modifying uncompressed tar file直接修改未压缩的tar文件
【发布时间】:2015-09-22 00:24:11
【问题描述】:

我有数千个未压缩的 tar 文件,这些文件加起来将近 1 TB 的数据。现在我想修改一些 tar 文件中的一个特定字符串。

我可以直接执行此操作而不提取 tar 文件,例如与 sed?我当然不想得到损坏的 tar 文件。


详情:

我要修改的字符串长度为 4 个字符。我可以用另一个 4 个字符的字符串替换它吗? specification of a tar file 似乎只包含 tar 文件中包含的每个文件的标头以及每个文件的长度的校验和,因此将 tar 文件中包含的文件中的 4 个字符替换为其他 4 个字符应该没问题,对吧?

我什至可以用 6 个字符的字符串替换 4 个字符的字符串吗? tar 文件中似乎有一些填充,那么添加 2 个字符时得到损坏的 tar 文件的概率是多少?对于这样一个损坏的 tar 文件,提取的效果如何?

我没有嵌套的 tar 文件,所以 this negative answer 不适用于我的情况。

【问题讨论】:

  • 从tar中解压出需要的文件,用sed修改,从tar文件中删除文件,然后将修改后的文件添加到tar文件中?
  • 是的,有效的评论,赛勒斯。但是对于 1TB 的数据,我认为考虑一种优化方法也是有效的——这就是问题所在。

标签: linux unix archive tar corruption


【解决方案1】:

几年前我不得不使用原始 tar 文件,但我不建议这样做。有太多的“tar”格式来确保你的替换是在做你想让它做的事情,并且做你想让它做的事情。

在我的情况下,我别无选择,我不得不使用 emacs 来编辑 tar 文件。这是某人的备份。

如果我遇到了您的问题,我会花时间编写一个小脚本/程序来提取和sed(1) 事情以避免可能(可能不太可能)损坏的存档。

此外,您可能必须以 root 身份运行以确保正确的权限和时间戳。

【讨论】:

    【解决方案2】:

    这是几个问题:

    • 你能修改tar文件中的文件内容吗(可能是因为文件内容没有校验和)
    • 什么工具有用(seddocumentation 不清楚,但 binary sed replacement 中的其他工具说“不”,并提出替代方案)
    • 你能用 6 个字符的字符串替换一个 4 个字符的字符串吗(可能不会,因为这会改变文件长度,这需要调整标题及其校验和)。

    【讨论】:

    • 你说得对,我提出了几个问题。到目前为止,您的第一个项目符号是最相关的 - “可能没有损坏”听起来有点冒险,因为我有大量包含重要数据的 tar 文件。
    • 您的第二个项目符号不是作为问题的:我知道我可以使用 sed 进行替换,我只是将其作为直接修改的示例提到 - 而不是解压缩然后修改然后 tar。
    • 对于它的价值,快速检查 似乎表明用 sed 进行简单替换是可行的。但如果能更好地记录其在二进制文件上的行为,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    相关资源
    最近更新 更多