我有一个解档程序,它接受档案名称和目录名称,并将该档案中的所有文件转储到该目录中。没有其他命令行选项。然而,有人在我想要解压的存档中压缩了一个文件,文件名中有 500 个左右的字符,现在该程序在遇到该文件时会失败(实际上所有文件系统都有 256 个字符的限制)。除了更改源代码和重新编译解档器之外,我还有什么选择?
我必须将某些内容安装为目录,这将获取解档器正在写入的文件,并将它们转储到其他地方 - 甚至可能作为一个大文件。即使某些写入确实失败了,这个东西也不应该发送失败消息。
我尝试过将目录挂载为文件 - 但是,该目录必须具有底层文件系统,然后它具有与原始 FS 相同的限制。
我也尝试过使用管道 - 但管道后面不能有参数(例如/pipe/reallylongfilename
)。这样的事情可能吗?
存档是一个.zim
.我正在使用zimdump
OpenZim 库中的工具。
答案1
如果您知道这个很长的名称,那么您可以尝试使用十六进制编辑器(或?)在存档中编辑它sed
。如果您需要从头开始,请使用副本。
让示例文件名为very-long-filename
.合理的攻角:
very/long/filename
,very//////filename
,very0long-filename
其中0
表示 NULL 字符 (0x00
),very00000000000000
(0
如上)。
一般来说,删除字符(从而使存档更小)是不明智的。它会更改存档内的重要偏移量,并可能会损坏它。
我用一个文件做了一个测试.zip
。我承认我的very-long-filename
时间并不太长。我设法让它更短,也许这些方法也适用于是太长。在我的测试中我必须编辑两个片段文件的,因为每个文件名都.zip
被存储两次。
您使用了“压缩”一词,但没有明确说明您的存档是什么。不管是什么,我希望它以纯文本形式存储文件名,并且您将成功编辑它们。祝你好运。