内部包含长文件名的存档 – 解存档达到文件系统限制并失败

内部包含长文件名的存档 – 解存档达到文件系统限制并失败

我有一个解档程序,它接受档案名称和目录名称,并将该档案中的所有文件转储到该目录中。没有其他命令行选项。然而,有人在我想要解压的存档中压缩了一个文件,文件名中有 500 个左右的字符,现在该程序在遇到该文件时会失败(实际上所有文件系统都有 256 个字符的限制)。除了更改源代码和重新编译解档器之外,我还有什么选择?

我必须将某些内容安装为目录,这将获取解档器正在写入的文件,并将它们转储到其他地方 - 甚至可能作为一个大文件。即使某些写入确实失败了,这个东西也不应该发送失败消息。

我尝试过将目录挂载为文件 - 但是,该目录必须具有底层文件系统,然后它具有与原始 FS 相同的限制。

我也尝试过使用管道 - 但管道后面不能有参数(例如/pipe/reallylongfilename)。这样的事情可能吗?

存档是一个.zim.我正在使用zimdumpOpenZim 库中的工具。

答案1

如果您知道这个很长的名称,那么您可以尝试使用十六进制编辑器(或?)在存档中编辑它sed。如果您需要从头开始,请使用副本。

让示例文件名为very-long-filename.合理的攻角:

  • very/long/filename,
  • very//////filename,
  • very0long-filename其中0表示 NULL 字符 ( 0x00),
  • very000000000000000如上)。

一般来说,删除字符(从而使存档更小)是不明智的。它会更改存档内的重要偏移量,并可能会损坏它。

我用一个文件做了一个测试.zip。我承认我的very-long-filename时间并不太长。我设法让它更短,也许这些方法也适用于太长。在我的测试中我必须编辑两个片段文件的,因为每个文件名都.zip被存储两次

您使用了“压缩”一词,但没有明确说明您的存档是什么。不管是什么,我希望它以纯文本形式存储文件名,并且您将成功编辑它们。祝你好运。

相关内容