我有一个游戏模组的文件。这个模组需要一些音乐文件在不同的文件夹中出现两次。鉴于两个文件夹中的音乐相同,有没有办法将文件压缩一次,然后更改目录并引用另一个副本,这样如果我提取 zip 文件,它会提取文件两次,但是它们实际上只有一次在拉链中?
类似于使用修改后的 TOC 创建 ISO(尽管我也不知道该怎么做)
zip 将具有的示例:
mod.zip
\music\set_a\tune1.mp3
\music\set_a\tune2.mp3
\music\set_a\tune3.mp3
\music\set_a\tune4.mp3
\music\set_a\tune5.mp3
\music\set_a\tune6.mp3
\music\set_b\tune1.mp3
\music\set_b\tune2.mp3
\music\set_b\tune3.mp3
\music\set_b\tune4.mp3
\music\set_b\tune5.mp3
\music\set_b\tune6.mp3
\graphics\set_a\img1.png
\graphics\set_a\img2.png
\graphics\set_b\img1.png
\graphics\set_b\img2.png
想象一下 和 的曲调set_a
是set_b
相同的,而图形set_a
则set_b
不是。
在理想的世界中,我会用set_b
长度为 0 的文件替换所有 mp3 文件,然后在创建 zip 文件后,我会更改索引并使其引用set_a
数据,以便在提取时创建music\set_b\tune1.mp3
,但使用数据的music\set_a
。
那可能吗?如果没有,还有其他简单的方法来创建类似的东西吗?
一个简单的替代方案可能是使用“可靠”存档格式。这始终是 .tar.foo 档案的工作方式,并且是 .rar 和 .7z 格式的可选选项。
在这种模式下,存档的内容被连接在一起并压缩为单个连续流,这意味着也将检测到文件之间的重复——并且作为常规压缩的一部分,应该对相同的文件进行重复数据删除。
(这种模式的缺点是它会使提取单个文件的速度变慢,并且无法轻松更新存档。)
注意:这个另一个线程(已关闭)有答案说这仅适用于与字典大小参数相比相对少量的数据。但至少它比对已经很糟糕的 .zip 结构进行非标准更改的风险要小。
zpaq为您完成了这项工作,它内置了重复数据删除功能,它是开源的,并且至少可以在 Windows 和 Linux 上运行(可能已经打包)。
这是对 Linux 的快速检查:
查看存档的大小。另请注意,我们没有提供有关文件重复的任何信息,也没有提供软/硬链接。